Архитектура KasperskyOS представлена на рисунке ниже:
Архитектура KasperskyOS
В KasperskyOS приложения и драйверы взаимодействуют между собой и с ядром, используя библиотеку libkos
, которая предоставляет интерфейсы для обращения к службам ядра. (Драйвер в KasperskyOS в общем случае работает на том же уровне привилегий, что и приложение.) Библиотека libkos
обращается к ядру, выполняя только три системных вызова: Call()
, Recv()
и Reply()
, которые реализуют механизм IPC. Службы ядра поддерживаются подсистемами ядра, назначение которых приведено в таблице ниже. Подсистемы ядра взаимодействуют с аппаратурой через уровень аппаратных абстракций (англ. Hardware Abstraction Layer, HAL), что упрощает портирование KasperskyOS на различные платформы.
Подсистемы ядра и их назначение
Обозначение |
Наименование |
Назначение |
---|---|---|
HAL |
Подсистема аппаратных абстракций |
Базовая поддержка аппаратуры: таймеры, контроллеры прерываний, блок управления памятью (англ. Memory Management Unit, MMU). Подсистема включает в себя драйверы UART и низкоуровневые средства управления электропитанием. |
IO |
Менеджер ввода-вывода |
Регистрация и освобождение ресурсов аппаратной платформы, необходимых для работы драйверов: прерываний (англ. Interrupt ReQuest, IRQ), MMIO-памяти (англ. Memory-Mapped Input-Output), портов ввода-вывода, буферов DMA. При наличии на аппаратной платформе блока управления памятью для операций ввода-вывода (англ. Input-Output Memory Management Unit, IOMMU) подсистема обеспечивает гарантию разделения памяти, используемой устройствами. |
MM |
Менеджер физической памяти |
Выделение и освобождение физических страниц памяти, распределение областей физически непрерывных страниц. |
VMM |
Менеджер виртуальной памяти |
Управление физической и виртуальной памятью: резервирование, фиксация, освобождение. Работа с таблицами страниц памяти для изоляции адресных пространств процессов. |
THREAD |
Менеджер потоков |
Управление потоками исполнения: создание, завершение, блокирование и возобновление. |
TIME |
Подсистема часов реального времени |
Получение и установка системного времени. Использование таймеров, предоставляемых аппаратурой. |
SCHED |
Планировщик |
Планирование потоков исполнения: стандартных потоков, потоков реального времени, потоков бездействия (IDLE). |
SYNC |
Подсистема, обеспечивающая примитивы синхронизации |
Реализация базовых примитивов синхронизации: спинлоков (англ. spinlock), мьютексов (англ. mutex), событий (англ. event). Ядро поддерживает только один примитив – фьютекс (англ. futex), остальные примитивы реализованы на его основе в пространстве пользователя. |
IPC |
Подсистема межпроцессного взаимодействия |
Реализация синхронного механизма IPC по принципу рандеву. |
KSMS |
Подсистема взаимодействия с модулем безопасности |
Подсистема, работающая с модулем безопасности. Она предоставляет модулю безопасности для проверки все сообщения, передающиеся через IPC. |
OBJ |
Менеджер объектов |
Управление общим поведением всех ресурсов KasperskyOS: отслеживание жизненного цикла, назначение уникальных идентификаторов безопасности (подробнее см. "Управление доступом к ресурсам"). Подсистема тесно связана с механизмом управления доступом на основе мандатных ссылок (англ. Object Capability, OCap). |
ROMFS |
Подсистема запуска образа неизменяемой файловой системы |
Операции с файлами из ROMFS: открытие и закрытие, получение списка файлов и их описаний, получение характеристик файла (имени, размера). |
TASK |
Подсистема управления процессами |
Управление процессами: создание, запуск, завершение. Получение сведений о запущенных процессах (например, имени, пути) и кодов их завершения. |
ELF |
Подсистема загрузки исполняемых файлов |
Загрузка исполняемых ELF-файлов из ROMFS в оперативную память, разбор заголовков ELF-файлов. |
DBG |
Подсистема поддержки отладки |
Механизм отладки на основе GDB (GNU Debugger). Наличие подсистемы в ядре опционально. |
PM |
Менеджер электропитания |
Управление электропитанием: выполнение перезагрузки и выключения. |