Ядро операционной системы
Ядро операционной системы — это основная программа ОС и центральная ее часть, обеспечивающая приложениям доступ к ресурсам компьютера, таким как память, процессорное время, периферии и устройствам ввода‐вывода. Чаще всего ядро несет в себе еще возможность управления файловыми системами и сетевыми протоколами, однако не всегда. Ядра отличаются друг от друга в рамках конкретно взятой реализации. Существует четыре основных типа ядер: монолитное, микроядро, гибридное ядро и экзоядро. Также существует наноядро, которое только обрабатывает прерывания.
Монолитное ядро
Собственно, монолитное ядро
Монолитное ядро включает в себя непосредственно все компоненты, перечисленные выше, а также набор аппаратных абстракций. В данном случае, ядро представляет из себя одну большую программу, представляющую из себя набор процедур, которые могу вызывать друг друга в любой момент. Все драйверы устройств, сети, файловой системы и прочего включены непосредственно в ядро. С одной стороны, это помогает бороться с проблемой производительности — драйверам не надо каждый раз обращаться к ядру и переводить процессор из режима пользователя в режим ядра. С другой же появляются проблемы, связанные с безопасностью. Если крашнется один драйвер, то крашнется вся ОС. В микроядерных ОС, таких как MINIX 3, этого не произойдет. Однако самой большой проблемой чисто монолитного ядра оставалась низкая расширяемость: чтобы добавить один драйвер, приходилось перекомпилировать все ядро. Эта проблема и стала фатальным недостатком монолитного ядра. Однако со временем ее решили, в виде ядра модульного.
Модульное ядро
Модульное ядро по сути — то же монолитное, однако с поддержкой загружаемых модулей. Что это такое? Модуль — программа, загружаемая в ядро. Например, тот или иной драйвер. Рассмотрим ситуацию: в компьютер с ОС с модульным ядром воткнули USB-накопитель, однако в ядре поддержка универсально последовательной шины отсутствует. Тогда ядро динамически (т. е. «на лету») подгружает драйвер для USB, и все становится хорошо.
Микроядро
В микроядре все иначе. На него наложена только одна задача — управление процессами. Остальные же вещи, такие как драйвера, сетевой стек и прочее являются пользовательскими процессами — серверами. В идеале, конечно же. На практике, без использования реального режима процессора и пространства ядра очень трудно (а то и невозможно!) описать такие вещи как планировщик задач и обработчик прерываний. Поэтому внутри микроядра все же есть что-то, помимо модели процессов. В «сферической в вакууме» микроядерной ОС MINIX 3, к примеру, в ядре находятся планировщик задач, обработчик прерываний и поддержка системных вызовов API POSIX и, собственно, IPC (межпроцессное взаимодействие).<ref>Fix me, вроде что‐то упускаю :-)</ref>. Рассмотрим, как ОС на микроядре функционирует и как идет обмен информацией между серверами и ядром. Допустим, пользовательская программа обратилась к видеодрайверу с просьбой вывести некую информацию на экран. Тот, в свою очередь, обращается к ядру, а ядро уже предоставляет ему доступ к железу. Вообще‐то, этот «лишний» шаг в рамках каждого конкретного ядра и ОС создает проблемы с производительностью. MINIX 3, к примеру, это аж 500 наносекунд. Однако микроядра дают огромное по своей значимости для безопасности преимущество: при отказе какого-либо сервера вся ОС не упадет. Сервер спокойно перезапустится и ОС продолжит нормальную работу. В MINIX 3 даже есть специальный сервер реинкарнации, проверяющий состояние каждого сервера и перезапускающий его при надобности.
Гибридное ядро
Гибридное ядро представляет из себя, собственно, гибрид микроядра и монолитного ядра. В этом типе некоторые функции возложены на ядро, а некоторые — на пользователя. На данный момент считается самым успешным типом ядра, поскольку NT и Darwin являются гибридными ядрами. Также к гибридным можно отнести ядро DragonflyBSD.
Экзоядро
Экзоядро находится «вне» пользовательских программ, оно вообще не общается с ними напрямую. Здесь нужно более подробное объяснение. Каждый процесс получает свою часть ресурсов компьютера и «думает», что у него в распоряжение отдельная машина. Т. е. один процесс получает блоки диска от одного до тысячи, другой — от тысячи до тысячи семиста и т. д. Оба этих процесса будут считать, что обладают реальной машиной. На самом нижнем уровне такой ОС находится программа — экзоядро, отвечающее за распределение ресурсов машины. API для прикладных программ (например, утилит для удаления файлов) предоставляется абстрагированной от ядра библиотекой. Откуда и название ядра.