Linux Kernel vs User space

blog-image

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

  • User Space — це обідня зала, де сидять гості (ваші програми), читають меню та роблять замовлення.

  • Kernel Space — це кухня та адміністрація. Гості не мають права заходити на кухню чи самостійно брати продукти з холодильника; вони мусять просити офіціанта (робити системний виклик), щоб отримати бажане.

Ось детальний розбір того, як працює цей поділ в архітектурі Linux.


1. Фундаментальна концепція: Кільця захисту

Сучасні процесори (наприклад, архітектури x86 або ARM) мають спеціальні апаратні режими роботи, які називаються кільцями захисту (protection rings).

  • Ring 0 (Kernel Mode): Тут працює ядро. Воно має повний, необмежений доступ до апаратного забезпечення (процесора, оперативної пам’яті, жорстких дисків). Будь-яка критична помилка тут призводить до зупинки всієї системи (Kernel Panic).

  • Ring 3 (User Mode): Тут працюють усі ваші браузери, ігри, бази даних та термінали. Вони жорстко ізольовані на апаратному рівні. Якщо через помилку “впаде” ваш браузер, операційна система продовжить стабільно працювати.


2. Що таке User Space (Простір користувача)?

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

  • Обмеження: Програми в User Space не можуть напряму звертатися до “заліза”. Наприклад, текстовий редактор не може сам надіслати команду диску: “Запиши ці байти в сектор 504”.

  • Віртуальна пам’ять: Кожна програма в цьому просторі має власну ілюзію повної влади. Їй виділяється віртуальна пам’ять, і програма “думає”, що володіє всім адресним простором. Ядро непомітно проектує ці віртуальні адреси на реальні мікросхеми оперативної пам’яті.

  • Що тут знаходиться: Ваші програми (Chrome, Telegram), системні утиліти (ls, grep), фонові служби (демони типу systemd чи nginx) та стандартні бібліотеки (наприклад, glibc).


3. Що таке Kernel Space (Простір ядра)?

Це серце операційної системи. Ядро виконує роль головного менеджера, посередника та арбітра.

  • Керування ресурсами: Ядро містить планувальник (scheduler), який тисячі разів на секунду вирішує, яка програма отримає час процесора зараз, а яка має почекати.

  • Керування пам’яттю: Розподіляє фізичну оперативну пам’ять між програмами, налаштовує файли підкачки (swap).

  • Драйвери пристроїв: Саме в ядрі (або як його модулі) живуть драйвери, які “розуміють”, як технічно розмовляти з вашою відеокартою, Wi-Fi адаптером чи USB-флешкою.

  • Мережевий стек: Обробка всіх TCP/IP пакетів, маршрутизація та брандмауер (iptables/nftables) відбуваються на рівні ядра.


4. Як вони спілкуються: System Calls (Системні виклики)

Оскільки User Space суворо ізольований, програмам потрібен безпечний місток для запиту ресурсів. Цей місток називається System Call.

Коли ви натискаєте “Зберегти файл” у програмі, відбувається наступне:

  1. Програма викликає функцію бібліотеки (наприклад, write() у glibc).

  2. Бібліотека генерує спеціальну машинну інструкцію (переривання або команду syscall), яка ініціює перемикання процесора з Ring 3 у Ring 0.

  3. Процесор передає керування Ядру.

  4. Ядро перевіряє, чи має користувач права на запис у цей файл.

  5. Якщо права є, ядро дає команду драйверу диска записати байти.

  6. Після завершення ядро повертає процесор у Ring 3 і віддає керування назад програмі.


Детальне порівняння

ХарактеристикаUser Space (Простір користувача)Kernel Space (Простір ядра)
Рівень привілеївНизький (Ring 3)Найвищий (Ring 0)
Доступ до обладнанняТільки через запити до ядра (System Calls)Прямий, необмежений доступ
Наслідки помилокПрограма закривається (Crash), система живеВся система зупиняється (Kernel Panic)
Пам’ятьВіртуальна, ізольована для кожного процесуСпільна, бачить усю фізичну пам’ять
Швидкість роботиПовільніше (через накладні витрати на ізоляцію)Максимально швидко

Чому це розділення таке важливе?

  1. Стабільність: Ваша музика не повинна перериватися, а комп’ютер не повинен зависати намертво тільки через те, що в браузері “заглючив” важкий скрипт.

  2. Безпека: Злонамісна програма в User Space не може просто так стерти системні файли або перехопити ваші паролі з пам’яті іншої програми, оскільки ядро стоїть “на варті” між ними і блокує несанкціонований доступ.