KasperskyOS Community Edition 1.0

Взаимодействие сущностей (IPC)

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

Клиент и сервер используют три системных вызова: Call(), Recv() и Reply():

  1. Клиент направляет серверу сообщение-запрос. Для этого один из потоков исполнения клиента выполняет вызов Call() и блокируется до получения ответа от сервера или ядра (например, в случае ошибки).
  2. Серверный поток, выполнивший вызов Recv(), находится в ожидании сообщений. При получении запроса этот поток разблокируется, обрабатывает запрос и отправляет сообщение-ответ с помощью вызова Reply().
  3. При получении сообщения-ответа (или ошибки) клиентский поток разблокируется и продолжает исполнение.

Таким образом, ядро KasperskyOS является ядром разделения в терминах модели MILS, поскольку все взаимодействия сущностей проходят через него.

Обмен сообщениями как вызов метода

Отправка IPC-запроса сущности-серверу представляет собой обращение к одному из интерфейсов, реализуемых сервером. IPC-запрос содержит входные аргументы вызываемого метода, а также идентификатор реализации интерфейса (RIID) и идентификатор вызываемого метода (MID). Получив запрос, сущность-сервер использует эти идентификаторы, чтобы найти реализацию метода. Сервер вызывает реализацию метода, передав в нее входные аргументы из IPC-запроса. Обработав запрос, сущность-сервер отправляет клиенту ответ, содержащий выходные аргументы метода.

Модуль безопасности Kaspersky Security Module может анализировать все компоненты IPC-сообщения, чтобы вынести решение, соответствует ли это сообщение политике безопасности системы.

IPC‑каналы

Чтобы две сущности могли обмениваться сообщениями, между ними должен быть установлен IPC-канал (далее также канал или соединение). Канал задает роли сущностей, т.е. имеет "клиентскую" и "серверную" стороны. При этом одна сущность может иметь несколько каналов, в которых она является клиентом, и несколько каналов, где она – сервер.

В KasperskyOS предусмотрено два способа создания IPC-каналов:

  1. Статический способ предполагает создание канала в момент запуска сущностей (при старте решения). Статическое создание каналов выполняется инициализирующей сущностью Einit.
  2. Динамический способ позволяет уже запущенным сущностям установить канал между собой.