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

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

Каждая сущность может иметь несколько IPC-дескрипторов и, соответственно, несколько соединений, выступая как клиент для одних сущностей и как сервер – для других.
Системные вызовы для обмена сообщениями
В KasperskyOS есть три системных вызова для IPC: Call, Recv и Reply:
Call() – используется клиентом для отправки запроса и получения ответа. Принимает клиентский дескриптор, буфер с запросом и буфер под ответ.Recv() – используется сервером для получения запроса. Принимает серверный дескриптор и буфер под запрос.Reply() – используется сервером для отправки ответа. Принимает серверный дескриптор и буфер с ответом.Вызовы Call() и Recv() являются блокирующими, то есть обмен сообщениями происходит по принципу рандеву:
Recv(), остается заблокированным до момента получения запроса.Call(), остается заблокированным до момента получения ответа от сервера.
Взаимодействие сущностей и IPC-транспорт разбираются подробнее в главе "IPC и транспорт".
В начало