Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 15 мин
Начальный
КурсСтруктураRoadmap

Обзор 17 модулей — путь от userspace до железа

В этом уроке — карта курса. Понять заранее, куда вы движетесь, важно: каждая новая тема опирается на предыдущие, и без видения общей картины материал кажется обрывочным.

Курс построен от userspace вниз к железу. Сначала разбираемся, что видит программа: процессы, потоки, память, файлы. Потом спускаемся в ядро: syscalls, планировщик, виртуальная память. В конце — наблюдаемость и capstone, где вы сами пишете мини-инструменты. Это естественный путь обучения: от привычного «процесс python» до «контекстное переключение через interrupt и trap-инструкцию».


Карта курса — 17 модулей

Прежде чем погружаться в каждый модуль, посмотрим на курс целиком:

Структура курса -- от введения до capstone
00. IntroВведение в курс: цели, аудитория, обзор модулей, как учиться
01. What is OSБазовая теория: зачем нужна ОС, что такое kernel и userspace, что такое syscall, какие бывают архитектуры ОС
02. ProcessesПроцессы: что внутри (PID, fd-таблица, address space), как создаются (fork + exec), lifecycle, тулзы (ps, /proc)
03. ThreadsПотоки: как они отличаются от процессов, threading models, синхронизация (mutex, semaphore), типичные грабли (deadlock)
04. SchedulingПланировщик: какие задачи решает, какие алгоритмы существуют, что такое nice/priority, реал-тайм классы Linux
05. Memory MgmtВиртуальная память: иерархия памяти, как работает paging, MMU, TLB, swap, overcommit, OOM killer, NUMA
06. Memory AllocАллокация: stack vs heap, malloc/free под капотом, утечки, shared memory
07. IPCInter-process communication: pipes, signals, Unix sockets, shared memory, message queues
08. FilesystemsФайловые системы: VFS, inodes, links, mount, /etc/fstab, сравнение ext4/xfs/btrfs/zfs
09. File I/OРабота с файлами: open/read/write, буферизация, page cache, fsync, mmap
10. PermissionsПрава доступа: UID/GID, rwx, setuid, sudo, root, Linux capabilities
11. SyscallsГлубоко про syscalls: что физически происходит при переходе в kernel mode, strace, ABI, vDSO
12. DevicesУстройства: block vs char, /dev, udev, драйверы, debugging hardware (dmesg, lspci)
13. Boot/InitЗагрузка: BIOS/UEFI, bootloader, kernel boot, init, systemd, troubleshooting
14. ObservabilityНаблюдаемость: top, htop, vmstat, iostat, /proc, /sys, perf, eBPF -- обзор инструментов диагностики
15. CapstoneФинальный проект: свой ps на Python, своя shell с pipes, monitoring с alerts

Это roadmap. Каждый блок — модуль из 4-5 уроков. Между модулями есть зависимости (например, M03 потоки требует M02 процессы), но в целом курс идёт линейно.


Нарратив: от userspace вниз к железу

Главная идея структуры: мы начинаем с того, что видит обычный программист, и постепенно опускаемся в детали. Это противоположно тому, как часто преподают «Операционные системы» в университете — там сначала железо, регистры, traps, а потом уже процессы. Такой подход теоретически правильный, но психологически тяжёлый: пока вы не понимаете «зачем», все эти trap’ы и регистры выглядят как абстрактная муть.

От привычного к фундаментальному
Userspace (вы тут)То, что видите каждый день: процессы в ps, файлы, директории, ваш Python-код. Высокоуровневые абстракции
Process modelМодули 02-04: процесс, поток, как они создаются, как планируются. Всё ещё в терминах того, что видит программист, но уже с пониманием внутренностей
Memory modelМодули 05-06: как Python-список физически живёт в памяти, что такое RSS и VSZ, почему free сообщает мало памяти, как malloc работает
IPC + FilesystemsМодули 07-09: как процессы общаются (pipes, sockets, signals), как работают файлы (от open() до пластины диска)
Kernel internalsМодули 10-13: права как ядро их проверяет, syscalls глубоко, устройства и драйверы, как ядро загружается. Самый низ концептуально
Observability + capstoneМодули 14-15: инструменты диагностики (perf, eBPF) и интеграция всех знаний в свои проекты

Каждая последующая тема использует предыдущие. Когда мы дойдём до «как работает планировщик» — вы уже знаете, что такое процесс и поток. Когда обсудим «виртуальная память» — вы знаете, что такое процесс и какое у него address space. Когда дойдём до «syscalls глубоко» — вы уже много раз использовали strace в предыдущих уроках, и теперь поймёте, как это работает изнутри.


Модули 01-04: процессная модель

Первый блок курса — про процессы и потоки. Это самые «человеческие» абстракции: программист видит процесс в ps, может убить его через kill, может запустить новый через subprocess.Popen(). Нужно понять, что процесс — не просто «запущенная программа», а сложная структура внутри ядра.

Модуль 01 — Что такое ОС. Базовые понятия: зачем нужна ОС, что такое kernel и userspace, что такое syscall, как устроены ring 0/3. Завершаем разбором архитектур: monolithic kernel (Linux), microkernel (L4), hybrid (Windows NT, macOS XNU).

Модуль 02 — Процессы. Что внутри процесса: PID, PPID, UID, address space, fd-таблица. Как создаётся процесс через fork() (копия родителя) и превращается в новую программу через exec(). Lifecycle: created -> ready -> running -> blocked -> zombie -> terminated. Практические тулзы: ps, pgrep, kill, /proc/[pid].

Модуль 03 — Потоки. Чем поток отличается от процесса — они делят address space. Threading models (1:1 в Linux через NPTL, M:N в Go). Синхронизация: race conditions, mutex, semaphore, atomic. Типичные грабли: deadlock, livelock, false sharing.

Модуль 04 — Планировщик. Зачем нужен планировщик, разница preemptive vs cooperative. Алгоритмы: round-robin, priority, multilevel feedback queue, CFS (концептуально). Приоритеты в Linux: nice, ionice, chrt. Real-time классы: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE.

После этого блока вы понимаете, что значит «у нас 200 процессов в системе, 30% CPU usage, load 5.0» — и можете обоснованно решить, нужен ли вам тред или процесс для конкретной задачи.


Модули 05-06: память

Дальше — память. Это самая мистическая тема для Junior: free пишет, что свободно 200 MB из 8 GB, а сервер работает; RSS процесса 1 GB, но программа писала только 100 MB; иногда OOM убивает процесс, иногда — нет; swap есть, но не используется.

Модуль 05 — Memory Management. Иерархия памяти: регистры -> L1/L2/L3 cache -> RAM -> swap -> диск. Latency на каждом уровне. Виртуальная память: что это, зачем нужна (изоляция процессов, illusion бесконечной памяти). Pages, page tables, MMU, TLB. Swap и overcommit: почему Linux разрешает выделять больше памяти, чем есть. OOM killer: как выбирает жертву. NUMA: что это и когда важно.

Модуль 06 — Memory Allocation. Stack vs heap: где живут переменные, направление роста, что такое stack overflow. Как работает malloc/free: brk, mmap, аллокаторы (glibc ptmalloc, jemalloc). Утечки vs фрагментация: разные проблемы, разные тулзы (valgrind, ASan). Shared memory между процессами.

После этого блока вы понимаете, что означает каждая колонка free -h, разницу RSS vs VSZ, можете дебажить утечки и понимаете, почему сервер «работает» при «отсутствии свободной памяти».


Модули 07-09: коммуникация и файлы

Третий блок — про то, как процессы взаимодействуют между собой и с диском.

Модуль 07 — IPC. Inter-process communication: как один процесс отправляет данные другому. Pipes (anonymous и named/FIFO). Signals: kill, SIGTERM/SIGKILL, handlers, async-signal-safety. Unix domain sockets: чем отличаются от TCP, performance. Shared memory и message queues: когда нужно.

Модуль 08 — Filesystems. Что такое файловая система. VFS — виртуальный слой над разными ФС. Inodes: что хранится, как файл живёт без имени. Hard links vs symlinks. Mount, /etc/fstab. Сравнение ФС: ext4 vs xfs vs btrfs vs zfs — когда какую выбирать.

Модуль 09 — File I/O. Системные вызовы для работы с файлами: open, read, write, close. Буферизация: user buffer (Python’s open()), kernel page cache, O_DIRECT. fsync и durability: как гарантировать, что данные на диске. mmap: память как файл, файл как память.

После этого блока вы понимаете, что происходит при with open(...) as f: f.write(data) — какие syscalls, как идёт буферизация, когда данные физически на диске, почему fsync важен в БД.


Модули 10-13: безопасность и низкий уровень

Модуль 10 — Permissions. Users, groups, UID, GID, /etc/passwd, NSS. Права rwx, chmod, setuid, sticky bit. root, sudo, sudoers. Linux capabilities (CAP_NET_RAW и др.) и namespaces — основа Docker.

Модуль 11 — Syscalls. Глубокое погружение: что физически происходит при syscall (trap, переход в kernel mode, обратно). strace в деталях: фильтры, чтение output, диагностика. Syscall table, x86_64 ABI, register conventions (rax, rdi, rsi). vDSO: быстрые syscalls без trap (gettimeofday).

Модуль 12 — Devices. Block vs char devices, /dev/sda1 vs /dev/tty. udev: динамическое создание /dev. Драйверы и kernel modules: lsmod, modprobe. Debugging hardware: dmesg, lsblk, lspci, lsusb.

Модуль 13 — Boot/Init. Что происходит при загрузке: BIOS/UEFI -> MBR/GPT -> bootloader (GRUB) -> kernel -> init/systemd. systemd в деталях: units, targets, journalctl, systemctl. Troubleshooting: single mode, rescue, chroot.

После этого блока вы понимаете, как работает Docker (это namespaces + cgroups + capabilities), как ваша программа дёргает ядро (syscalls под капотом), как ядро видит ваш диск (драйвер + udev + VFS), и что происходит после нажатия Power.

Namespaces и cgroups: как всё изученное здесь лежит в основе Docker

Модули 14-15: тулинг и capstone

Модуль 14 — Observability. Тулинг для диагностики реальных проблем. top, htop — основы. vmstat, iostat — что показывают, как читать. /proc и /sys как интерфейсы к kernel state. perf для профилирования и flame graphs. eBPF: что такое, обзор bcc/bpftrace.

Модуль 15 — Capstone. Финальный проект. Пишем мини-инструменты:

  1. Свой ps на Python из /proc/[pid]/.
  2. Простейшая shell на Python с fork/exec и pipes.
  3. Resource monitor с alerts на CPU/mem/disk-io.

Capstone закрепляет все темы курса в практическом коде. Вы видите, как теория ложится на реальные тулзы, которыми вы пользуетесь каждый день.


Что вы умеете в конце

После прохождения всего курса:

Skills, которые вы получаете
ПониманиеКонцептуальные модели: процесс, поток, виртуальная память, syscall, VFS, scheduler. Не зазубренные определения, а интуиция
Тулингstrace, ps, top, vmstat, iostat, lsof, perf, dmesg -- читаете и используете для диагностики
DebugOOM killer, zombie процессы, deadlock, high load, slow I/O, permission denied -- диагностируете самостоятельно
/procЗнаете что лежит в /proc/[pid]/maps, status, fd, stack, smaps. Можете читать состояние процесса напрямую из ядра
АрхитектураПонимаете, как Docker работает (namespaces + cgroups + capabilities), как systemd управляет процессами, как ядро загружается
РешенияОбоснованно выбираете: процесс или поток, file I/O или mmap, ext4 или xfs, fsync или fdatasync

Это уровень mid-инженера на собеседовании. На реальной работе вы становитесь «человек, который разбирается в Linux». DevOps подходит к вам с вопросами, потому что вы понимаете и backend, и систему.


Зависимости между модулями

Не все модули равнозависимы. Вот как они связаны:

Зависимости модулей друг от друга
M01 What is OSБаза: без неё нельзя начинать. Объясняет kernel/userspace/syscall -- термины, на которых стоит остальное
M02 ProcessesОпирается на M01. Дальше нужен почти везде: треды, scheduler, память, IPC -- всё про процессы
M03 ThreadsТребует M02: тред -- это легковесный процесс. Лучше понимать процессы сначала
M04 SchedulingТребует M02 и M03: планировщик планирует тред'ы. Без понимания процессов и тредов -- бесполезно
M05 Memory MgmtТребует M02 (address space процесса). Можно читать после M02 параллельно с M03
M11 Syscalls deepТребует M01 и большую часть курса -- syscalls упоминаются везде. Это deep-dive после знакомства с примерами
M14 ObservabilityЛучше после всего курса: тулзы покрывают все темы (process tools, memory tools, I/O tools)

Если хотите ускоренно пройти курс: M01 -> M02 -> M05 -> M11 -> M14 даст вам core. Остальное — по потребности. Но мы рекомендуем последовательно, потому что каждый модуль интересен сам по себе.


Реальный пример прогресса

Чтобы прогресс был ощутим, в начале курса напишите на бумаге ответ на простой вопрос: «Что происходит, когда я запускаю python script.py

В начале курса ответ типичного Junior: «Python запускается, читает скрипт, выполняет код». Это ОК на старте.

К концу M02 (процессы) вы дополните: «Shell делает fork(), потом execve(‘/usr/bin/python’, [‘python’, ‘script.py’]). Создаётся новый процесс с PID, который наследует fd-таблицу shell. Process state cycles между ready и running».

К концу M11 (syscalls) добавите: «execve вызывает syscall номер 59 в x86_64. Процессор переключается в ring 0 через инструкцию syscall. Ядро освобождает старый address space, загружает ELF-бинарь python через mmap, переходит в _start точку входа».

После M05 (memory): «Address space процесса — 128 TB виртуального, физически выделяется по требованию через page faults. Bilbliotek (.so) mmap’нуты shared между процессами Python».

После M14 (observability): «strace -fc python script.py покажет, какие syscalls и сколько раз. perf stat — циклы CPU. /proc/[pid]/status — состояние».

Это эволюция Junior. Вы вернётесь к этому вопросу в финальном модуле — и удивитесь, насколько детальный ответ сможете дать.


Попробуй сам

Ответьте сейчас (письменно, на бумаге или в текстовом файле) на 5 вопросов. Не подглядывайте в гугл — запишите свои текущие представления.

1. Что такое процесс? Чем отличается от программы?

2. Что такое виртуальная память? Зачем она нужна?

3. Что такое system call? Какие вы знаете?

4. Чем поток отличается от процесса?

5. Что показывает команда `top` в первой строке (load average)?

Сохраните ответы. В конце курса вы вернётесь к этому файлу и увидите, насколько изменился ваш способ думать про систему.


Проверка знанийKnowledge check
Junior спрашивает: 'А можно сначала пройти Module 14 (observability), там же тулзы для работы -- мне сразу полезно. А процессы и память -- потом?'
ОтветAnswer
Можно, но эффективность будет 20%. Module 14 показывает тулзы: top, vmstat, perf, /proc. Без понимания того, что они показывают, вы выучите команды, но не научитесь дебажить. Пример: top показывает поле 'PR' и 'NI'. Что это? PR -- priority процесса в текущем приоритете, NI -- nice value. Без модуля 5 (планировщик) это абстрактные цифры. С модулем 04 -- вы понимаете, что PR 20 + NI 0 = default user процесс, а PR 0 = real-time, и можете сделать выводы. Другой пример: vmstat показывает 'si' и 'so' -- swap in/out. Что это значит и плохо ли это? Без модуля 6 (memory mgmt) -- никак. С модулем 05 -- понимаете, что swap-in > 0 значит, что ядро поднимает страницы из свопа в RAM, а это значит, что в прошлом был memory pressure, и сейчас процесс может тормозить. Третий пример: strace показывает 'futex(...)' где-то. Без модуля 4 (threads) и 07 (IPC) -- не знаете, что futex это механизм синхронизации тредов и значит ваш процесс ждёт другого треда. С модулями -- сразу видите ситуацию. Порядок 'Module 14 в начале' даёт вам молотки, но не учит, что есть гвозди и что есть шурупы. Правильный путь -- понять концептуально, потом тулзы оживают.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Какой блок модулей курса предоставляет фундамент DE, который НЕ рекомендуется пропускать?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3