Linux — ядро операционной системы: привилегированное ПО, управляющее процессорами, памятью, устройствами, процессами и общими абстракциями ресурсов. Полная система Linux также включает библиотеки, утилиты, службы, оболочки, графические программы и политику дистрибутива в пользовательском пространстве.
Ядро · Урок 1
Обзор ядра
Узнайте, как ядро Linux посредничает между оборудованием, ресурсами, изоляцией и запросами пользовательского пространства.
Аппаратные ресурсы
Процессоры исполняют инструкции, память хранит активное состояние, а контроллеры соединяют хранилища, сети, дисплеи, устройства ввода и другую периферию. Оборудование предоставляет специфичные архитектуре и устройству механизмы, а не единый безопасный интерфейс каждому приложению.
Ядро инициализирует ресурсы и управляет ими через архитектурный код и драйверы устройств. Оно обрабатывает прерывания, координацию DMA, таймеры и события управления питанием, одновременно обеспечивая границы доступа между нагрузками.
Какой уровень обычно координирует драйверы устройств и аппаратные прерывания в Linux?
Обязанности ядра
Основные обязанности:
- планировать выполняемые threads на CPU;
- создавать и изолировать виртуальные адресные пространства;
- обеспечивать учётные данные процессов, разрешения и политику безопасности;
- предоставлять файловые системы, сеть, IPC и интерфейсы устройств;
- обрабатывать сигналы, таймеры и жизненный цикл процессов;
- выделять, учитывать и освобождать ресурсы.
Linux обычно называют монолитным ядром, поскольку основные службы и многие драйверы выполняются в одном привилегированном адресном пространстве. При этом оно модульно: поддерживаемые компоненты можно загружать и выгружать как модули. Ошибка в привилегированном коде способна скомпрометировать всю систему, поэтому обновления ядра и происхождение модулей критичны для безопасности.
Чем управляет планировщик ядра?
Пользовательское пространство
В пользовательском пространстве работают обычные процессы: init и службы, командные инструменты, языковые среды, базы данных, оболочки и настольные приложения. Аппаратные привилегии не дают им напрямую выполнять многие чувствительные инструкции или обращаться к произвольной памяти ядра.
Процессы запрашивают работу ядра через системные вызовы и взаимодействуют с такими интерфейсами, как файловые дескрипторы, сокеты, узлы устройств, procfs, sysfs, netlink и отображения памяти. Библиотеки часто оборачивают их в высокоуровневые API.
Root в пользовательском пространстве имеет широкую авторизацию по политике, но обычно всё равно выполняется в пользовательском режиме процессора. Идентичность пользователя и режим привилегий CPU — разные понятия.
Выполняет ли обычное приложение root все свои инструкции в режиме ядра?
Границы и абстракции
Ядро представляет виртуальные процессы, файлы, сокеты и адресные пространства вместо прямого раскрытия физического оборудования. Эти абстракции поддерживают изоляцию и переносимость, но сами по себе не идеальны как границы безопасности. Namespaces, cgroups, capabilities, модули безопасности, seccomp и виртуализация добавляют специализированный контроль.
При диагностике спрашивайте, какой уровень отвечает за поведение: приложение, библиотека, системный вызов, файловая система, драйвер, подсистема ядра, прошивка или оборудование. Доказательства неверного уровня могут привести к неправильному исправлению.
Что такое системный вызов?
Используйте лабораторную работу Управление модулями ядра в Linux, чтобы наблюдать модульную часть ядра в контролируемой среде.
Урок завершён
Вы завершили Обзор ядра
Теперь вы можете поместить ядро между физическими ресурсами и изолированными процессами пользовательского пространства.
Связывать драйверы и архитектурный код с управлением оборудованием.
Определять обязанности планирования, памяти, безопасности, файловых систем и сети.
Различать учётные данные root и режим ядра процессора.
Находить взаимодействие пользователя и ядра в контролируемых runtime-интерфейсах.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт