Зачем нужен планировщик и его критерии

Кто решает, какому процессу отдать процессор прямо сейчас, и как понять, хорошо ли он это делает.

Планировщик (scheduler) — это часть ОС, которая решает, какой из готовых процессов получит процессор следующим и на какое время.

Зачем вообще планировать

Готовых к работе процессов обычно больше, чем ядер процессора. Кому отдать процессор первым? От ответа зависит, насколько отзывчивой кажется система и эффективно ли используется железо. Плохой планировщик — и интерфейс «лагает», а сервер еле тянет нагрузку. Хороший — и всё летает на том же железе.

Аналогия: касса в супермаркете

Очередь к кассе — это процессы, кассир — процессор. Как обслуживать? Строго по порядку прихода? Сначала тех, у кого пара товаров? Дать каждому ровно минуту и переходить к следующему? Это и есть разные стратегии планирования, и у каждой свои плюсы и минусы. Например, «по порядку прихода» справедливо, но человек с одним товаром будет долго ждать за тем, у кого полная тележка.

Критерии качества планирования

Чтобы сравнивать алгоритмы, нужны метрики. Вот ключевые:

МетрикаЧто измеряетХотим
Загрузка CPUдоля времени, когда процессор занятвыше (ближе к 100%)
Пропускная способностьсколько процессов завершается в единицу временивыше
Время оборота (turnaround)от прихода до завершения процессаниже
Время ожидания (waiting)сколько процесс простоял в очереди готовыхниже
Время отклика (response)от прихода до первого запусканиже (важно для интерактива)

Как считаются ключевые времена

Запомните три формулы — они понадобятся во всех симуляциях этого раздела:

  • Время оборота = время завершения − время прихода.
  • Время ожидания = время оборота − время выполнения (burst).
  • Время отклика = первый запуск − время прихода.

Считают обычно среднее по всем процессам — по нему и сравнивают алгоритмы.

Конфликт целей

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

Считаем метрики на примере

Дано три процесса, выполняемых по порядку прихода. Посчитаем оборот и ожидание для каждого и средние значения.

# (имя, время прихода, время выполнения)
procs = [("P1", 0, 5), ("P2", 0, 3), ("P3", 0, 8)]

t = 0
total_wait = total_turn = 0
for name, arrival, burst in procs:
    start = t
    completion = t + burst
    turnaround = completion - arrival
    waiting = turnaround - burst
    total_turn += turnaround
    total_wait += waiting
    print(f"{name}: старт={start}, завершение={completion}, "
          f"оборот={turnaround}, ожидание={waiting}")
    t = completion

n = len(procs)
print(f"Среднее ожидание: {total_wait/n:.2f}")
print(f"Средний оборот:   {total_turn/n:.2f}")

Вывод:

P1: старт=0, завершение=5, оборот=5, ожидание=0
P2: старт=5, завершение=8, оборот=8, ожидание=5
P3: старт=8, завершение=16, оборот=16, ожидание=8
Среднее ожидание: 4.33
Средний оборот:   9.67

Итог

  • Планировщик решает, какой готовый процесс получит процессор и насколько.
  • Качество измеряют метриками: загрузка CPU, пропускная способность, оборот, ожидание, отклик.
  • Оборот = завершение − приход; ожидание = оборот − выполнение.
  • Цели конфликтуют: нельзя оптимизировать всё сразу — нужен компромисс.
  • Сравнивают алгоритмы обычно по среднему времени ожидания и оборота.
Проверьте себя
1. Как вычисляется время оборота (turnaround) процесса?
AВремя выполнения минус время ожидания
BВремя завершения минус время прихода
CПервый запуск минус время прихода
DСумма всех переключений контекста
2. Какая метрика особенно важна для интерактивных (настольных) систем?
AПропускная способность
BВремя отклика (response time)
CЗагрузка диска
DРазмер PCB
3. Почему нельзя оптимизировать все критерии планирования одновременно?
AИз-за нехватки памяти
BЦели конфликтуют: улучшение одной метрики обычно ухудшает другую
CТак запрещено стандартом POSIX
DПотому что процессор всегда загружен на 100%
Поддержать проект