Наследование приоритетов
Серверный процесс получает сообщения в порядке приоритетов. После получения запроса потоки внутри сервера наследуют приоритет потока-отправителя (но не алгоритм планирования). В результате относительные приоритеты потоков, осуществляющих запрос к серверу, сохраняются прежними, а сервер работает с соответствующим приоритетом. Таким образом, механизм наследования приоритетов на основе передачи сообщений позволяет избежать проблемы инверсии приоритетов.
Программный интерфейс механизма обмена сообщениями
Программный интерфейс (API) механизма обмена сообщениями состоит из следующих функций
Таблица Функции программного интерфейса механизма обмена сообщениями
Функция | Описание |
MsgSend() | Отправить сообщение и блокировать поток до получения ответа |
MsgReceive() | Ожидать сообщения |
MsgReceivePulse() | Ожидать короткого блокирующего сообщения (импульса) |
MsgReply() | Ответить на сообщение |
MsgError() | Переслать ответ, содержащий статус потока. Никакая другая информация, за исключением статуса, не передается |
MsgRead() | Прочитать дополнительные данные из полученного сообщения |
MsgWrite() | Записать дополнительные данные в ответное сообщение |
Msglnfo() | Получить информацию о полученном сообщении |
MsgSendPulse() | Передать короткое неблокирующее сообщение (импульс) |
MsgDeliverEvent() | Передать событие клиенту |
MsgKeyData() | Снабдить сообщение ключом безопасности |
События
Важным новшеством в архитектуре микроядра ОС QNX Neutrino является подсистема обработки событий. Стандарты POSIX и их расширения реального времени определяют несколько асинхронных методов уведомления — например, UNIX-сигналы (не выстраивают данные в очередь и не пересылают их), POSIX-сигналы реального времени (могут выстраивать данные в очередь и пересылать их) и т. д.
Существует три источника событий для выполняемого потока:
· вызов микроядра MsgDeliverEvent();
· обработчик сигналов;
· истечение срока действия таймера.
События бывают самых различных типов: импульсы QNX Neutrino, прерывания, различные формы сигналов, события принудительной "разблокировки". "Разблокировка" является средством, с помощью которого поток может быть освобожден от принудительной блокировки без передачи какого-либо явного события.
Из-за такого разнообразия типов событий, а также необходимости того, чтобы приложение выбирало наиболее подходящий асинхронный метод уведомления, было бы нерационально переложить исполнение программного кода, реализующего все эти функции,на серверные процессы .
Вместо этого клиентский поток может передать серверу некоторую структуру данных (или т.н, "жетон" — cookie) для последующего взаимодействия (рис. 2,20). Когда серверу необходимо послать уведомление клиентскому потоку, он производит вызов MsgDeliverEvent(), после чего микроядро устанавливает на данный клиентский поток указанный в "жетоне" тип события.
Дата добавления: 2017-01-29; просмотров: 785;