Архитектура KasperskyOS
Архитектура 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 | Менеджер электропитания | Управление электропитанием: выполнение перезагрузки и выключения. |