Структура ядра, модули, /proc и /sys

⏱ 20 мин · 🧩 заданий: 5

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

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

Всё ядро — один большой исполняемый образ в режиме ядра: планировщик, память, файловые системы, сеть, драйверы. Компоненты вызывают друг друга обычными вызовами функций.

  • ✅ быстро: нет переключений между компонентами;
  • ❌ ошибка в любом драйвере может уронить систему.

Примеры: Linux, FreeBSD, классический Unix.

Микроядро

В режиме ядра — только самое необходимое: адресные пространства, планирование, передача сообщений (IPC). Драйверы, файловые системы, сетевой стек — отдельные процессы в режиме пользователя.

  • ✅ надёжность: упавший драйвер можно перезапустить;
  • ❌ накладные расходы на IPC.

Примеры: MINIX 3, QNX, seL4, L4.

Гибриды

Windows NT и macOS (XNU) — «гибридные»: начинались с идей микроядра, но для скорости многое перенесли в режим ядра.

МОНОЛИТ МИКРОЯДРО ┌─────────────────────┐ ┌──────┐┌──────┐┌──────┐┌──────┐ │ приложения │ │прил. ││ ФС ││драйв.││ сеть │ польз. ╞═════════════════════╡ └──┬───┘└──┬───┘└──┬───┘└──┬───┘ │ VFS, ФС, сеть, │ ═══╪═══════╪═══════╪═══════╪═══ │ драйверы, память, │ ядро ┌──┴───────┴───────┴───────┴───┐ │ процессы, IPC │ │ IPC, планирование, память │ ядро └─────────────────────┘ └─────────────────────────────┘

Модули ядра Linux

Linux монолитен, но гибок: драйверы и файловые системы можно подгружать во время работы как модули (.ko). Модуль после загрузки работает в режиме ядра с полными правами — это часть ядра.

lsmod                      # загруженные модули
modinfo ext4               # информация о модуле
sudo modprobe vfat         # загрузить модуль с зависимостями
sudo rmmod vfat            # выгрузить

Простейший модуль:

#include <linux/module.h>
#include <linux/init.h>

static int __init hello_init(void) { pr_info("hello\n"); return 0; }
static void __exit hello_exit(void) { pr_info("bye\n"); }

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

/proc и /sys

Ядро показывает внутренние данные в виде псевдофайловых систем — файлов, которых нет на диске. Это удобно: читать их можно обычными cat и open/read.

procfs (/proc)

Файл Содержимое
/proc/cpuinfo процессоры: модель, частота, флаги
/proc/meminfo использование памяти
/proc/<pid>/status состояние процесса, PPid, память, маски сигналов (SigBlk, SigIgn, SigCgt)
/proc/<pid>/maps карта виртуальной памяти
/proc/<pid>/fd/ открытые дескрипторы (символические ссылки)
/proc/self ссылка на каталог текущего процесса
/proc/sys/ параметры ядра (sysctl)
grep -E 'PPid|Sig' /proc/self/status

sysfs (/sys)

Отражает модель устройств ядра: шины, устройства, драйверы, их атрибуты. Например, /sys/block/sda/size — размер диска в секторах.

Задача 2: /proc/cpuinfo

Это не обычный файл на диске, а интерфейс уровня управления логическими ресурсами: ядро представляет информацию в виде логического ресурса «файл» через VFS и procfs. Содержимое описывает аппаратуру (процессор), а генерирует его ядро при каждом чтении. Эти две части и нужно назвать в ответе.

Итог

  • Монолитное ядро (Linux) — всё в режиме ядра; микроядро — минимум в ядре, остальное в процессах.
  • Linux расширяется загружаемыми модулями (modprobe, lsmod).
  • /proc и /sys — псевдофайловые системы: содержимое генерирует ядро при чтении.

Практика решено 0 из 5

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Один вариант ответа

К какому типу относится ядро Linux?

Задание 2 Заполнить таблицу

Сравните архитектуры ядра.

Монолитное ядроМикроядро
Драйверы и файловые системы работают в режиме ядра
Драйверы — отдельные процессы в режиме пользователя
Компоненты общаются через передачу сообщений (IPC)
Ошибка в драйвере может обрушить всю систему
Примеры: Linux, традиционный Unix
Примеры: MINIX 3, QNX, seL4
Отметьте ячейку — «+», пустая — «−».
Задание 3 Один вариант ответа

Где хранится содержимое файла /proc/cpuinfo?

Задание 4 Несколько вариантов

Что можно узнать через /proc?

Задание 5 Ввод ответа

Какой командой загрузить модуль ядра вместе с его зависимостями? (только название утилиты)

Войдите, чтобы отмечать пройденные уроки.