Инженер – Архитектура системы Linux (страница 2)
Стандартизирует системные вызовы, библиотеки и утилиты.
Обеспечивает переносимость кода между UNIX‑подобными системами.
Linux Standard Base (LSB):
Расширяет POSIX для совместимости дистрибутивов.
Определяет структуру ФС, форматы пакетов и т. д.
Специфичные API ядра:
/proc и /sys — виртуальные ФС для доступа к данным ядра.
ioctl() — управление устройствами.
epoll() — масштабируемый механизм асинхронного ввода‑вывода.
1.6. Заключение
Архитектура Linux сочетает эффективность монолитного ядра с гибкостью модульности. Чёткое разделение пространства ядра и пользовательского пространства обеспечивает стабильность и безопасность. Стандартизированные интерфейсы (POSIX, LSB) и мощные инструменты трассировки делают систему прозрачной для разработчиков и администраторов.
В следующих главах мы детально разберём работу каждой подсистемы ядра, механизмы управления ресурсами и практические аспекты администрирования.
Термины главы:
ядро (kernel);
пространство ядра (kernel space);
пользовательское пространство (user space);
системный вызов (syscall);
VFS (Virtual File System);
CFS (Completely Fair Scheduler);
POSIX;
LSB (Linux Standard Base).
Глава 2. Ядро Linux: структура и функции
Введение к главе
Ядро — центральный компонент Linux, обеспечивающий взаимодействие между аппаратурой и программами. В этой главе мы подробно разберём его архитектуру, ключевые подсистемы и механизмы работы.
1991 год: Линус Торвальдс анонсирует проект Linux как хобби‑ОС для ПК на базе Intel 80386. Первая версия имела монолитное ядро с базовыми функциями.
1994 год: выпуск Linux 1.0 — первая стабильная версия с поддержкой модулей ядра.
2001 год: переход на планировщик O(1), улучшивший масштабируемость.
2003 год: внедрение Completely Fair Scheduler (CFS) — современного планировщика процессов.
Современность: ядро поддерживает сотни архитектур (x86, ARM, RISC‑V), миллионы драйверов и сложные механизмы виртуализации.
Ключевые вехи:
добавление поддержки SMP (многопроцессорности);
внедрение cgroups (контроль ресурсов);
развитие сетевой подсистемы (IPv6, Docker‑совместимость).
2.2. Основные компоненты ядра
Планировщик процессов (Scheduler):
распределяет процессорное время между задачами;
использует алгоритм CFS для «справедливого» распределения;
поддерживает приоритеты и классы планирования (SCHED_FIFO, SCHED_OTHER).
Менеджер памяти (Memory Manager):
управляет виртуальной памятью и страничным распределением;
реализует механизмы подкачки (swap) и кэширования (page cache);
контролирует выделение памяти процессам.
Виртуальная файловая система (VFS):
унифицирует доступ к разным ФС (ext4, XFS, NFS, FUSE);
оперирует объектами: inode (метаданные файла), dentry (запись каталога), superblock (информация о ФС).
Сетевая подсистема:
реализует стек TCP/IP, UDP, ICMP;
обрабатывает маршрутизацию, NAT, фильтрацию (netfilter);
поддерживает сокеты (AF_INET, AF_UNIX).
Подсистема ввода‑вывода:
взаимодействует с драйверами устройств;
буферизует операции чтения/записи;
планирует дисковые запросы (I/O scheduler).
Межпроцессное взаимодействие (IPC):
семафоры, очереди сообщений, разделяемая память;
сокеты UNIX для локального обмена данными.
2.3. Взаимодействие ядра с аппаратурой и пользовательским пространством
Механизмы взаимодействия:
Системные вызовы (syscalls) — основной интерфейс. Примеры:
open(), read(), write() — работа с файлами;
fork(), exec() — управление процессами;
socket(), bind() — сетевые операции.
Прерывания (interrupts) — сигналы от оборудования (клавиатура, таймер, диск). Ядро обрабатывает их через обработчики прерываний.
Исключения (exceptions) — реакции на ошибки (деление на ноль, доступ к несуществующей памяти).