Все буде Україна!

Ядро Linux

  Юрій  | 

  Оновл. 28 Чер 2022  | 

 87

 ǀ   1 

Як ви, напевно, знаєте, все почалося з того, що в 1991 році програміст Лінус Торвальдс вирішив створити свою власну операційну систему, почавши з найголовнішого компонента — її ядра — своєрідного “містка” між програмами та апаратною частиною комп’ютера. У цій статті ми поговоримо про те, що є ядром Linux з точки зору звичайного користувача і які існують версії ядра дистрибутивів Linux.

Що таке ядро ОС? Типи ядер

Ядро — це свого роду головна програма, яка є основною частиною операційної системи. Воно виступає в ролі посередника між пристроями комп’ютера (процесором, відеокартою, оперативною пам’яттю тощо) та його програмним забезпеченням, абстрагуючи від звичайних програм і користувачів складну, низькорівневу роботу з “залізом” комп’ютера, надаючи натомість простий, зрозумілий і зручний для використання інтерфейс. Для цього в код ядра додані драйвери пристроїв, які можуть як завантажуватися в пам’ять разом з ядром ОС, так і підключатися залежно від виникнення потреби в ресурсах необхідного пристрою.

Як правило, більшість ядер ОС поділяються на три типи:

   мікроядра;

   монолітні;

   гібридні.

Мікроядро

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

Переваги:

   переносимість;

   невеликий розмір;

   невеликі вимоги до використовуваної пам’яті;

   безпечність.

Недоліки:

   апаратне забезпечення більш абстраговане від системи;

   апаратне забезпечення може повільніше реагувати, оскільки драйвери знаходяться в користувацькому просторі;

   процеси не можуть отримати доступ до інших процесів без очікування.

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

Монолітне ядро — це повна протилежність мікроядра, так як в пам’яті комп’ютера завжди знаходиться весь (або майже весь) код ядра, внаслідок чого швидкість його роботи вища порівняно з мікроядром. Монолітні ядра, як правило, краще справляються з операціями доступу до обладнання та багатозадачністю, тому що, якщо програмі потрібно отримати інформацію з пам’яті або іншого запущеного процесу, вона має пряму лінію для доступу до неї, і програмі не потрібно чекати в черзі, щоб щось зробити. Однак такий підхід може викликати серйозні проблеми, тому що чим більше процесів виконується на рівні ядра, тим більша ймовірність, що у разі непередбаченої поведінки вони створять загальний збій системи.

Переваги:

   практично прямий доступ програм до обладнання;

   процесам простіше взаємодіяти один з одним;

   якщо ваш пристрій підтримується ядром, жодного додаткового встановлення ПЗ не потрібно;

   процеси реагують швидше, тому що не потрібно чекати у черзі за процесорним часом.

Недоліки:

   більший розмір ядра;

   більший розмір пам’яті, що займається;

   проблеми з безпекою, тому що всі частини працюють у просторі ядра.

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

Гібридне ядро — це ядро, що поєднує у собі елементи як монолітної, так і мікроядерної архітектур. У таких ядер є можливість вибирати, які частини працюватимуть у просторі користувача (наприклад, драйвери пристроїв і система вводу-виводу файлової системи), а які — в просторі ядра (виклики міжпроцесної (IPC) та серверної взаємодій). Але цей підхід має й деякі проблеми, успадковані від мікроядерної архітектури (особливо щодо швидкодії).

Переваги:

   розробник може вибирати, які програми працюватимуть в просторі користувача, а які — в просторі ядра;

   менший розмір порівняно з монолітним ядром;

   гнучкіше на відміну від інших ядер.

Недоліки:

   менша продуктивність (як і з мікроядром);

   робота драйверів пристроїв, як правило, більше залежить від виробників обладнання.

Ядро Linux хоч і відноситься до монолітних ядер, але воно також запозичує і деякі ідеї з мікроядерної архітектури, що означає, що вся операційна система працює в просторі ядра, а драйвери пристроїв (у вигляді модулів) можуть бути легко завантажені (або вивантажені) прямо під час роботи ОС.

Де знаходиться ядро Linux?

Щоразу під час запуску (або перезапуску) системи першим компонентом, який завантажується в пам’ять комп’ютера, є ядро Linux.

У системах Debian/Ubuntu файли присутніх в системі ядер розташовані в каталозі /boot і іменуються у вигляді vmlinuz-[версія_ядра] (виконавши в терміналі команду uname-r, ми отримаємо інформацію про поточну версію встановленого ядра):

У папці /boot ви також знайдете і інші дуже важливі файли:

   img-[версія_ядра] — використовується в якості RAM-диска, в який розпаковується і з якого завантажується ядро;

   map-[версія_ядра] — використовується для керування пам’яттю до повного завантаження ядра;

   config-[версія_ядра] — повідомляє ядру, які параметри та модулі слід завантажити в образ ядра при його компіляції.

Коли Лінус Торвальдс лише починав розробляти своє ядро, воно мало просту назву — linux. З появою технології віртуальної пам’яті до ядра додалася приставка vm (скор. від virtual memory”). Згодом ядро настільки розрослося, що до нього почали застосовувати компресію, про що нам говорить літера z (від zlib compression”) у слові vmlinuz.

Примітка: Також для компресії ядра часто використовуються алгоритми LZMA або bzip2, а самі ядра називаються zImage.

Модулі ядра Linux

Принцип завантажуваних модулів ядра Linux (скор. LKM” від англ. Loadable Kernel Module”) заключається в забезпечуванні взаємодії ядра з усім апаратним обладнанням системи, не займаючи при цьому всю доступну пам’ять.

Модулі зазвичай розширюють базові можливості ядра, пов’язані з різною роботою пристроїв, файлових систем та системних викликів. Вони зазвичай мають розширення .ko і зберігаються в каталозі /lib/modules:

Завдяки модульній структурі, ви можете легко налаштувати ядро під себе, встановивши необхідні модулі за допомогою menuconfig або відредагувавши файл /boot/config, або ви можете завантажувати та вивантажувати модулі “на льоту” за допомогою команди modprobe.

У деяких дистрибутивах, таких як Ubuntu, доступні модулі сторонніх виробників або із закритим вихідним кодом. Розробники програмного забезпечення (наприклад, NVIDIA, AMD та ін.) не надають вихідний код, а створюють власні модулі у вигляді попередньо скомпілованих .ko-файлів. Деякі розробники Linux вважають, що такі закриті модулі “псують” своєю присутністю ядро, надаючи пропрієтарне програмне забезпечення, і не включають їх у свої дистрибутиви.

Версії ядра дистрибутивів Linux

Stable

Stable — це остання, доступна стабільна версія ядра Linux, призначена для широкого використання. За замовчуванням у більшості дистрибутивів Linux застосовується саме stable-версія ядра. Вона регулярно оновлюється, і до неї часто випускаються нові патчі.

LTS

LTS (скор. від Long-Term Support”) — це версія ядра з тривалим терміном підтримки, яка вважається стабільнішою за звичайну версію ядра, так як під час її розробки програмісти намагаються не експериментувати з різними нововведеннями. Однак через це LTS-версії ядра можуть не мати деяких функцій ядер свіжіших релізів, а також містити старі версії драйверів, несумісних з новим обладнанням. Життєвий цикл LTS-ядра зазвичай становить 5 років для настільних комп’ютерів і серверів (раніше для настільних комп’ютерів підтримка здійснювалася протягом 3 років). Для порівняння, звичайні релізи ядра мають підтримку лише 9 місяців з моменту випуску.

Незважаючи на те, що виправлення безпеки впроваджуються в LTS-версію так само часто, як і у звичайну, вона не дає 100% гарантії відсутності будь-яких помилок. Щоправда, шанс того, що з LTS-версією ядра Linux виникнуть якісь проблеми, трохи менший у порівнянні зі звичайною версією ядра Linux, і тому багато підприємств (які використовують Linux-системи) віддають перевагу саме LTS-релізам.

Примітка: За даними Canonical, приблизно 95% всіх встановлень Ubuntu є LTS-релізами.

Hardened

Hardened — це посилена різними оновленнями безпеки stable-версія ядра Linux. Вона вміє блокувати потенційно небезпечні операції, забезпечуючи цим ефективний захист від експлойтів, націлених на використання вразливостей ядра. Ця версія ядра не така популярна, як інші, через те, що дещо повільніша за них. Hardened-ядро вбиває будь-який процес, який здається йому потенційно небезпечним. Крім цього, він не відображає PID процесів, і, отже, ви не зможете безпосередньо звернутися до запущеного виконуваного файлу. Також деякі програми та функції можуть не працювати з hardened-ядром.

Zen

Zen — версія ядра Linux, орієнтована на підвищення продуктивності та “чутливості” системи. Також кажуть, що це найкраще ядро Linux для ігор. Zen має низьку затримку та високочастотний планувальник.

Встановлення/Оновлення ядра Linux

У Linux є вихідне ядро, яке розробив Лінус Торвальдс, а потім уже доповнювали та доповнюють інші розробники та організації разом із Лінусом Торвальдсом. Розташоване вихідне ядро на сайті kernel.org.

Усі дистрибутиви Linux (Debian, Ubuntu, Manjaro, CentOS та ін.), які почали з’являтися після публікації вихідного ядра, почали вносити свої зміни та доповнення, формуючи таким чином свій варіант вихідного ядра Linux. Всі Linux-дистрибутиви мають у своїй основі вихідне ядро з kernel.org, але вже з внесеними до нього відповідними правками.

Примітка: Ядра різних дистрибутивів не є взаємозамінними. Теоретично можна “підкинути”, наприклад, ядро з Debian в Ubuntu. І система навіть почне працювати (адже Ubuntu походить від Debian), але в 99% випадків почнуть з’являтися різні глюки та баги.

Відповідно, з цього можна зробити наступні висновки:

   Якщо ви хочете встановити “чисте”, оригінальне ядро Linux, то вам потрібно завантажити його з kernel.org, а потім налаштувати його під свої потреби і насолоджуватися.

   Якщо вам потрібне ядро Linux із правками під якийсь конкретний дистрибутив (наприклад, Debian або Manjaro), то вам потрібно завантажити ядро з репозиторію конкретного дистрибутива за допомогою менеджера пакетів.

Навіщо тоді потрібний kernel.org? Справа в тому, що спочатку свіжа версія вихідного ядра з’являється на kernel.org, а потім уже “розходиться” репозиторіями інших дистрибутивів.

Є 2 способи встановлення/оновлення ядра Linux:

   Самостійне встановлення та конфігурування ядра Linux.

   Оновлення ядра Linux через менеджер пакетів.

Примітка: У цій статті ми розглянемо оновлення ядра Linux через менеджер пакетів, а в наступній статті — самостійне встановлення та конфігурування ядра Linux.

Оновлення ядра Linux через менеджер пакетів

Зазвичай разом із оновленням системи відбувається і оновлення ядра. Але якщо ви з будь-яких причин захочете зробити встановлення/оновлення безпосередньо тільки ядра Linux, то нижче ми розглянемо цей процес для кількох дистрибутивів Linux.

Linux Mint (Debian/Ubuntu)

Для початку звіримо поточну встановлену версію ядра:

$ uname –r

Далі виконаємо пошук доступних для встановлення ядер (згенерований список може бути дуже довгим, тому щоб хоч якось обмежити вивід і зробити його посторінковим, застосуємо фільтр | more):

$ sudo apt-cache search linux-image | more

Мій вибір — ядро linux-image-4.15.0-1004-oem. Щоб його встановити, потрібно виконати команду:

$ sudo apt-get install linux-image-4.15.0-1004-oem

Залишиться лише перезавантажити систему та переконатися, що нове ядро успішно встановилося:

Manjaro (Arch Linux)

У Manjaro використовується свій менеджер пакетів — pacman, тому його команди трохи відрізнятимуться від команд в інших дистрибутивах. Щоб вивести список доступних для встановлення ядер, необхідно виконати:

$ sudo pacman –S linux

У рамці наведено список ядер, які ми можемо встановити. Я вибрав пункт №5 (linux510), натиснувши відповідну кнопку цифрової клавіатури. Після цього запустився процес завантаження необхідних пакетів. Коли все буде готове, перезавантажуємо систему і радіємо новому ядру:


Встановлення ядра Zen (Liquorix)

Liquorix — це окремий проект ядра, зібраний з вихідних кодів zen-ядра, але з використанням кращої конфігурації для підвищення продуктивності системи.

Debian

Скачуємо скрипт, який додасть в систему потрібні репозиторії:

$ curl 'https://liquorix.net/add-liquorix-repo.sh' | sudo bash

Після чого виконуємо всього лише одну команду, яка встановлює пакети з новим ядром:

$ sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64


Ubuntu

Встановлення ядра в Ubuntu відбувається практично аналогічним чином. Спочатку додаємо репозиторії zen-ядра (liquorix):

sudo add-apt-repository ppa:damentz/liquorix && sudo apt-get update

Після чого виконуємо вже знайому нам команду:

sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64

Перезавантажуємо систему. Готово!

Manjaro

Спочатку встановимо помічник встановлення пакетів yay:

$ git clone https://aur.archlinux.org/yay.git

Далі потрібно встановити необхідні утиліти:

$ sudo pacman –S base-devel

Заходимо в каталог yay і виконуємо збірку пакета:

$ cd yay
$ makepkg -si

Після цього переходимо безпосередньо до встановлення zen-ядра:

$ yay -S linux-zen-git

Цей процес може зайняти досить тривалий проміжок часу. Після його закінчення, перезавантажуємо систему і радіємо новому ядру.

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (2 оцінок, середня: 5,00 з 5)
Loading...

Коментарів: 1

  1. Юрій :

    Довгий час не знав як встановити мануально ядро у своїй Манджарі, а в даній статті доступно показано. Окреме спасибі за скріншоти, знаю, що це теж шмат роботи.

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *