Что такое функционирование в «Реальном масштабе времени»


  Последовательность действий


Download 1.86 Mb.
Pdf ko'rish
bet63/72
Sana19.04.2023
Hajmi1.86 Mb.
#1362511
TuriУчебное пособие
1   ...   59   60   61   62   63   64   65   66   ...   72
Bog'liq
Луканов А.С. Системы реального времени 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:
1   ...   59   60   61   62   63   64   65   66   ...   72




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling