Учебный конструктор · архитектура ОС
Как устроена операционная система
Не понимаешь, что такое ядро, чем монолит отличается от микроядра, где живут драйверы и службы? Собери ОС из слоёв. Выбери систему (Linux и его дистрибутивы, Windows, macOS, Android, FreeBSD), кликай блоки — узнаешь, зачем каждый нужен, а выключив любой — увидишь каскадом, что без него сломается. Так понимаешь принцип, а не зубришь.
Незнакомы слова (ядро, монолит, syscall, драйвер, init…)? → словарь простыми словами внизу. Сетевой стек подробнее → конструктор сетей.
Самая популярная ветка. Стабильность, огромное сообщество, .deb-пакеты. Пакеты: apt (.deb).
Монолитное ядро с загружаемыми модулями (драйверы можно добавлять на лету, но они работают в пространстве ядра).
📖 Словарь: простыми словами
Встретил незнакомое слово выше — найди его здесь. Коротко — суть; разверни — подробное объяснение с аналогией.
Ядро (kernel)сердце ОС: распределяет процессор, память, доступ к железу
Программа, которая всегда в памяти и управляет всем: какой процесс исполняется, сколько ему памяти, как обращаться к устройствам. Работает в привилегированном режиме (кольцо 0). Всё остальное — надстройки над ядром.
Монолитное ядровсё ядро в одном куске — быстро, но сбой драйвера роняет всё
Драйверы, файловые системы, сеть — внутри ядра, в одном адресном пространстве. Плюс: скорость (нет лишних переходов). Минус: ошибка в драйвере = паника ядра/BSOD. Так устроен Linux.
Микроядров ядре только базовое, остальное — отдельные процессы
Минимум в ядре (планировщик, память, обмен сообщениями). Драйверы и ФС — обычные процессы в пользовательском пространстве. Плюс: надёжность и изоляция (упавший драйвер не валит систему). Минус: медленнее из-за обмена сообщениями. Примеры: MINIX, seL4, QNX.
Гибридное ядромонолит + идеи микроядра
Компромисс: производительность монолита, но с чёткими подсистемами и частично вынесенными службами. Так устроены Windows NT и macOS XNU (микроядро Mach + код BSD).
Системный вызов (syscall)запрос программы к ядру через защищённую «дверь»
Программе нельзя напрямую трогать железо — она просит ядро (открыть файл, выделить память, послать пакет) через системный вызов. Это контролируемый переход из пользовательского режима в режим ядра. Защита и стабильность держатся на этой границе.
Драйверпереводчик между ОС и конкретной моделью устройства
ОС работает с устройствами абстрактно («диск», «сетевая карта»), а драйвер знает, как командовать конкретной железкой. Без драйвера устройство «немое».
Служба инициализации (init)первый процесс, поднимающий всю систему (PID 1)
После загрузки ядра запускается init (systemd в Linux, launchd в macOS, SCM в Windows). Он по порядку стартует все службы и доводит систему до логина. Без него — «ядро есть, системы нет».
Пространство ядра и пользователяпривилегированная зона vs обычные программы
Код ядра исполняется в привилегированном режиме (кольцо 0) с полным доступом к железу. Программы — в пользовательском режиме (кольцо 3), изолированно. Переход — только через системные вызовы. Это фундамент безопасности и стабильности.
Графический сервер (X11/Wayland)рисует окна и обрабатывает ввод; не часть ядра
Отдельная подсистема, отвечающая за вывод графики и ввод мышью/клавиатурой. В Linux это X11 или Wayland, в Windows — оконная подсистема + DWM, в macOS — WindowServer. Сервер прекрасно работает и без неё — в текстовой консоли.
libc / системный APIготовые функции, через которые программы зовут ОС
Библиотека-прослойка между программами и системными вызовами (glibc/musl в Linux, Win32 API в Windows, libSystem/Cocoa в macOS). Даёт удобные функции и стабильный интерфейс, даже когда ядро меняется.
Дистрибутив (Linux)ядро Linux + подобранный набор пользовательских частей
Linux — это только ядро. Дистрибутив добавляет init, libc, пакетный менеджер, графику, оболочку и набор программ. Debian/Ubuntu, Fedora/RHEL, Arch, Alpine, Gentoo — разные сборки из взаимозаменяемых частей.
Дальше по теме
Эти инструменты связаны с текущим — так задачи стыкуются на практике.
Все инструменты — в каталоге.