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