IPC посредством прокси


altIPC посредством прокси

Прокси — это форма неблокирующего сообщения, особенно подходящего для извещения о наступлении события, когда посылающий процесс не нуждается в диалоге с получателем. Единственная функция прокси состоит в посылке фиксированного сообщения определенному процессу, который является владельцем прокси. Подобно сообщениям, прокси могут быть использованы в пределах всей сети.
Используя прокси, процесс или обработчик прерывания может послать сообщение другому процессу, не блокируясь и не ожидая ответа.
Вот некоторые примеры использования прокси:
Процесс желает известить другой процесс о наступлении какого-либо события, но при этом не может позволить себе посылку сообщения (в этом случае он оставался бы блокированным до тех пор, пока получатель не вызовет Receive() и Reply()).
Процесс хочет послать данные другому процессу, но при этом ему не требуется ни ответа, ни какого-либо другого подтверждения того, что адресат (получатель) получил сообщение.
Обработчик прерывания хочет известить процесс о поступлении новых данных.
Для создания прокси используется функция языка Си qnx_proxy_attach(). Любой другой процесс или обработчик прерывания, которому известен идентификатор прокси, может воспользоваться функцией языка Си Trigger() для того, чтобы заставить прокси передать заранее заданное сообщение. Запрос Trigger() обрабатывается Микроядром.
Прокси может быть «запущено» неоднократно — каждый раз при этом оно посылает сообщение. Прокси может накапливать очередь длиной до 65535 сообщений.

Процесс-клиент запускает прокси 3 раза, в результате чего сервер получает 3 «консервированных» сообщения от прокси.

IPC посредством сигналов

Сигналы являются традиционным способом асинхронной связи, которая используется в течение многих лет в различных операционных системах.
QNX поддерживает большой набор сигналов, соответствующих стандарту POSIX, кроме того, сигналы, исторически присущие некоторым UNIX-системам, и ряд сигналов, уникальных для QNX.
Как породить сигнал
Считается, что сигнал доставлен процессу тогда, когда выполняется определенное в процессе для данного сигнала действие. Процесс может посылать сигнал самому себе.
Получение сигналов
Процесс может принять сигнал одним из трех способов, в зависимости от того, как в процессе определена обработка сигналов:
Если процесс не определил никаких специальных мер по обработке сигнала, то выполняется предусмотренное для сигнала действие по умолчанию — обычно таким действием по умолчанию является завершение работы процесса.
Процесс может игнорировать сигнал. Если процесс игнорирует сигнал, то сигнал не оказывает на процесс никакого воздействия (учтите, что SIGCONT, SIGSTOP и SIGKILL не могут быть игнорированы в обычных обстоятельствах).
Процесс может предусмотреть обработчик сигнала — функцию, которая будет вызываться при приеме сигнала. Если процесс содержит обработчик для какого-либо сигнала, говорят, что процесс может «поймать» этот сигнал. Любой процесс, который «ловит» сигнал, фактически получает особый вид программного прерывания. Никакие данные с сигналом не передаются.
В промежутке времени между моментом, когда сигнал порожден, и моментом, когда он доставлен, сигнал называется ожидающим. Для процесса ожидающими одновременно могут быть несколько различных сигналов. Сигналы доставляются процессу, когда планировщик ядра делает этот процесс готовым к выполнению. Процесс не должен строить никаких предположений относительно порядка, в котором будут доставлены ожидающие сигналы.
Управление обработкой сигналов
Чтобы задать желаемый способ обработки для каждого из сигналов, вы можете использовать функции языка Си signal() стандарта ANSI или sigaction() стандарта POSIX.
Функция sigaction() предоставляет большие возможности по управлению обработкой сигналов.
Вы можете изменить способ обработки сигнала в любой момент времени. Если вы укажете, что сигнал данного типа должен игнорироваться, то все ждущие сигналы такого типа будут немедленно отброшены.
Обработчики сигналов
Некоторые специальные замечания касаются процессов, которые ловят сигналы посредством обработчиков сигналов.
Вызов обработчика сигнала аналогичен программному прерыванию. Он выполняется асинхронно по отношению к остальной части процесса. Таким образом, существует вероятность того, что обработчик сигнала будет вызван во время выполнения любой из имеющихся в программе функций (включая библиотечные функции).
Если в вашей программе не предусмотрен возврат из обработчика сигнала, то могут быть использованы функции siglongjmp() либо longjmp() языка Си, однако, функция siglongjmp() предпочтительнее. При использовании функции longjmp() сигнал остается блокированным.
Блокирование сигналов
Иногда может возникнуть необходимость временно запретить получение сигнала, не изменяя метод его обработки. QNX предоставляет набор функций, которые позволяют блокировать получение сигналов. Блокированный сигнал остается ожидающим; после разблокирования он будет доставлен вашей программе.
Пока ваша программа выполняет обработчик сигнала для определенного типа сигнала, QNX автоматически блокирует этот сигнал. Это означает, что нет необходимости заботиться о вложенных вызовах обработчика сигнала. Каждый вызов обработчика сигнала — это неделимая операция по отношению к доставке следующих сигналов этого типа. Если ваш процесс выполняет нормальный возврат из обработчика, сигнал автоматически разблокируется.
Сигналы и сообщения
Существует важное взаимодействие между сигналами и сообщениями. Если ваш процесс SEND-блокирован или RECEIVE-блокирован в момент получения сигнала, и вы предусмотрели обработчик сигнала, происходят следующие действия:

Процесс разблокируется
Выполняется обработка сигнала
Функция Send( ) или Receive( ) возвратит код ошибки

Если процесс был SEND-блокирован в момент получения сигнала, то проблемы не возникает, потому что получатель еще не получил сообщение. Но если процесс был RECEIVE-блокирован, то вы не узнаете, было ли обработано посланное им сообщение и, следовательно, не будете знать, следует ли повторять Send( ).
Процесс, играющий роль сервера (т.е. получающий сообщения), может запросить, чтобы он получал извещение всякий раз, когда его процесс-клиент получает сигнал, находясь в состоянии REPLY-блокирован. В этом случае клиент становится SIGNAL-блокированным с ожидающим сигналом. Сервер получает специальные сообщения, описывающие тип сигнала. Сервер может затем выбрать один из следующих вариантов:
Закончить выполнение запроса от клиента нормальным образом: клиент (процесс-отправитель) будет уведомлен, что его сообщение было обработано должным образом.
ИЛИ
Освободить используемые ресурсы и возвратить код ошибки, указывающий, что процесс был разблокирован сигналом: клиент получит четкий признак ошибки.
Когда сервер отвечает процессу, который был SIGNAL-блокирован, то сигнал выдается непосредственно после возврата из функции Send( ), вызванной клиентом (процессом-отправителем).

  • Related Posts

    Поддержка многоядерности

    Поддержка многоядерности QNX предлагает наиболее функциональную программную платформу для многоядерных систем. Это полностью интегрированное решение поддерживает асимметричную (AMP), симметричную (SMP) и исключительную (BMP) модели многопроцессорности. Впервые представленная компанией QNX Software…

    Операционная система реального времени QNX Neutrino

    Операционная система реального времени QNX Neutrino Выбирая QNX Neutrino как платформу для Ваших решений, Вы сможете:Проектировать чрезвычайно надежные системы с возможностью динамического обновления во время работы. В итоге Вы получаете…

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    You Missed

    Самосвальные полуприцепы: техника для стройки и добычи инертных материалов

    • От Redactor
    • 21 августа, 2026
    • 6 views

    Как сохранить букет свежим дольше

    • От Redactor
    • 19 августа, 2026
    • 7 views

    Чем отличается предчистовая отделка от чистовой

    • От Redactor
    • 17 августа, 2026
    • 14 views

    Сколько стоит грузчик на час

    • От Redactor
    • 10 августа, 2026
    • 23 views

    Как выбрать зал для конференции

    • От Redactor
    • 6 августа, 2026
    • 31 views

    Накрутка поведенческих факторов: быстрый эффект и высокая цена — что нужно знать, прежде чем рисковать

    • От Redactor
    • 16 июля, 2026
    • 29 views
    Накрутка поведенческих факторов: быстрый эффект и высокая цена — что нужно знать, прежде чем рисковать