Что такое функционирование в «Реальном масштабе времени»
Последовательность действий
Download 1.86 Mb. Pdf ko'rish
|
Луканов А.С. Системы реального времени 2020
4.3.
Последовательность действий После компиляции программ сервера и клиента у нас будет 2 исполняемых файла. Назовём их server и client соответственно. Программу server необходимо запустить в фоновом режиме # server &. Она начнёт работать: создаст канал, выведет номер канала и идентификатор процесса сервера, будет ждать сообщения от клиента. Потом необходимо запустить клиента. Он попросит ввести идентификатор процесса сервера, для установления соединения с ним, и само сообщение (20 символов). Далее можно наблюдать, как сервер получит сообщение, выведет его и пошлёт ответ. На этом клиент закончит свою работу, но его можно запустить ещё раз и послать другое сообщение. Остановить работу сервера можно функцией kill < идентификатор процесса сервера >. 4.4. Результаты # `pwd`/server & [3] 2019364 # Prog server Server start working Chanel id: 1 Pid: 2019364 # `pwd`/client Prog client , Vvedite PID servera 2019364 Vveli 2019364 134 Connect res 3 , vvedite soobshenie Hello_server Vveli Hello_server Polychili soobshenie, rcvid 2 Soobshenie takoe : "Hello_server". "Eto otvet". # `pwd`/client Prog client , Vvedite PID servera 2019364 Vveli 2019364 Connect res 3 , vvedite soobshenie I_snova_Privet Vveli I_snova_Privet Polychili soobshenie, rcvid 2 Soobshenie takoe : "I_snova_Privet". "Eto otvet". # kill 2019364 # §5. Лабораторная работа № 5 «Тайм - ауты» 5.1. Теория Тайм-ауты ядра QNX/Neutrino позволяет вам получать тайм-ауты по всем блокированным состояниям. Наиболее часто у вас может возникнуть потребность в этом при обмене сообщениями: клиент, посылая сообщение серверу, не желает ждать ответа «вечно». В этом случае было бы удобно использовать тайм-аут ядра. Тайм-ауты ядра также полезны в сочетании с функцией pthreadjoin (): завершения потока тоже не всегда хочется долго ждать. Ниже приводится декларация для функции TimerTimeout(), которая является системным вызовом, ответственным за формирование тайм-аутов ядра. 135 #include int TimerTimeout (clockid_t id, int flags, const struct sigevent *notify, const uint64_t *ntime, uint64 t *otime); Видно, что функция TimerTimeout() возвращает целое число (индикатор удачи/неудачи; 0 означает, что все в порядке, -1 — что произошла ошибка и ее код записан в errno). Источник синхроимпульсов (CLOCK_REALTIME, и т.п.) указывается в id, параметр flags задает соответствующее состояние (или состояния). Параметр notify всегда должен быть событием уведомления типа SIGEV_UNBLOCK; параметр ntime указывает относительное время, спустя которое ядро должно сгенерировать тайм-аут. Параметр otime показывает предыдущее значение тайм-аута и в большинстве случаев не используется (вы можете передать вместо него NULL). Важно отметить, что тайм-ауты «взводятся» функцией TimerTimeout(), а запускаются по входу в одно из состояний, указанных в параметре flags. Сбрасывается тайм-аут при возврате; из любого системного вызова. Это означает, что вы должны заново « взводить» тайм-аут перед каждым системным вызовом, к которому вы хотите его применить. Сбрасывать тайм-аут после системного вызова не надо — это выполняется автоматически. Download 1.86 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling