Блок управления процессом
Оригинальное название: Process Control Block (PCB)
Коротко
Служебная запись, которую ядро операционной системы ведёт для каждого процесса: номер, состояние, сохранённые регистры, приоритет, память и открытые файлы.
Что такое «Блок управления процессом»
На сервере одновременно работают сотни процессов — веб-сервер, рабочие процессы PHP-FPM, база данных, планировщик задач, — а ядер процессора всего несколько. Операционная система создаёт иллюзию одновременности, быстро переключая процессор между ними. Чтобы прерванный процесс потом продолжил работу ровно с того места, где остановился, всё о нём записывается в блок управления процессом (Process Control Block, PCB).
Прикладные программы с PCB напрямую не работают: эта структура живёт в памяти ядра ОС. В учебниках по операционным системам PCB — абстрактное понятие, а в конкретных системах у него своё устройство. В Linux его роль играет структура task_struct.
Что хранится в PCB
- Идентификатор процесса (PID) и родительского процесса.
- Состояние: новый, готов к выполнению, выполняется, ожидает (например, ответа диска), завершён.
- Счётчик команд и значения регистров процессора на момент остановки.
- Сведения для планировщика: приоритет, накопленное процессорное время.
- Информация о памяти процесса и таблица открытых файлов и сетевых соединений.
- Владелец процесса и его права.
Переключение контекста
Когда истекает отведённый процессу квант времени или он начинает ждать данных, ядро сохраняет текущее состояние процессора в его PCB, выбирает следующий процесс и загружает состояние из его блока. Эта операция называется переключением контекста. Она быстрая, но не бесплатная: при тысячах переключений в секунду заметная доля времени уходит на служебную работу. Поэтому, например, число рабочих процессов PHP-FPM не делают бесконечно большим — лишние процессы конкурируют за процессор и память, а не ускоряют сайт. Внутри одного процесса могут работать несколько потоков, и у каждого из них тоже есть собственное сохраняемое состояние.
Как увидеть данные процесса в Linux
Часть сведений из PCB ядро показывает через виртуальную файловую систему /proc:
$ cat /proc/1234/status
Name: php-fpm8.4
State: S (sleeping)
Pid: 1234
PPid: 1
VmRSS: 48212 kB
$ ps -o pid,ppid,stat,ni,rss,cmd -p 1234
Поле State показывает состояние (S — спит в ожидании события, R — выполняется или готов), PPid — родителя, VmRSS — сколько физической памяти занимает процесс. Эти же данные выводят утилиты ps, top и htop, когда разбираются, почему сервер перегружен.

