Ядро операционной системы — это её центральная часть, которая напрямую взаимодействует с аппаратурой и предоставляет остальным программам контролируемый доступ к ресурсам.
В зависимости от архитектуры (монолитное, микроядро, гибридное) состав может немного различаться, но базовый набор функций и компонентов примерно такой:
- Планировщик процессов и управление потоками. Ядро решает, какой процесс когда получит процессорное время, переключает контексты, управляет приоритетами и состояниями (готов, выполняется, ждёт).
- Управление памятью. Сюда входят: выделение и освобождение памяти процессам, виртуальная память, механизмы пейджинга и сегментации, защита адресных пространств, маппинг физической памяти.
- Управление вводом‑выводом и драйверами устройств. Ядро абстрагирует работу с оборудованием: принимает запросы от программ, передаёт их драйверам, обрабатывает прерывания, управляет очередями операций. В монолитных ядрах многие драйверы — часть самого ядра; в микроядерных — это отдельные процессы.
- Файловая подсистема и абстракции устройств. Работа с файлами, каталогами, метаданными, монтирование файловых систем, унифицированный интерфейс к устройствам (например, файлы устройств в Unix‑системах). Часто используется виртуальная файловая система (VFS), которая даёт единый API для разных типов ФС.
- Механизмы межпроцессного взаимодействия (IPC). Каналы, очереди сообщений, разделяемая память, сокеты и т. п., чтобы процессы могли обмениваться данными и синхронизироваться.
- Системные вызовы. Интерфейс, через который пользовательские программы запрашивают услуги ядра (открыть файл, создать процесс, прочитать данные).
- Обработка прерываний и исключений. Реакция на аппаратные сигналы (таймер, клавиатура, сетевой адаптер) и программные ошибки (деление на ноль, нарушение прав доступа).
- Подсистема безопасности и контроля доступа. Проверка прав, управление привилегиями, изоляция процессов, мандатный и дискреционный контроль доступа. В современных ядрах это тесно связано с механизмами изоляции (namespaces, cgroups в Linux).
- Таймеры и системные часы. Управление временем, планирование по времени, просчёт временных интервалов, поддержка системных часов и синхронизации.
- Базовые сетевые функции. В большинстве современных ядер сетевой стек (IP, TCP, UDP) — часть ядра или тесно с ним интегрирован, чтобы обеспечить производительность и контроль доступа к сетевым ресурсам.
- Linux. Ядро — монолитное с модулями. В нём есть планировщик CFS, подсистема управления памятью, VFS, сетевой стек, IPC, механизмы безопасности (SELinux/AppArmor, namespaces, cgroups). Драйверы могут быть встроены или подгружаться как модули.
- Windows (NT‑ядро). Гибридная архитектура: ядро и исполнительная подсистема работают в привилегированном режиме, часть сервисов вынесена в пользовательский режим. Есть диспетчер объектов, менеджер памяти, планировщик, драйверы в виде модулей, мощная подсистема безопасности.
- macOS (на базе XNU). Гибридное ядро: микроядро Mach плюс компоненты BSD. В нём совмещены управление процессами и памятью от Mach и богатый стек POSIX‑сервисов от BSD, плюс драйверы I/O Kit.
- Монолитное ядро. Почти все функции в одном адресном пространстве: планировщик, память, файловая система, драйверы, сеть. Пример: Linux, классические Unix.
- Микроядро. В ядре только минимум: планирование, базовые IPC, управление памятью. Остальное (драйверы, файловые системы, сетевые стеки) — в пользовательских процессах. Пример: QNX, Minix.
- Гибридное. Компромисс: часть функций в ядре, часть вынесена. Пример: Windows NT, macOS.