Открыть сервис

Приоритетное планирование

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

Принцип работы

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

Вытесняющее и невытесняющее планирование

Существует два основных варианта приоритетного планирования:

Вытесняющее планирование обеспечивает более быструю реакцию на события высокого приоритета, но требует более сложной реализации и синхронизации.

Классификация приоритетов

Статические приоритеты

Приоритет задачи устанавливается один раз при её создании и не меняется в процессе выполнения. Такой подход прост в реализации, но может приводить к проблеме «голодания» (starvation), когда задачи с низким приоритетом никогда не получают процессор, если постоянно поступают задачи с более высокими приоритетами.

Динамические приоритеты

Приоритет задачи может изменяться планировщиком в зависимости от различных факторов: времени ожидания, потреблённого процессорного времени, частоты обращений к устройствам ввода-вывода и других. Динамическое изменение приоритетов позволяет бороться с голоданием и повышает справедливость планирования. Например, приоритет долго ожидающей задачи может быть постепенно повышен.

Приоритеты по типу задач

В некоторых системах приоритеты разделяют на классы:

Алгоритмы на основе приоритетов

Простое приоритетное планирование

Самая базовая форма: каждому процессу присваивается статический приоритет, и планировщик выбирает процесс с наивысшим приоритетом. При равных приоритетах часто используется принцип «первый пришёл — первым обслужен» (FCFS).

Многоуровневые очереди с обратной связью (Multilevel Feedback Queue)

Этот алгоритм, реализованный, например, в операционной системе Linux (с определёнными модификациями), использует несколько очередей с различными приоритетами. Процессы, активно использующие процессор (CPU-bound), со временем перемещаются в очереди с более низким приоритетом, а процессы, часто ожидающие ввода-вывода (I/O-bound), повышаются. Это позволяет балансировать отзывчивость интерактивных задач и пропускную способность вычислительных задач.

Планирование «по кратчайшему остатку» (Shortest Remaining Time)

Формально это вариант приоритетного планирования, где приоритетом является оставшееся время выполнения задачи. Чем меньше осталось до завершения, тем выше приоритет. Этот теоретически оптимальный по среднему времени ожидания алгоритм редко используется на практике из-за сложности оценки оставшегося времени.

Планирование по срокам

В системах жёсткого реального времени (например, Rate-Monotonic Scheduling) приоритет определяется периодом или сроком (deadline) задачи. Задача, у которой ближайший срок, получает самый высокий приоритет.

Проблемы приоритетного планирования

Голодание (Starvation)

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

Инверсия приоритетов

Ситуация, при которой задача с низким приоритетом удерживает ресурс (например, мьютекс), необходимый задаче с высоким приоритетом, в результате чего высокоприоритетная задача вынуждена ждать. Это может привести к нарушению временных ограничений в системах реального времени. Для предотвращения инверсии приоритетов используются протоколы наследования приоритетов (приоритет удерживающей задачи временно повышается) и протоколы потолка приоритетов.

Влияние на производительность

Вытесняющее планирование требует больше накладных расходов на переключение контекста. Слишком частое переключение может снизить общую пропускную способность системы. Неправильный выбор приоритетов может привести к неоптимальному использованию процессора и увеличению времени отклика.

Применение

Приоритетное планирование широко применяется:

Примеры в операционных системах

См. также

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →