Основные компоненты Linux
1. Ядро
Функции:
- Управление процессами и потоками
- Виртуальная память
- Драйверы устройств
- Сетевой стек
- Системные вызовы (syscalls)
// Пример системного вызова в Linux (чтение файла)
#include <unistd.h>
char buf[1024];
ssize_t bytes = read(fd, buf, sizeof(buf));
2. Системные библиотеки
- GNU C Library (glibc) - реализация стандартной библиотеки C
- Другие: libpthread (потоки), libm (математика)
3. Шелл
Интерфейс командной строки (Bash, Zsh):
$ ls -l | grep "\.txt" | wc -l # Конвейер команд
4. Файловая система
Особенности:
- Единая иерархия (все начинается с /)
- Виртуальные файловые системы (/proc, /sys)
- Поддержка множества ФС (ext4, XFS, Btrfs)
5. Демоны
Примеры:
- systemd (менеджер служб)
- sshd (SSH сервер)
- crond (планировщик задач)
Ключевые принципы работы
1. Монолитная архитектура с модулями
- Все основные компоненты в одном адресном пространстве
- Динамически загружаемые модули ядра:
# Загрузка модуля
$ sudo modprobe nvidia
2. Принцип "Все есть файл"
Устройства, процессы, сокеты представлены как файлы:
$ echo "test" > /dev/ttyS0 # Отправка в последовательный порт
$ cat /proc/cpuinfo # Информация о CPU
3. Многозадачность и многопользовательский режим
- Вытесняющая многозадачность
- Изоляция пользователей и процессов
4. Механизмы безопасности
- Разграничение прав (rwx)
- Мандатный контроль доступа (SELinux)
- Capabilities (гранировка привилегий)
5. Управление памятью
- Виртуальная память с подкачкой (swap)
- Copy-on-Write (COW) при fork()
- OOM Killer (защита от исчерпания памяти)
Пример работы подсистем
Создание процесса:
- Вызов fork() (копирование адресного пространства)
- Вызов exec() (загрузка новой программы)
- Планировщик (CFS) распределяет время CPU
// Пример создания процесса
pid_t pid = fork();
if (pid == 0) {
// Дочерний процесс
execl("/bin/ls", "ls", "-l", NULL);
} else {
// Родительский процесс
waitpid(pid, NULL, 0);
}
Инструменты разработчика
- strace - трассировка системных вызовов:
$ strace -e trace=open,read ls
-
perf - профилирование производительности
-
gdb - отладка на уровне ядра (с kgdb)
Резюмируем
Linux как ОС общего назначения характеризуется:
- Монолитным модульным ядром - баланс производительности и гибкости
- Единой философией проектирования (KISS, "все есть файл")
- Развитыми механизмами изоляции (пространства имен, cgroups)
- Богатым инструментарием для разработки и администрирования
- Открытой экосистемой с 30-летней историей эволюции
Эти принципы делают Linux универсальной ОС - от встраиваемых устройств до суперкомпьютеров.