Инженер – Архитектура системы Linux (страница 1)
Инженер
Архитектура системы Linux
Глава 1. Архитектура операционной системы Linux
Введение к главе
Понимание архитектуры Linux — фундамент для эффективной работы с системой: от администрирования до разработки. В этой главе мы разберём общую структуру ОС Linux, выделим ключевые компоненты и покажем, как они взаимодействуют между собой.
Linux следует многоуровневой архитектуре, где каждый слой выполняет определённые функции и взаимодействует с соседними слоями. Основные слои:
Аппаратный уровень (CPU, память, диски, сетевые карты и т. д.).
Ядро (kernel) — центральный компонент, управляющий ресурсами и обеспечивающий работу всей системы.
Системные библиотеки (glibc, libpthread и др.) — предоставляют стандартизированные функции для приложений.
Оболочка (shell) — интерфейс для взаимодействия пользователя с ядром (Bash, Zsh и др.).
Приложения и утилиты — программы, решающие конкретные задачи (текстовые редакторы, веб‑серверы, компиляторы и т. п.).
Ключевая особенность Linux — чёткое разделение на пространство ядра (kernel space) и пользовательское пространство (user space):
Пространство ядра имеет полный доступ к аппаратным ресурсам. Здесь выполняются драйверы устройств и основные подсистемы ядра.
Пользовательское пространство работает с ограниченными правами. Приложения обращаются к ядру через системные вызовы (syscalls).
1.2. Внеядерные компоненты: программы и библиотеки
Внеядерные компоненты обеспечивают удобство использования и расширяемость системы. Основные группы:
Утилиты командной строки (ls, cp, grep, ps и т. д.) — инструменты для повседневных задач.
Системные библиотеки:
glibc (GNU C Library) — основная библиотека языка C, реализующая POSIX API.
libpthread — поддержка многопоточности (POSIX Threads).
libdl — динамическая загрузка библиотек.
Специализированные библиотеки (libm для математики, libcrypt для криптографии и т. д.).
Командные интерпретаторы (shell):
Bash (Bourne Again Shell) — стандарт де‑факто.
Zsh — расширенная оболочка с автодополнением.
Fish — оболочка с упором на удобство и интерактивность.
Взаимодействие с ядром: приложения вызывают функции из библиотек, а библиотеки выполняют системные вызовы (open(), read(), write() и т. д.) для доступа к ресурсам.
Ядро Linux — модульное монолитное ядро. Это означает:
Все компоненты работают в одном адресном пространстве (монолитность), что обеспечивает высокую производительность.
Драйверы и модули можно загружать/выгружать динамически (модульность), что повышает гибкость.
Ключевые подсистемы ядра:
Подсистема управления процессами:
Планировщик процессов (CFS — Completely Fair Scheduler).
Механизмы создания процессов (fork(), exec()).
Управление приоритетами и квантами времени.
Подсистема управления памятью:
Виртуальная память и страничное распределение.
Кэширование (page cache).
Обмен данными с диском (swap).
Виртуальная файловая система (VFS):
Единый интерфейс для работы с разными ФС (ext4, XFS, NFS и т. д.).
Основные объекты: inode (метаданные файла), dentry (запись каталога), superblock (информация о ФС).
Подсистема ввода‑вывода:
Драйверы устройств.
Буферизация и планирование операций.
Сетевая подсистема:
Реализация стека TCP/IP.
Маршрутизация, фильтрация пакетов (netfilter).
Межпроцессное взаимодействие (IPC):
Семафоры, очереди сообщений, разделяемая память.
1.4. Трассировка системных и библиотечных вызовов
Для отладки и анализа работы программ используются инструменты трассировки:
strace — отслеживание системных вызовов процесса. Пример:
strace ls -l /home
ltrace — трассировка вызовов библиотек. Пример:
ltrace -S ls
perf — профилирование производительности ядра и приложений.
Эти инструменты помогают:
выявить узкие места в производительности;
диагностировать ошибки доступа к файлам/сети;
понять, какие системные ресурсы использует программа.
1.5. Интерфейсы прикладного программирования (API)
Linux поддерживает несколько стандартов API:
POSIX (Portable Operating System Interface):