Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vovk.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
456 Кб
Скачать
☆

10. Механізми взаємодії задач в ос рч (повідомлення, схеми обміну повідомленнями).

Микроядро Neutrino2 предлагает следующие формы IPC:

- Передача сообщений,

- Сигналы,

- Очереди сообщений POSIX,

- Общедоступная память,

- Каналы,

- FIFOs.

Поток, выполняющий MsgSend (), посылая сообщения в другое потока (который может быть в пределах другого процесса), будет блокирован, пока тот другой поток не выполнит MsgReceive (), обработает сообщения, и не выполнит MsgReply (). Если поток выполняет MsgReceive () без предварительно посланного сообщения, то он блокируется, пока другой поток не выполняет MsgSend (), то есть не прищлет сообщение.

Это блокирование синхронизирует поток-отправитель, что позволяет серверу отвечать клиенту и продолжать обработку, в то время как ядро асинхронно передает данные ответа до потока-отправителя и обозначают его как готовый к выполнению. Функция MsgReply () используется сервером для ответа клиенту, чтобы вернуть ноль или большее количество байтов, а функция MsgError () используется, чтобы вернуть клиенту только состояние. Обе функции разблокируют клиента от его MsgSend ().

Службы передачи сообщений копируют сообщения непосредственно из адресного пространства одного потока в другой без буферизации. Neutrino не анализирует содержание сообщения - данные в сообщении имеют значение только для отправителя и получателя.

Для простых сообщений Neutrino обеспечивает функции, которые принимают указатель непосредственно на буфер без потребности в IOV (Input-Output Vector - вектор ввода / вывода).

В Neutrino передача сообщений направлена скорее к каналам и подключениям, чем непосредственно от потока к потоку. Поток, желающий получить сообщение, сначала создает канал; другой поток, желающий послать сообщение первого потока, должен сначала создать подключение, присоединяясь к созданному каналу.

Как только соединение установлены, клиенты могут выполнять MsgSend (). Если много потоков в процессе прикрепляются на тот же самый канал, то одно подключение будет распределено между всеми потоками. Каналы и подключения в рамках процесса имеют целочисленных идентификатор. Клиентские подключения отображаются непосредственно в дескрипторы файлов.

Дополнительно к синхронных Send / Receive / Reply служб, Neutrino также поддерживает передачу сообщений фиксированного размера без блокирования его отправителя. Они определены как импульсы и имеют четыре байта данных плюс один байт кода. Импульсы часто используются как механизм сообщения в рамках программ обработки прерываний. Они также позволяют серверам отвечать клиентам без их блокировки.

Стандарт POSIX определяет набор неблокующих средств передачи сообщений, известных как очереди сообщений. В отличие от примитивов передачи сообщений Neutrino2, очереди сообщений постоянно находятся вне ядра. Очереди сообщений осуществляют промежуточное накопления сообщений, они существуют независимо от процессов, их используют. В Neutrino2 созданы очереди сообщения будут появляться в пространстве имен файлов в каталоге / dev / mqueue. Общедоступная память предлагает процессам использовать указатели, чтобы непосредственно читать и записывать в нее. Общедоступная память часто используется вместе с одним из примитивов синхронизации, чтобы сделать модификации данных атомарными. Общедоступная память наиболее эффективна, когда используется для модифицирования большого количества данных. Семафоры и мютексы - пригодны примитивы синхронизации для использования их в общедоступной памятью. Общедоступная память реализована в Neutrino в менеджере процессов (procnto) Канал - это безымянный файл, который служит как канал ввода / вывода между двумя или более процессами, когда один процесс записывает в канал, а другой читает из канала.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]