Как сущности взаимодействуют друг с другом

IPC-сообщения

В KasperskyOS взаимодействие сущностей реализовано как обмен сообщениями.

Чтобы вызвать метод сущности, другая сущность должна отправить ей сообщение-запрос, содержащее входные аргументы этого метода. Ответ содержит выходные аргументы метода.

Сущность, отправляющая запрос, называется клиентской сущностью или просто клиентом. Сущность, принимающая запрос и отправляющая ответ, называется серверной сущностью (сервером).

Запрос и ответ должны иметь вполне определенную структуру, соответствующую вызываемому методу.

Сообщение должно содержать фиксированную часть и арену. Фиксированная часть сообщения содержит аргументы, размер которых статически задан (целые числа, структуры, массивы и т.п.). Арена представляет собой буфер для хранения аргументов переменного размера.

Подробнее см. "Структура IPC-сообщения".

Соединения (IPC-каналы)

Чтобы две сущности могли обмениваться сообщениями, между ними должен быть установлен IPC-канал (далее также "канал" или "соединение").

Канал представлен парой IPC-дескрипторов: клиентским и серверным, которые связаны друг с другом. Сущности-клиенту принадлежит клиентский дескриптор, а серверу – серверный:

Каждая сущность может иметь несколько IPC-дескрипторов и, соответственно, несколько соединений, выступая как клиент для одних сущностей и как сервер – для других.

Системные вызовы для обмена сообщениями

В KasperskyOS есть три системных вызова для IPC: Call, Recv и Reply:

Вызовы Call() и Recv() являются блокирующими, то есть обмен сообщениями происходит по принципу рандеву:

Взаимодействие сущностей и IPC-транспорт разбираются подробнее в главе "IPC и транспорт".

В начало