Приоритет процесса¶
Приоритет процесса — это механизм операционных систем, определяющий, какой из готовых к выполнению процессов получит доступ к центральному процессору (ЦП) в условиях многозадачности. Приоритет представляет собой числовое значение, которое присваивается каждому процессу или потоку и используется планировщиком для принятия решений о порядке распределения процессорного времени. Чем выше приоритет, тем чаще и дольше процесс выполняется, что обеспечивает более быструю реакцию на критически важные задачи.
¶История
Понятие приоритета процесса возникло в ранних многозадачных операционных системах 1960-х годов, таких как CTSS (Compatible Time-Sharing System) и MULTICS (Multiplexed Information and Computing Service). В этих системах впервые была реализована идея разделения процессорного времени между несколькими пользователями и программами. Приоритеты использовались для того, чтобы интерактивные задачи (например, ввод команд с терминала) получали преимущество перед фоновыми вычислениями, что повышало удобство работы.
В 1970-х годах с развитием Unix-подобных систем приоритеты стали более формализованными. В Unix приоритет процесса вычислялся на основе его «nice-значения» (от англ. nice — «вежливый»), которое позволяло пользователю или администратору влиять на приоритет. В 1980-х годах в операционных системах реального времени, таких как VxWorks и QNX, приоритеты стали основой для гарантированного выполнения задач в строго заданные сроки.
В современных операционных системах, включая Windows, Linux и macOS, приоритеты процессов остаются ключевым элементом планирования, хотя их реализация усложнилась из-за поддержки многопоточности, многоядерных процессоров и гибридных моделей планирования.
¶Классификация приоритетов
¶Статические и динамические приоритеты
Приоритеты процессов делятся на два основных типа:
- Статические приоритеты — фиксированные значения, которые не изменяются в течение времени жизни процесса. Они задаются при создании процесса или администратором системы. Используются в системах реального времени, где важна предсказуемость.
- Динамические приоритеты — изменяются планировщиком в зависимости от поведения процесса (например, времени ожидания, частоты ввода-вывода). Это позволяет адаптировать распределение ресурсов к текущей нагрузке. В большинстве современных ОС применяются динамические приоритеты.
¶Абсолютные и относительные приоритеты
- Абсолютные приоритеты — процесс с более высоким приоритетом всегда вытесняет процесс с более низким приоритетом, независимо от текущего состояния. Характерны для систем реального времени.
- Относительные приоритеты — приоритет учитывается наряду с другими факторами, такими как время выполнения или справедливость. В таких системах возможны ситуации, когда процесс с низким приоритетом получает процессорное время, если высокоприоритетные процессы не активны.
¶Приоритеты в пользовательском и системном пространстве
- Пользовательские приоритеты — задаются операционной системой на основе запросов приложений или настроек пользователя. В Windows это диапазон от 0 до 31, в Linux — от -20 до 19 (nice-значение).
- Системные приоритеты — назначаются критическим системным процессам (например, драйверам, планировщику) и обычно выше любых пользовательских. В Windows они могут достигать значений 32–39.
¶Устройство и механизмы
¶Планировщик процессов
Планировщик процессов — компонент ядра операционной системы, который выбирает следующий процесс для выполнения на ЦП. Приоритет является одним из ключевых параметров для этого выбора. В большинстве ОС планировщик использует алгоритмы, учитывающие приоритеты, например:
- Priority-based scheduling — планирование на основе приоритетов. Процесс с наивысшим приоритетом выполняется первым. Если два процесса имеют одинаковый приоритет, используется алгоритм Round Robin (карусель).
- Multilevel Feedback Queue — многоуровневая очередь с обратной связью. Процессы распределяются по нескольким очередям с разными приоритетами. Внутри каждой очереди применяется Round Robin, а процессы могут перемещаться между очередями в зависимости от поведения.
¶Nice-значение в Linux
В Linux приоритет процесса определяется двумя параметрами: статическим приоритетом (от 0 до 139) и динамическим приоритетом, который рассчитывается на основе nice-значения. Nice-значение может быть изменено с помощью команды nice или системного вызова setpriority. Обычные пользователи могут только снижать приоритет (увеличивать nice), а администратор (root) — повышать. Значение nice влияет на время выполнения: чем выше nice, тем ниже приоритет.
¶Приоритеты в Windows
В Windows используется модель приоритетов, основанная на классах приоритета (Idle, Below Normal, Normal, Above Normal, High, Realtime) и относительных приоритетах внутри класса (Idle, Below Normal, Normal, Above Normal, Highest, Time Critical). Итоговый приоритет процесса вычисляется как сумма базового приоритета класса и относительного приоритета. Режим Realtime (реального времени) даёт процессу максимальный приоритет, но его использование может привести к нестабильности системы, если процесс монополизирует ЦП.
¶Приоритеты потоков
В многопоточных системах приоритеты могут назначаться не только процессам, но и отдельным потокам. Планировщик выбирает поток с наивысшим приоритетом из всех процессов. Это позволяет более гибко управлять выполнением, например, выделяя больше ресурсов критическому потоку ввода-вывода в рамках одного процесса.
¶Применение
¶Системы реального времени
В операционных системах реального времени (RTOS), таких как FreeRTOS, VxWorks, QNX, приоритеты процессов являются основным механизмом для обеспечения детерминизма. Задачи с высоким приоритетом (например, обработка сигналов с датчиков) выполняются без задержек, что критично для авионики, медицинского оборудования и промышленной автоматизации.
¶Серверные и десктопные системы
В серверных ОС (Linux, Windows Server) приоритеты используются для балансировки нагрузки. Например, веб-сервер может иметь высокий приоритет, чтобы быстро обрабатывать запросы, а фоновые задачи резервного копирования — низкий, чтобы не мешать основной работе. В десктопных системах приоритеты помогают поддерживать отзывчивость интерфейса: процессы, связанные с пользовательским вводом, получают более высокий приоритет.
¶Мобильные операционные системы
В Android и iOS приоритеты процессов адаптируются для энергосбережения. Фоновые процессы (например, синхронизация данных) получают низкий приоритет, чтобы не расходовать заряд батареи, а приложения, работающие на переднем плане, — высокий.
¶Проблемы и критика
¶Инверсия приоритетов
Инверсия приоритетов — ситуация, когда процесс с низким приоритетом удерживает ресурс, необходимый процессу с высоким приоритетом, что приводит к задержкам. Классический пример — проблема в марсианском зонде Mars Pathfinder в 1997 году, где из-за инверсии приоритетов происходили сбросы системы. Для решения используется механизм наследования приоритетов (priority inheritance), при котором низкоприоритетный процесс временно получает приоритет блокирующего его высокоприоритетного процесса.
¶Голодание процессов
Голодание (starvation) — состояние, при котором процесс с низким приоритетом никогда не получает процессорного времени, если постоянно присутствуют процессы с более высоким приоритетом. В современных ОС это решается с помощью динамического повышения приоритета процессов, долго ожидающих выполнения (aging).
¶Злоупотребление приоритетами
В многопользовательских системах пользователи могут пытаться повысить приоритет своих процессов, чтобы получить преимущество. Для предотвращения этого вводятся ограничения: только администратор может устанавливать высокие приоритеты, а обычные пользователи могут только снижать их.
¶Интересные факты
- В Linux приоритет процесса может быть изменён «на лету» с помощью команды
renice, что позволяет администратору корректировать нагрузку без перезапуска программ. - В Windows режим Realtime (приоритет 24–31) может привести к «зависанию» системы, если процесс не имеет блокировок ввода-вывода, так как он вытесняет даже системные процессы.
- В некоторых RTOS, например, в FreeRTOS, количество уровней приоритетов ограничено (обычно до 255), что упрощает планирование.
- В проекте Linux ядра существует патч «BFS» (Brain Fuck Scheduler), который использует глобальный приоритет для всех процессов, что упрощает планирование на многоядерных системах, но не получил широкого распространения.
¶Источники
- Таненбаум Э., Бос Х. «Современные операционные системы». 4-е издание, 2015.
- Сильбершац А., Гэлвин П., Гэгн Г. «Операционные системы: концепции и проектирование». 9-е издание, 2013.
- Документация Linux Kernel: «Process Scheduling» (kernel.org).
- Microsoft Docs: «Priority Classes» (learn.microsoft.com).
- Статья «Priority inversion» в журнале ACM Queue, 2004.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


