KasperskyOS Community Edition 1.0

Содержание

Основы IPC в KasperskyOS

В KasperskyOS единственным способом межпроцессного взаимодействия (IPC) является обмен сообщениями.

Виды сообщений и роли сущностей

Обмен сообщениями в KasperskyOS построен по клиент-серверной модели.

Во взаимодействии двух сущностей одна из них является клиентом (клиентская сущность), а вторая — сервером (серверная сущность). Клиент инициирует взаимодействие, отправляя сообщение-запрос (далее также "запрос"). Сервер получает запрос и отвечает на него, отправляя клиенту сообщение-ответ (далее также "ответ").

IPC-каналы

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

Системные вызовы

KasperskyOS предоставляет три системных вызова для обмена IPC-сообщениями: Call, Recv и Reply. Соответствующие функции объявлены в файле syscalls.h:

  • Call() – используется клиентом для отправки запроса и получения ответа. Принимает IPC-дескриптор, буфер с запросом и буфер под ответ.
  • Recv() – используется сервером для получения запроса. Принимает IPC-дескриптор и буфер под запрос.
  • Reply() – используется сервером для отправки ответа. Принимает IPC-дескриптор и буфер с ответом.

Функции Call(), Recv() и Reply() возвращают rcOk или код ошибки.

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

  • Серверный поток, выполнивший вызов Recv(), остается заблокированным до момента получения запроса.
  • Клиентский поток, выполнивший вызов Call(), остается заблокированным до момента получения ответа от сервера.

Системные вызовы редко используются в коде сущности. Вместо них рекомендуется использовать более удобные NK-сгенерированные методы, которые, в свою очередь, выполняют системные вызовы.

В начало