Ядра linux виды ядер

Ядро Linux и его функции

Ядро Linux — один из самых крупных проектов с открытым исходным кодом, содержащий более 13-ти миллионов строк кода, но что это такое и для чего нужно?

Итак, что такое Ядро?

Ядро — самый нижний уровень легкозаменяемого ПО, взаимодействующий с оборудованием компьютера. Оно отвечает за взаимодействие приложений, работающих в пользовательском режиме, с реальным оборудованием и позволяет процессам, известным как «серверы», получать информацию друг у друга, используя межпроцессное взаимодействие (IPC).

Разные виды ядер

Естественно, есть разные подходы к построению ядра и разнообразные архитектурные особенности, которые надо учесть при разработке ядра с нуля. В целом, большинство ядер можно разделить на три вида: монолитное, микроядерное и гибридное. У Linux ядро монолитное, в то время, как OS X (XNU) и Windows 7 (на самом деле — все Windows NT-семейства — прим. пер.) используют гибридные ядра. Давайте кратко рассмотрим эти категории, и позже углубимся в детали каждой из них.

Микроядро

Подход микроядра заключается в управлении только тем, чем должно управлять ядро — процессор, память и IPC. Практически все остальное рассматривается как дополнительное оборудование и управляется в пользовательском режиме. У микроядер есть преимущество в переносимости, так как вам не нужно беспокоится о смене видеокарты или даже операционной системы, до тех пор, пока операционная система обращается к оборудованию тем же образом. Микроядра очень малы, как в смысле занимаемой памяти, так и в смысле занимаемого места на диске при установке, и, как правило, они более безопасны, потому что большинство процессов, в том числе системных, выполняются в режиме пользователя, что не требует (и не предоставляет) многих прав доступа, в отличие от работы в режиме ядра.

Плюсы

Минусы

    Драйверы как слой абстракции для оборудования

Монолитное ядро

Монолитные ядра противоположны микроядрам — они включают в себя не только системы управления процессорами, памятью и IPC, но еще и драйверы устройств, управление файловыми системами и системные обслуживающие вызовы. Монолитные ядра обычно выигрывают в работе с оборудованием и в многозадачности, потому что если программе нужно получить информацию из памяти или от другого запущенного процесса, ей не нужно ждать в очереди — для нее есть более прямой и простой путь к получению необходимого. Однако, это может вызвать проблемы, так как чем больше программ требуют обширных прав доступа, тем больше опасности «уронить» систему, если одна из них не функционирует корректно.

Плюсы

    Прямой доступ к оборудованию для приложений

Минусы:

    При установке занимает много места

Гибридное ядро

Гибридные ядра выбирают, что они будут запускать в пользовательском режиме, а что — в режиме ядра. Часто такие компоненты, как драйверы устройств и ввод/вывод файловой системы, запускаются в пользовательском режиме, в то время как IPC и обслуживающие вызовы работают в режиме ядра. Это дает преимущества обоих подходов, но часто требует большей работы со стороны производителей, потому что ответственность за драйверы перекладывается на них. Так же имеются скрытые недостатки, которые присущи микроядрам.

Читайте также:  Windows 10 pro linux

Плюсы

    Разработчик может выбрать, какие компоненты запускать в пользовательском режиме, а какие — в режиме ядра

Минусы

    Может страдать от тех же задержек процессов, что и микроядро

Где находятся файлы ядра Linux?

Файл ядра в Ubuntu лежит в папке /boot и называется vmlinuz-. Имя vmlinuz пришло из мира UNIX шестидесятых годов , в котором ядра назывались просто «unix», в результате чего в начале девяностых при появлении ядро стало называться «linux».

Когда для упрощения многозадачности была разработана виртуальная память (virtual memory), для отображения её поддержки в начало файла стали добавлять «vm». Некоторое время ядро называлось vmlinux, но потом оно разрослось слишком сильно, чтобы уместиться в доступной при загрузке памяти, и его стали сжимать, и «x» в конце названия сменился на «z», чтобы показать, что оно сжато при помощи zlib. Не всегда используется такой тип компрессии и часто заменяется на LZMA или BZIP2, и, иногда, ядра называются zImage (или bzImage — прим. пер.).

Нумерация версий имеет формат A.B.C.D, где A.B, скорее всего, будет 2.6 (семейство ядра. Четная цифра B говорит о стабильном семействе — 2.0, 2.2, 2.4, 2.6, — а нечетная — о версиях для разработчиков — 2.1, 2.3, 2.5, 2.7 — прим. пер.), C будет вашей версией, а D будет отображать ваши патчи и исправления.

Также в каталоге /boot есть очень важные файлы, называющиеся initrd.img-, system.map-, и config-. Файл initrd используется как маленький RAM-диск, который распаковывает и исполняет собственно ядро. Файл system.map используется для управления памятью до полной загрузки ядра и файл config указывает ядру, какие опции и модули загружать в ядро в процессе сборки.

Архитектура ядра Linux

Из-за своей монолитности ядро Linux имеет наибольший размер и максимальную сложность из всех ядер. Это было конструктивной особенностью Linux, вокруг которой кипело немало споров в ранних версиях, и в ядре все еще есть некоторые недостатки, присущие монолитным ядрам.

Чтобы обойти эти недостатки, разработчики Linux-ядра создали модули ядра, которые могут загружаться и выгружаться во время работы, то есть вы можете добавлять и удалять функции ядра на лету. Это позволяет не только добавлять поддержку нового оборудования в ядро, добавляя модули, которые запускают обслуживающие процессы, такие как низкоуровневая виртуализация, но и возможность замены целого ядра без необходимости перезагрузки в некоторых случаях.

Представьте что вы можете установить новый пакет обновлений на Windows, даже не перезагрузив ее…

Модули ядра

Представьте, что в Windows уже установлены все необходимые драйвера, и все, что вам нужно сделать — просто включить те, которые нужны вам? Вот вы и увидели то, как в Linux работают модули ядра. Модули ядра, также известные как загружаемые модули ядра (loadable kernel module — LKM), выполняют ключевую роль в поддержании функционирования ядра со всеми вашими устройствами, не потребляя всю доступную память.

Читайте также:  Удаление установленных пакетов linux

Модуль обычно добавляет базовому ядру возможности в таких сферах, как поддержка оборудования, файловых систем и системных вызовов. Обычно файлы LKM имеют расширение .ko и хранятся в папке /lib/modules. Благодаря модульности можно легко настраивать ядро (http://www.howtogeek.com/howto/ubuntu/how-to-customize-your-ubuntu-kernel/), указывая, какие модули загружать, а какие нет, во время загрузки при помощи команды menuconfig, редактируя файл /boot/config или загружать и выгружать модули на лету при помощи команды modprobe.

Во многих дистрибутивах (таких, как Ubuntu) доступны сторонние, а так же закрытые (проприетарные) модули, которые обычно не устанавливаются, так как их исходный код недоступен. Разработчики ПО (например, nVidia, ATI и другие) не предоставляют исходные файлы, вместо этого они сами собирают собственные модули и предоставляют необходимые .ko-файлы для конкретного дистрибутива. Пока эти модули бесплатны, но не свободны (http://www.howtogeek.com/howto/31717/what-do-the-phrases-free-speech-vs.-free-beer-really-mean/), мейнтейнеры некоторых дистрибутивов не включают их, стараясь не «загрязнять» ядро несвободными компонентами.

Заключение

Ядро — не что-то волшебное, оно совершенно необходимо любому компьютеру для нормальной работы. Ядро Linux отличается от ядер Windows и OS X тем, что оно включает драйверы устройств на уровне ядра и поддерживает многое «из коробки». Надеемся, теперь вы знаете немного больше о совместной работе вашего программного обеспечения и оборудования, а так же о том, какие файлы необходимы для загрузки вашего компьютера.

Переведено инициативной группой welinux в составе Shtsh, settler, alff31, Zereal, goblinyara, blackraven
при помощи сервиса translated.by.

Возможно вас заинтересует:

Источник

Разнообразие ядер Linux: какое и для чего можно выбрать

Мы уже знаем про разнообразие в мире 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 при помощи скрипта, про которую рассказывал ранее на канале.

Источник

Оцените статью
Adblock
detector