реклама
Бургер менюБургер меню

Инженер – Архитектура системы Linux (страница 1)

18

Инженер

Архитектура системы Linux

Глава 1. Архитектура операционной системы Linux

Введение к главе

Понимание архитектуры Linux — фундамент для эффективной работы с системой: от администрирования до разработки. В этой главе мы разберём общую структуру ОС Linux, выделим ключевые компоненты и покажем, как они взаимодействуют между собой.

1.1. Обзор внутреннего устройства

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() и т. д.) для доступа к ресурсам.

1.3. Ядерные компоненты: основные подсистемы

Ядро 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):