Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 40 стр.

UptoLike

Составители: 

40
теля теряет смысл (за исключением одного частного случая с применением
функции MsgDeliverEvent(), которую рассмотрим в 3.7).
3.2. Векторные сообщения
В сервисном наборе существуют примитивы, поддерживающие пере-
дачу сообщений, состоящих из нескольких частей. В этом случае сообще-
ние, доставляемое от одного адресного пространства к другому, не требует
непрерывного буфера. Вместо этого как передающий, так и принимающий
потоки могут специфицировать векторную таблицу, которая указывает, в ка-
ких фрагментах памяти размещаются части сообщения (рис. 3.3).
Заметим, что размеры различных частей сообщения могут отличаться
для передающего и приемного потоков. Более того, примитивы обмена по-
зволяют принимать векторное сообщение как неделимое и, наоборот, при
приеме разделять одиночное сообщение на составные части. В табл. 3.3
перечислены примитивы для обмена векторными сообщениями.
Таблица 3.3
Функция Посылаемое сообщение Принимаемое сообщение
MsgSend() Одиночное Одиночное
MsgSendsv() Одиночное Векторное
MsgSendvs() Векторное Одиночное
MsgSendv() Векторное Векторное
Функции векторного обмена подобны MsqSend() и MsgReceive(), но в
поле аргументов векторных вызовов вместо буфера указывается массив
структур IOV с полями Len и Addr (длина и размещение составных частей
векторного сообщения соответственно). Вместо размера буфера указыва-
ется число элементов в массиве IOV.
3.3. Многошаговый обмен сообщениями
В операционной системе при обмене сообщениями между ее компо-
нентами (например, при обмене с файловой системой) используются сооб-
Part 1
Part 2
Part 3
Len Addr
IOV
Каждая часть может
иметь размер от 0
до 4 Гбайт
0
2
Структура
IOV
может состоять
из произвольного
числа частей
Передаваемые
данные
Рис. 3.3