Ядро операционной системы (Kernel)
Центральная часть операционной системы: распределяет процессор и память между программами и дает им доступ к устройствам.
Ядро — центральная часть операционной системы, которая работает между оборудованием и программами. Программы не обращаются к процессору, памяти и дискам напрямую: они просят ядро, а ядро решает, кому и когда выделить процессор, сколько дать памяти, как прочитать файл и отправить данные по сети. Ядро загружается первым и работает все время, пока включен компьютер.
Чем занимается ядро
- Процессы. Создает и завершает процессы и потоки, а планировщик переключает между ними процессор сотни раз в секунду, создавая видимость одновременной работы.
- Память. Дает каждому процессу собственное виртуальное адресное пространство и не позволяет одному процессу читать память другого.
- Устройства. Через драйверы работает с дисками, сетевыми картами, USB и всем остальным оборудованием.
- Файловые системы. Превращает блоки на диске в привычные файлы и папки.
- Сеть. Реализует сетевые протоколы, в том числе TCP/IP.
- Безопасность. Проверяет права доступа и изолирует процессы друг от друга; на механизмах ядра построены и контейнеры Docker.
Режим ядра и пользовательский режим
Процессор поддерживает разные уровни привилегий. Код ядра выполняется в привилегированном режиме и может все. Обычные программы работают в пользовательском режиме и для любого действия с оборудованием делают системный вызов: «открой файл», «прочитай данные», «создай процесс». Поэтому ошибка в приложении роняет только его само, а ошибка в ядре — всю систему.
Архитектуры ядер
- Монолитное — все основные функции и драйверы внутри ядра. Быстро, но ошибка драйвера опасна для всей системы. Так устроено ядро Linux.
- Микроядро — в ядре только самое необходимое, а драйверы и службы работают отдельными процессами. Надежнее, но медленнее из-за постоянного обмена сообщениями. Пример — QNX, распространенная во встраиваемых системах.
- Гибридное — компромисс; так устроены ядра Windows и macOS.
Ядро Linux
Ядро Linux начал писать Линус Торвальдс в 1991 году; сегодня это один из крупнейших проектов с открытым кодом, над которым работают тысячи разработчиков. Оно лежит в основе серверов, Android, роутеров и российских операционных систем — Astra Linux, РЕД ОС, ALT Linux, которые широко используются при импортозамещении. Узнать версию ядра на сервере можно командой uname -r — подробнее о работе в командной строке в термине Linux CLI.
Обновления ядра
Уязвимости в ядре особенно опасны: они могут дать злоумышленнику полный контроль над системой. Поэтому обновления безопасности ядра устанавливают регулярно; большинство из них требует перезагрузки, которую на серверах планируют заранее, а в кластерах выполняют по очереди, без остановки сервиса.