Что такое процесс

Чем «программа на диске» отличается от «программы, которая прямо сейчас работает».

Процесс — это программа в состоянии выполнения: её код, данные, выделенная память и текущее состояние регистров. Одна программа на диске может породить много процессов.

Программа и процесс — не одно и то же

Программа — это пассивный набор инструкций в файле (например, chrome.exe). Процесс — это активная сущность: запущенная копия программы со своими данными в памяти. Откройте браузер дважды — будет один файл программы, но два процесса со своими вкладками и состоянием.

Адресное пространство процесса

У каждого процесса есть собственное адресное пространство — изолированный диапазон памяти, который он считает своим. Оно разделено на области:

ОбластьЧто хранит
Код (text)машинные инструкции программы
Данные (data)глобальные и статические переменные
Куча (heap)динамически выделяемая память (растёт вверх)
Стек (stack)локальные переменные, вызовы функций (растёт вниз)

Изоляция адресных пространств — основа безопасности: один процесс не может прочитать память другого, даже если очень захочет. Между кучей и стеком есть свободное пространство, чтобы обе области могли расти навстречу друг другу.

Состояния процесса

Процесс не всегда выполняется — большую часть времени он чего-то ждёт. ОС отслеживает состояние каждого процесса:

  • Новый (new) — процесс создаётся.
  • Готов (ready) — готов выполняться, ждёт процессор.
  • Выполняется (running) — прямо сейчас на процессоре.
  • Ожидает (waiting/blocked) — ждёт события (например, данные с диска).
  • Завершён (terminated) — закончил работу.
       создан
         |
       [new] --> [ready] <----------------+
                   |   ^                   |
        планировщик|   | вытеснен          | событие
         выбрал    v   | (квант истёк)     | произошло
                [running] -----------------+
                   |    \
            завершён|     \ запросил ввод-вывод
                   v      v
            [terminated] [waiting]

Блок управления процессом (PCB)

Чтобы управлять процессом, ОС хранит про него всё нужное в структуре PCB (Process Control Block). Это «личное дело» процесса:

  • идентификатор процесса (PID);
  • состояние (ready/running/...);
  • значения регистров и счётчика команд (чтобы продолжить с того же места);
  • информация о памяти (где лежит адресное пространство);
  • открытые файлы, приоритет, статистика.

Когда ОС переключается с одного процесса на другой, она сохраняет состояние в PCB первого и загружает PCB второго. Это и есть переключение контекста — отдельный урок этого раздела.

Считаем процессы по состояниям

Смоделируем «снимок» планировщика: у нас список процессов с их состояниями, и мы хотим понять, кто борется за процессор, а кто заблокирован.

from collections import Counter

processes = [
    ("P1", "running"),
    ("P2", "ready"),
    ("P3", "ready"),
    ("P4", "waiting"),
    ("P5", "ready"),
    ("P6", "waiting"),
]

counts = Counter(state for _, state in processes)
for state in ("running", "ready", "waiting"):
    print(f"{state:8}: {counts[state]}")

ready = [name for name, st in processes if st == "ready"]
print(f"За процессор борются: {ready}")
print(f"Заблокированы (ждут ввод-вывод): {counts['waiting']}")

Вывод:

running : 1
ready   : 3
waiting : 2
За процессор борются: ['P2', 'P3', 'P5']
Заблокированы (ждут ввод-вывод): 2

Итог

  • Процесс — это выполняющаяся программа со своим адресным пространством.
  • Адресное пространство делится на код, данные, кучу и стек.
  • Процесс проходит состояния: new, ready, running, waiting, terminated.
  • Вся информация о процессе хранится в PCB — «личном деле» процесса.
  • Изоляция адресных пространств обеспечивает безопасность между процессами.
Проверьте себя
1. Чем процесс отличается от программы?
AНичем, это синонимы
BПрограмма — пассивный файл с инструкциями, процесс — программа в исполнении
CПроцесс хранится на диске, а программа в памяти
DПроцесс не имеет адресного пространства
2. Где растут навстречу друг другу куча и стек?
AВ области кода (text)
BВ свободном пространстве между ними внутри адресного пространства
CВ блоке PCB
DНа диске, а не в памяти
3. Что хранится в блоке управления процессом (PCB)?
AТолько исходный код программы
BPID, состояние, регистры, информация о памяти и открытых файлах
CИсключительно пароль пользователя
DКопия всей оперативной памяти
4. В каком состоянии находится процесс, ожидающий данные с диска?
Arunning
Bready
Cwaiting (blocked)
Dterminated
Поддержать проект