Операционная система распределяет процессорное время с помощью планировщика: он выбирает, какой готовой к выполнению задаче предоставить ядро сейчас, и когда передать его следующей. Решение зависит от приоритета, состояния задач и политики ОС. Поэтому распределение не означает, что каждому процессу постоянно отводится одинаковая доля времени.
Что определяет долю процессорного времени каждой задачи
- Планировщик выбирает среди задач, которые готовы выполняться; ожидающий диск или сеть процессор не занимает.
- Приоритет влияет на очередность и доступ к процессору, но конкретные правила зависят от ОС.
- Квант времени ограничивает непрерывное выполнение задачи, после чего планировщик может выбрать другую.
- ОС учитывает отзывчивость приложений и общую пропускную способность системы.
- На многоядерном процессоре несколько задач могут выполняться одновременно на разных ядрах.
Как планировщик выбирает следующую задачу
Планировщик — компонент ОС, который решает, какая из готовых к выполнению задач получит процессор. Задачей в этом контексте может быть поток процесса: именно потоки обычно являются единицами, между которыми планировщик распределяет время на ядрах.
Планировщик процессов операционной системы не выбирает приложение среди всех запущенных программ без разбора. Он рассматривает готовые потоки. Если поток ждёт завершения операции ввода-вывода, он временно не конкурирует за процессор; когда ожидание заканчивается, поток снова может попасть в очередь готовых.
Как работает планировщик задач в операционной системе, зависит от её алгоритма и настроек. Его задача — согласовать конкурирующие требования: дать интерактивному приложению быстро реагировать на действия пользователя, не лишать вычислительные задачи процессорного времени и не тратить слишком много ресурсов на переключения.
Кванты времени и переключение контекста
Вытесняющий планировщик обычно позволяет потоку выполняться ограниченное время или до события, требующего пересмотра выбора. При переключении контекста ОС сохраняет состояние текущего потока и восстанавливает состояние другого. Практически это происходит так:
- Планировщик выбирает готовый поток по действующим правилам.
- Процессор выполняет его инструкции, пока поток не заблокируется, не уступит управление или не появится причина сменить задачу.
- Если поток перестал быть готовым, например запросил данные с диска, ОС исключает его из очереди выполняемых.
- При исчерпании выделенного интервала ОС может приостановить поток и поставить его обратно в очередь готовых.
- ОС сохраняет состояние остановленного потока и восстанавливает состояние следующего выбранного потока.
- Новый поток продолжает работу с сохранённого места, если только его логика не требует обработать отдельное событие.
Переключение даёт возможность чередовать работу задач, но само по себе не выполняет полезные вычисления приложения. Поэтому слишком частые переключения могут создавать накладные расходы, а слишком редкие — ухудшать отзывчивость.
Приоритеты: почему одни процессы получают процессор раньше других
Приоритет помогает ОС выбирать между готовыми задачами, когда они претендуют на процессор. Он не гарантирует постоянное выполнение одного процесса: поток может ждать ввода-вывода, уступить ядро или конкурировать с задачами более высокого приоритета.
- Интерактивная работа. Поток интерфейса важно быстро запускать после действия пользователя, чтобы окно не казалось зависшим.
- Фоновая нагрузка. Индексацию или обработку больших файлов можно выполнять менее настойчиво, чтобы они не мешали активной работе.
- Задачи с требованиями к срокам. В системах реального времени расписание может учитывать заданные временные ограничения, если ОС и приложение поддерживают такой режим.
- Служебные процессы. ОС может выделять ресурсы потокам, важным для работы системы, однако конкретные механизмы и уровни приоритета различаются.
Алгоритмы планирования процессов задают, как именно учитывать приоритеты, очереди и прошлое использование процессора. Пользовательские настройки приоритета стоит применять осторожно: завышение приоритета одной программы способно сделать менее отзывчивыми другие.
Вытесняющая многозадачность и добровольная передача управления
При вытесняющей многозадачности ОС может остановить текущий поток и запустить другой. При добровольной передаче поток сам уступает процессор или блокируется, например ожидая данные. Современные настольные ОС обычно используют вытесняющее планирование для обычных задач.
Преимущества вытеснения:
- ОС может переключить управление, даже если приложение долго не уступает процессор.
- Система сохраняет возможность обслуживать другие потоки и реагировать на события.
- Планировщик может учитывать изменения приоритетов и готовности задач.
Ограничения и затраты:
- Переключение контекста расходует время и ресурсы процессора.
- Параллельная работа усложняет синхронизацию потоков и может приводить к гонкам при ошибках в программе.
- Для отдельных системных задач одного обычного планирования недостаточно: важны специальные гарантии и настройки.
Как ОС балансирует отзывчивость и пропускную способность
Отзывчивость показывает, насколько быстро система реагирует на запросы пользователя; пропускная способность — сколько работы она успевает выполнить за период. Планировщик ищет баланс, а его решения не всегда означают равное время для всех задач.
- Миф: всем процессам достаётся поровну. Распределение зависит от политики ОС, приоритетов и того, какие потоки готовы выполняться.
- Миф: запущенный процесс постоянно использует процессор. Он может ожидать сеть, накопитель или событие, не занимая ядро.
- Ошибка: повышать приоритет при любой медленной работе. Если причина в ожидании диска или сети, дополнительный процессорный ресурс не устранит задержку.
- Ошибка: считать переключение мгновенным и бесплатным. Оно необходимо для многозадачности, но слишком частые переключения создают накладные расходы.
- Практический вывод: при анализе тормозов различайте высокую загрузку процессора и длительное ожидание ресурсов — это разные причины задержек.
Что происходит с планированием на многоядерном процессоре
На одном ядре в конкретный момент выполняется один поток. На многоядерном процессоре планировщик может разместить готовые потоки на разных ядрах и выполнять их одновременно. Это распределение задач между ядрами не означает, что каждый отдельный поток автоматически ускорится: приложение должно уметь работать параллельно, а общие ресурсы могут ограничивать прирост.
Например, если редактор обрабатывает ввод пользователя, а фоновый поток пересчитывает данные, ОС может назначить их разным свободным ядрам. Если доступно только одно ядро или остальные ядра заняты, задачи будут конкурировать за процессорное время. Управление процессами в операционной системе включает выбор не только следующего потока, но и подходящего ядра с учётом доступности и правил размещения.
Что важно уточнить о распределении времени процессора
Чем процесс отличается от потока для планировщика?
Процесс — это контейнер ресурсов программы, а поток — последовательность выполнения внутри него. Планировщик обычно распределяет процессорное время между потоками.
Почему процесс может быть запущен, но не загружать процессор?
Он может ждать ввода-вывода, таймера или другого события. Пока поток не готов выполняться, планировщик не назначает его на ядро.
Означает ли короткий квант, что система всегда отзывчивее?
Нет. Более частые переключения могут уменьшить задержку ожидания, но увеличивают накладные расходы. Результат зависит от нагрузки и политики планировщика.
Получает ли процесс с высоким приоритетом всё процессорное время?
Не обязательно. Приоритет влияет на выбор среди готовых задач, но поток может блокироваться, а правила распределения зависят от ОС.
Почему дополнительные ядра не всегда ускоряют программу?
Программа может выполнять критическую работу последовательно или упираться в память, диск и другие ресурсы. Одновременная работа нескольких ядер помогает только там, где задачи можно эффективно распараллелить.
Как понять, процессор занят вычислениями или ожиданием?
Нужно сопоставить загрузку процессора с ожиданиями диска, сети и другими показателями системы. Одна лишь медленная работа приложения не доказывает нехватку процессорного времени.
Автор: Алексей Морозов.