// 04 из 08
Ядро Linux
4.1 Структура ядра Linux
ЯДРО LINUX (монолитное с модулями) ┌─────────────────────────────────────────────────┐ │ УПРАВЛЕНИЕ ПРОЦЕССАМИ │ │ • Планировщик CFS (Completely Fair Scheduler) │ │ • Распределяет CPU между процессами │ │ • Приоритеты nice (-20 до +19) │ ├─────────────────────────────────────────────────┤ │ УПРАВЛЕНИЕ ПАМЯТЬЮ │ │ • Виртуальная память │ │ • Страничная организация (4 КБ страницы) │ │ • Swap (виртуальная память на диске) │ │ • OOM Killer (убивает процессы при нехватке RAM│ ├─────────────────────────────────────────────────┤ │ ФАЙЛОВЫЕ СИСТЕМЫ (VFS) │ │ • ext4 — стандарт Linux │ │ • xfs — для больших файлов │ │ • btrfs — с снапшотами │ │ • tmpfs — в RAM │ │ • proc, sys — псевдофайловые системы │ ├─────────────────────────────────────────────────┤ │ СЕТЕВОЙ СТЕК │ │ • TCP/IP протоколы │ │ • Netfilter (iptables/nftables) │ │ • Сетевые драйверы │ ├─────────────────────────────────────────────────┤ │ ДРАЙВЕРЫ УСТРОЙСТВ │ │ • Блочные устройства (диски) │ │ • Символьные устройства (tty, мышь) │ │ • Сетевые устройства │ └─────────────────────────────────────────────────┘
4.2 Пространство ядра и пользователя
┌──────────────────────────────────────────────────┐ │ ПРОСТРАНСТВО ПОЛЬЗОВАТЕЛЯ │ │ (User Space / Ring 3) │ │ Firefox │ bash │ vim │ python │ │ • Процессы изолированы друг от друга │ │ • Нет прямого доступа к железу │ │ • При сбое — падает только процесс │ ├──────────────────────────────────────────────────┤ │ СИСТЕМНЫЕ ВЫЗОВЫ (syscalls) │ │ read() write() open() fork() exec() socket() │ ├──────────────────────────────────────────────────┤ │ ПРОСТРАНСТВО ЯДРА │ │ (Kernel Space / Ring 0) │ │ • Полный доступ ко всему железу │ │ • Ошибка здесь = kernel panic (крах системы) │ │ • Максимальные привилегии │ └──────────────────────────────────────────────────┘
4.3 Файлы ядра в /boot
/boot/ ├── vmlinuz-5.15.0 ← сжатое ядро (vmlinux + gz) ├── initramfs-5.15.0.img ← временная файловая система ├── System.map-5.15.0 ← таблица символов ядра ├── config-5.15.0 ← конфигурация сборки ядра └── grub/ ← файлы загрузчика
4.4 Функция start_kernel()
start_kernel()
├── setup_arch() ← настройка архитектуры x86_64
├── mm_init() ← инициализация памяти
├── sched_init() ← инициализация планировщика
├── rcu_init() ← синхронизация (RCU)
├── init_IRQ() ← прерывания
├── timekeeping_init() ← системное время
├── console_init() ← консоль (теперь можно выводить!)
├── vfs_caches_init() ← файловые системы
├── signals_init() ← сигналы (SIGKILL и др.)
└── rest_init()
├── kernel_thread(kernel_init) ← создаёт поток init
└── cpu_idle() ← ядро уходит в idle
4.5 Kernel Panic
! Аналог "синего экрана смерти" в Windows
[ 0.000000] Kernel panic - not syncing: VFS:
Unable to mount root fs on unknown-block(0,0)
Частые причины:
• Не найдена корневая файловая система
• Повреждён initramfs
• Отсутствует драйвер диска
• Неправильный параметр root= в GRUB