- Что такое ядро Linux
- Что такое ядро Linux
- 1. На чём написано ядро
- 2. Архитектура ядра
- 3. Что делает ядро
- 4. Версии ядра
- 5. Где хранятся файлы ядра
- Выводы
- Разнообразие ядер Linux: какое и для чего можно выбрать
- Ядро, но не операционная система
- Ядра бывают разные
- Официальные или бинарные ядра
- Кастомные или нативные ядра
- Получается, что официальные ядра урезаны в плане производительности?
Что такое ядро Linux
Ядро Linux за авторством Линуса Торвальдса недавно отметило юбилей, вот уже три десятилетия оно используется в компьютерах по всему миру. Благодаря тому, что оно перенесено на множество платформ, его можно встретить практически везде, в персональных компьютерах, смартфонах, носимой электронике, бытовой технике и сетевых устройствах.
Так что же делает ядро Linux и почему оно так востребовано? Мы рассмторим архитектуру ядра, его основные задачи и интерфейсы. Это поможет понять его преимущества и недостатки.
Что такое ядро Linux
1. На чём написано ядро
Несмотря на то, что ассемблерный код позволяет достичь наилучшей производительности, его возможности весьма ограничены, поэтому большая часть кода написана на языке C, его доля достигает 98%. На ассемблере написаны только небольшие вставки, повышающие производительность, архитектурно-зависимые функции и загрузчик.
2. Архитектура ядра
Уровень доступа к ресурсам компьютера зависит от того, какое ядро использует операционная система. Привилегии ядра выше остальных приложений, а работает оно в едином адресном пространстве. В зависимости от того, сколько задач выполняется на уровне ядра, различают несколько типов ядер. Самые популярные – это монолитное (Linux), микроядро (macOS) и гибридное (Windows).
Ядро Linux монолитное, большая его часть хранится в одном файле. Однако, это не признак монолитного ядра, модули вполне могут храниться отдельно. Основная его особенность заключается в том, что оно обрабатывает все процессы, кроме пользовательских приложений. То есть управление процессами и памятью, драйверы, виртуальная файловая система, сетевой стек и многое другое – это всё заботы ядра, которые к тому же имеют самый высокий уровень доступа к аппаратной части компьютера.
Однако, это не означает то, что пользовательские приложения не могут выполнять схожие функции. Например, система инициализации Systemd помимо прочего выстраивает иерархию процессов поверх групп ядра cgroups, а демоны, вроде PulseAudio, контролируют работу устройств, расширяя функциональность драйверов.
Также стоит понимать, что ядро хоть и монолитное, но состоит из внутренних модулей, которые загружаются только по необходимости, а не все сразу. Некоторые модули хранятся отдельно от ядра, в основном это дополнительные драйверы устройств.
Интерфейсы, имена переменных и структура каталогов системы определяются стандартами POSIX, что делает Linux UNIX-подобной системой. Линус Торвальдс, создатель ядра, выбрал UNIX по той причине, что имелась база приложений, необходимых для функционирования операционной системы, утилиты GNU. Однако, он не разделяет идеи философии UNIX, одна программа – одно действие, текстовый вывод информации как универсальный интерфейс. По его мнению они не отражают запросы современных пользователей.
3. Что делает ядро
Как было сказано ранее, у монолитного ядра самый широкий спектр задач. На верхнем уровне ядро обрабатывает поступающие системные вызовы, которые являются интерфейсом между ядром и пользовательскими приложениями. На нижнем уровне ядро обрабатывает аппаратные прерывания, сигналы, поступающие от периферии, процессора, памяти и так далее.
На обработке прерываний задачи ядра не заканчиваются, оно содержит в себе драйверы устройств. Драйверы нужны для того, чтобы обработать поступающие с устройств сигналы, а команды приложений перевести в машинный код.
Драйверы занимают большую часть ядра. Некоторые из них представлены сразу в виде бинарных файлов, что противоречит идеям фонда СПО. Версия ядра без закрытых драйверов называется Linux-libre, на практике его использование крайне затруднительно, так как собрать компьютер на основе комплектующих только с открытыми драйверами у вас едва ли получится.
Остальные задачи ядра – это работа с абстракциями. Например, планировщик создаёт виртуальные потоки, менеджер памяти выделяет и изолирует часть оперативной памяти под процесс, виртуальная файловая система создаёт единое пространство для хранения файлов, а сетевой модуль создаёт сокеты. Это одно из условий обеспечения высокого уровня безопасности, иначе одна программа могла бы беспрепятственно взять конфиденциальные данные из другой, например, ключи шифрования.
Система межпроцессного взаимодействия следит за тем, чтобы не возникало конфликтов при обращении к одним и тем же ресурсам компьютера, а также обеспечивает обмен данными между процессами.
Со стороны пользовательских приложений всё это выглядит как настоящее оборудование, с той лишь разницей, что общение с процессором и памятью происходит не напрямую, а с помощью системных вызовов. Для периферийных устройств имеются символьные и блочные ссылки в каталоге /dev, последние отличает то, что ни работают с блоками фиксированного размера.
Несмотря на то, что ядро контролирует все процессы, само по себе оно ничего не делает, ему нужны пользовательские программы и их процессы. Среди базовых приложений стоит отметить утилиты проекта GNU, без них не обходится ни один дистрибутив Linux. Например, командная оболочка Bash позволит вам вводить команды в консоли.
4. Версии ядра
Запись версии ядра можно представить в виде: A.B.C-D.
- A – это версия ядра, изначально планировалось повышать номер только после значительной переработки ядра, но сейчас это делают после достаточного количества правок и нововведений примерно два раза за десятилетие.
- B – это ревизия ядра, обновление происходит каждые 2-3 месяца. Некоторые из них получают долгосрочную поддержку (LTS – long term support). Последним таким ядром стало 5.10. Каждая ревизия имеет большой список изменений, которые сначала проверяют тестировщики.
- C и D отвечают за небольшие правки в коде ядра. С увеличивается в том случае, если были обновлены драйверы устройств, а D – когда вышел очередной патч безопасности. Эти номера могут меняться практически каждый день.
Узнать версию ядра можно с помощью команды:
5. Где хранятся файлы ядра
Файлы ядра хранятся в каталоге /boot. Непосредственно само ядро находится в запакованном виде в файле vmlinuz, где z как раз и указывает на то, что ядро сжато для экономии места. Файл initrd.img – это первичная файловая система, которая монтируется перед тем, как подключить реальные накопители к виртуальной файловой системе VFS. Там же содержатся дополнительные модули ядра, поэтому этот файл может быть больше самого ядра. В файле system.map можно найти адреса функций и процедур ядра, что будет полезно при отладке.
Выводы
Подведём итоги. Теперь вы знаете что такое ядро Linux. Ядро — это самая привилегированная программа на компьютере. Если говорить конкретно о ядре Linux, то оно монолитное. Иными словами, в режиме ядра работает всё необходимое для управления ресурсами компьютера. В пользовательском режиме также имеются программы для управления, но они лишь расширяют возможности ядра.
Соответствие стандартам POSIX позволило перенести ядро на множество платформ. Но следование философии UNIX во многих аспектах дистрибутивов Linux имеет как плюсы, так и минусы. Простые приложения с выводом в терминал хорошо подходят для серверов, но для домашнего использования такой подход едва ли может привлечь широкие массы.
К примеру, Android использует ядро Linux, но не утилиты GNU и в целом не пытается стать похожим на UNIX, что во многом обеспечило его популярность. Так что ядро – это лишь инструмент, а цели могут быть любыми, от запуска терминала и до создания суперкомпьютеров.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Разнообразие ядер Linux: какое и для чего можно выбрать
Мы уже знаем про разнообразие в мире Linux: существует большое количество дистрибутивов, большое количество сред рабочего стола и тайлинговых оконных менеджеров, можно даже найти достаточное количество версий какой-либо программы с открытым исходным кодом (так называемые форки). Но что если я скажу, что многообразие начинается с ядра Linux?
Ядро, но не операционная система
Для новичков среди подписчиков и читателей канала повторю мысль, изложенную в одной из самых первых заметок — Linux не является названием какой-либо конкретной операционной системы. В первую очередь это название ядра, а лишь потом семейство дистрибутивов, на этом ядре основанных. Чтобы разобраться лучше (ну или по крайней мере, иметь отправную точку для того, что начать путь к лучшему пониманию) прочитайте статью, про которую говорил ранее.
Ядра бывают разные
Тот факт, что ядро Linux обладает открытым исходным кодом позволяет участвовать в его разработке большому количеству людей, имеющих различные задачи и сценарии по использованию дистрибутива. Вполне логично, что рано или поздно сообществу оказалось мало той версии ядра, которую предложил Торвальдс. В результате, на данный момент, мы имеем две большие группы ядер Linux: официальные (бинарные) и кастомные (неофициальные или нативные). Главным отличием является то, как вы можете получить ядро из каждой группы — бинарные ядра не требуют сборки и доступны в дистрибутивах, так сказать, «из коробки», их обновление происходит автоматически. Нативные ядра собираются из исходного кода и чтобы обновить их, необходима повторная сборка.
Официальные или бинарные ядра
Это ядра, которые поддерживаются сообществом и которые им же разрабатываются (под пристальным контролем ядро-отца Линуса). Существует четыре вида официальных ядер:
- Stable — так называемое «ванильное» ядро, поставляемое со стандартными модулями и некоторыми патчами
- Hardened — ядро, ориентированное на безопасность и включающее в себя набор патчей, защищающих от уязвимостей (эксплоитов) как само ядро, так и дистрибутивы, на нем основанные
- Longterm — ядро с долгосрочной поддержкой или LTS-ядро, которое гарантированно будет поддерживаться на протяжении определенного периода времени (например, текущее LTS-ядро версии 5.15 имеет поддержку до конца 2023 года) и призвано дарить пользователям стабильность и отсутствие ошибок при каком-либо обновлении.
- Zen Kernel — ядро для систем общего пользования или говоря проще, для десктопа, куда интегрированы дополнительные возможности, не включенные в состав основного ядра (например, поддержка нового оборудования и ускоряющие работу изменения)
Кастомные или нативные ядра
Это ядра, которые изменены авторами для решения конкретных задач, «заточенное» под определенный сценарий использования. Кастомных ядер тоже немало, перечислю самые популярные из существующих:
- Linux LQX — также называется Liquorix, является, по сути, тем же Zen-ядром, но ориентировано на использование в Debian-подобных системах
- Linux Xanmod — включает в себя улучшение производительности для рабочих станций (иначе говоря офисных ПК), игровых компьютеров, медиацентров и других систем, а также набор патчей для ускорения работы даже на 32-битных дистрибутивах.
- Linux TKG — ядро, которое можно использовать для сборки дистрибутива с повышенной производительностью в играх, по сути он объединяет все вышеперечисленные кастомные ядра и дополняет их набором множества патчей и дополнительных инструкций, но при этом отличается нестабильностью в работе.
- Linux Cachyos — альтернатива предыдущим ядрам, также нацеленная на максимальную производительность, но имеющая большую стабильность в плане работы, кроме того в ядро встроено множество планировщиков, которые ускоряют обработку задач.
Получается, что официальные ядра урезаны в плане производительности?
Наличие кастомных ядер не говорит о том, что нельзя используя, например, LTS-ядро установить Steam и получать максимум удовольствия от игр или монтировать видео в 4К. Например, пользователи таких дистрибутивов, как Ubuntu или Linux Mint имеют на борту «из коробки» LTS-ядро, но при этом в плане производительности их устройства никоим образом не «ущемлены».
Ядро Linux любой версии можно рассматривать в качестве швейцарского ножа — при необходимости вы открываете нужный инструмент и решаете возникшую задачу. Например, устройствам, работающим в финансовой сфере не нужно быстродействие для запуска производительных игр или программ, также для них важна стабильность работы и устойчивость перед угрозами. Потому для них разумнее выбрать официальное ядро Hardened или кастомное ядро, в котором разработчики соединили защищенность Hardened и стабильность работы LTS ядер.
Что касается меня, то уже длительное время подсел на использование ядра Zen. Оно доступно для выбора при установке Archlinux при помощи скрипта, про которую рассказывал ранее на канале.