Ядро операционной системы (Kernel)

Центральная часть операционной системы: распределяет процессор и память между программами и дает им доступ к устройствам.

Ядро — центральная часть операционной системы, которая работает между оборудованием и программами. Программы не обращаются к процессору, памяти и дискам напрямую: они просят ядро, а ядро решает, кому и когда выделить процессор, сколько дать памяти, как прочитать файл и отправить данные по сети. Ядро загружается первым и работает все время, пока включен компьютер.

Чем занимается ядро

  • Процессы. Создает и завершает процессы и потоки, а планировщик переключает между ними процессор сотни раз в секунду, создавая видимость одновременной работы.
  • Память. Дает каждому процессу собственное виртуальное адресное пространство и не позволяет одному процессу читать память другого.
  • Устройства. Через драйверы работает с дисками, сетевыми картами, USB и всем остальным оборудованием.
  • Файловые системы. Превращает блоки на диске в привычные файлы и папки.
  • Сеть. Реализует сетевые протоколы, в том числе TCP/IP.
  • Безопасность. Проверяет права доступа и изолирует процессы друг от друга; на механизмах ядра построены и контейнеры Docker.

Режим ядра и пользовательский режим

Процессор поддерживает разные уровни привилегий. Код ядра выполняется в привилегированном режиме и может все. Обычные программы работают в пользовательском режиме и для любого действия с оборудованием делают системный вызов: «открой файл», «прочитай данные», «создай процесс». Поэтому ошибка в приложении роняет только его само, а ошибка в ядре — всю систему.

Архитектуры ядер

  • Монолитное — все основные функции и драйверы внутри ядра. Быстро, но ошибка драйвера опасна для всей системы. Так устроено ядро Linux.
  • Микроядро — в ядре только самое необходимое, а драйверы и службы работают отдельными процессами. Надежнее, но медленнее из-за постоянного обмена сообщениями. Пример — QNX, распространенная во встраиваемых системах.
  • Гибридное — компромисс; так устроены ядра Windows и macOS.

Ядро Linux

Ядро Linux начал писать Линус Торвальдс в 1991 году; сегодня это один из крупнейших проектов с открытым кодом, над которым работают тысячи разработчиков. Оно лежит в основе серверов, Android, роутеров и российских операционных систем — Astra Linux, РЕД ОС, ALT Linux, которые широко используются при импортозамещении. Узнать версию ядра на сервере можно командой uname -r — подробнее о работе в командной строке в термине Linux CLI.

Обновления ядра

Уязвимости в ядре особенно опасны: они могут дать злоумышленнику полный контроль над системой. Поэтому обновления безопасности ядра устанавливают регулярно; большинство из них требует перезагрузки, которую на серверах планируют заранее, а в кластерах выполняют по очереди, без остановки сервиса.