Планировщик процессов
Планировщик процессов (англ. process scheduler) — это компонент операционной системы, отвечающий за распределение времени центрального процессора (ЦП) между выполняющимися процессами (или потоками) в соответствии с определёнными алгоритмами и приоритетами. Основная задача планировщика — обеспечить эффективное использование процессорного времени, минимизировать время ожидания и обеспечить справедливое распределение ресурсов между конкурирующими задачами. Планировщик является ключевым элементом многозадачных операционных систем, таких как Linux, Windows, macOS и других.
История развития
Ранние системы
В первых операционных системах (например, в пакетных системах 1950-х годов) планировщик отсутствовал как отдельный компонент. Задачи выполнялись последовательно, одна за другой, без прерываний. С появлением мультипрограммирования в 1960-х годах возникла необходимость в планировании, чтобы несколько программ могли одновременно находиться в памяти и поочерёдно использовать процессор.
Развитие алгоритмов
В 1970-х годах были разработаны первые алгоритмы планирования, такие как циклическое планирование (Round Robin) и планирование на основе приоритетов. В 1980-х годах, с появлением интерактивных систем (Unix, Windows), акцент сместился на минимизацию времени отклика. В 1990-х годах, с ростом многопроцессорных систем, возникли алгоритмы для симметричной многопроцессорной обработки (SMP). Современные планировщики (например, Completely Fair Scheduler в Linux) используют сложные эвристики для адаптации к изменяющейся нагрузке.
Классификация планировщиков
По уровню планирования
- Долгосрочный планировщик (планировщик заданий) — решает, какие процессы следует допустить в систему для выполнения. Определяет степень мультипрограммирования (количество одновременно выполняемых процессов). В современных системах часто отсутствует или реализован упрощённо.
- Среднесрочный планировщик (планировщик свопинга) — временно выгружает процессы из памяти на диск (свопинг) для освобождения ресурсов. Используется в системах с виртуальной памятью.
- Краткосрочный планировщик (диспетчер) — непосредственно распределяет процессорное время между готовыми к выполнению процессами. Работает с высокой частотой (миллисекунды) и определяет, какой процесс получит ЦП следующим.
По типу системы
- Планировщики для пакетных систем — ориентированы на максимальную пропускную способность (например, алгоритм «первый пришёл — первый обслужен»).
- Планировщики для интерактивных систем — минимизируют время отклика (например, циклическое планирование).
- Планировщики для систем реального времени — гарантируют выполнение задач в строго заданные сроки (жёсткое или мягкое реальное время).
Алгоритмы планирования
Вытесняющие и невытесняющие
- Невытесняющее (кооперативное) планирование — процесс сам добровольно отдаёт управление планировщику (например, после завершения ввода-вывода). Использовалось в ранних версиях Windows и macOS.
- Вытесняющее планирование — планировщик может принудительно прервать выполнение процесса (по таймеру или событию) и передать управление другому процессу. Используется в большинстве современных ОС.
Основные алгоритмы
- First Come, First Served (FCFS) — процессы выполняются в порядке поступления. Простой, но неэффективен при коротких и длинных задачах.
- Shortest Job First (SJF) — выбирается процесс с наименьшим ожидаемым временем выполнения. Оптимален по среднему времени ожидания, но требует знания времени выполнения.
- Round Robin (RR) — каждому процессу выделяется фиксированный квант времени (например, 10–100 мс). После истечения кванта процесс переходит в конец очереди. Обеспечивает равномерное распределение процессорного времени.
- Priority Scheduling — процессам назначаются приоритеты (статически или динамически). Выполняется процесс с наивысшим приоритетом. Может приводить к голоданию низкоприоритетных процессов.
- Multilevel Feedback Queue — процессы перемещаются между несколькими очередями с разными квантами времени и приоритетами. Адаптивный алгоритм, используемый в современных ОС (например, в Windows).
Современные реализации
- Completely Fair Scheduler (CFS) — планировщик по умолчанию в ядре Linux (с версии 2.6.23). Моделирует «идеальный, справедливый процессор» и распределяет время пропорционально весу (приоритету) процессов. Использует красно-чёрное дерево для хранения очереди.
- Windows NT Scheduler — использует многоконтурную очередь с приоритетами (32 уровня). Приоритеты могут динамически повышаться для интерактивных процессов (например, при получении ввода с клавиатуры). Поддерживает привязку к ядрам процессора (CPU affinity).
- XNU Scheduler (macOS/iOS) — основан на гибридном подходе, сочетающем приоритеты и кванты времени. Поддерживает многопроцессорность и энергоэффективность.
Характеристики и метрики
Ключевые показатели
- Пропускная способность (throughput) — количество процессов, завершённых за единицу времени.
- Время ожидания (waiting time) — суммарное время, которое процесс провёл в очереди готовых к выполнению.
- Время отклика (response time) — время от отправки запроса до первого отклика системы (важно для интерактивных приложений).
- Время оборота (turnaround time) — полное время от момента поступления процесса до его завершения.
- Справедливость (fairness) — равномерность распределения процессорного времени между процессами с одинаковым приоритетом.
Компромиссы
Ни один алгоритм не может одновременно оптимизировать все метрики. Например, увеличение пропускной способности часто приводит к ухудшению времени отклика. Планировщики настраиваются под конкретные сценарии использования (серверы, рабочие станции, встраиваемые системы).
Применение
В операционных системах общего назначения
Планировщик обеспечивает иллюзию одновременного выполнения множества задач на одном процессоре. В многопроцессорных системах (SMP, NUMA) планировщик дополнительно распределяет процессы по ядрам, учитывая кэш-локальность и загрузку.
В системах реального времени
- Жёсткое реальное время — используется в авионике, медицинском оборудовании, промышленных контроллерах. Планировщик гарантирует, что критичные задачи будут выполнены до дедлайна (алгоритмы Rate-Monotonic Scheduling, Earliest Deadline First).
- Мягкое реальное время — допускается пропуск дедлайнов, но с ухудшением качества (например, в мультимедийных приложениях).
В облачных и виртуальных средах
Гипервизоры (например, KVM, VMware) используют собственные планировщики для распределения ресурсов между виртуальными машинами. Учитываются приоритеты, гарантии производительности и изоляция.
Критика и ограничения
- Сложность настройки — в многозадачных системах с разнородной нагрузкой (например, серверы баз данных + веб-серверы) оптимальные параметры планировщика могут сильно различаться.
- Энергопотребление — в мобильных и встраиваемых системах планировщик должен учитывать не только производительность, но и энергоэффективность (например, алгоритмы Dynamic Voltage and Frequency Scaling).
- Проблема голодания — при использовании приоритетов низкоприоритетные процессы могут никогда не получить процессорное время. Решается динамическим повышением приоритета (aging).
- Непредсказуемость в реальном времени — стандартные планировщики (например, CFS) не гарантируют соблюдения дедлайнов, что требует специализированных решений.
Интересные факты
- В ядре Linux планировщик CFS использует виртуальное время (vruntime) для оценки «справедливости» — чем меньше vruntime у процесса, тем выше его приоритет.
- В Windows NT планировщик может временно повышать приоритет процесса, который получил ввод с клавиатуры или мыши, чтобы улучшить отзывчивость интерфейса.
- Первый алгоритм планирования для многозадачных систем был реализован в операционной системе CTSS (Compatible Time-Sharing System) в 1961 году в Массачусетском технологическом институте.
Источники
- Таненбаум Э., Бос Х. «Современные операционные системы» (4-е издание, 2015)
- Сильбершац А., Гэлвин П., Гэгн Г. «Операционные системы: внутренняя структура и принципы проектирования» (9-е издание, 2018)
- Документация ядра Linux: «CFS Scheduler» (kernel.org)
- Документация Microsoft: «Windows Kernel-Mode Scheduler» (Microsoft Docs)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →