Каналы и соединения

В ОС QNX Neutrino сообщения передаются в направлении каналов (channel) и соединений (connection), а не напрямую от потока к потоку. Поток, которому необходимо получить сообщение, сначала создает канал, а другой поток, которому необходимо передать сообщение этому потоку, должен сначала установить соединение, "подключившись" к этому каналу. Каналы требуются для вызовов микроядра, предназначенных для обмена сообщениями (message kernel calls), и используются серверами для приема сообщений с помощью функции MsgRecelve(). Соединения создаются потоками-клиентами для того, чтобы "присоединиться" к каналам, открытым серверами. После того как соединения установлены, клиенты могут передавать по ним сообщения с помощью функции MsgSend(). Если несколько потоков процесса подключается к одному и тому же каналу, тогда для повышения эффективности все эти соединения отображаются в один объект ядра. Каналы и соединения, созданные процессом, обозначаются небольшими целочисленными идентификаторами. Клиентские соединения отображаются непосредственно в дескрипторы файлов.

Приведем функции для каналов и соединений.

Таблица Функции для каналов и соединений

Функция Описание
ChannelCreate() Создать канал для получения сообщений
ChannelDestroy() Уничтожить канал
ConnectAttach() Создать соединение для передачи сообщений
ConnectDetach() Закрыть соединение

 

 


Процесс, выполняемый как сервер, может содержать событийный цикл для получения и обработки сообщений.

Например:

chid = ChannelCreate(flags);

SETIOV(&iov, &msg, sizeof(msg));

for(;;){

rcv_id = MsgReceivev(chid, &iov, parts, &info ) ;

switch( msg.type ) {

/* Обработка сообщения. */

}

MsgReplyv( rcv_d, &iov, rparts ) ;

}

Этот цикл позволяет потоку получать сообщения от любого другого потока, установившего соединение с данным каналом.

С этим каналом связаны три очереди:

· очередь потоков, ожидающих сообщения;

· очередь потоков, которые отправили сообщения, но эти сообщения еще не получены;

· очередь потоков, которые отправили сообщения, и эти сообщения были получены, но ответы на них еще не отправлены.

Ожидающий поток блокируется, если оказывается в любой из этих очередей (т. е, блокируется в состоянии RECEIVE, SEND или REPLY)

Импульсы

Кроме служб синхронизации Send/Receive/Reply, в ОС QNX Neutrino используются неблокирующие сообщения фиксированного размера. Эти сообщения называются импульсами (pulses) и имеют небольшую длину (4 байта данных и 1 байт кода).

Код
Этот вид сообщений часто используется в качестве механизма уведомления внутри обработчиков прерываний.

8 битов

Значение
32 бита

 

рис. 2.17. Импульсы формат








Дата добавления: 2017-01-29; просмотров: 698;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.