- •Занятие 1. Понятие операционной системы, ее назначения и функции
- •Занятие 2. Эволюция операционных систем
- •Занятие 3. Различные операционные системы
- •Занятие 4. Базовые понятия архитектуры операционных систем
- •Занятие 5. Особенности архитектуры Unix и Linux
- •Занятие 6. Введение в процессы, потоки и задания операционной системы.
- •Занятие 7. Управление процессами в Unix и Linux
- •Занятие 8. Планирование потоков и процессов в операционных системах
- •Занятие 9. Стратегия и алгоритмы планирования потоков и процессов
- •Занятие 10. Различные алгоритмы планирования
- •Занятие 11. Взаимодействие потоков
- •Занятие 12. Базовые механизмы синхронизации потоков
- •Занятие 13. Концепция монитора и взаимодействие потоков в Linux и Windows
- •Занятие 14. Работа с виртуальной памятью
- •Занятие 15. Реализация управления основной памятью в Linux и Windows
- •Занятие 16. Динамический участок памяти процесса и сборщик мусора
- •Занятие 17. Реализация динамического управления памятью в Linux и Windows
- •Занятие 18. Файлы, файловые системы, работа с файлами и каталогами
- •Занятие 19. Операции над файлами и каталогами. Строение жесткого диска
- •Занятие 20. Размещение информации в файловых системах
- •Занятие 21. Файловые системы ext и fat
Занятие 10. Различные алгоритмы планирования
План занятия:
Многоуровневые очереди с обратной связью
Лотерейное планирование
Планирование процессов реального времени в ядре Linux
Традиционный алгоритм планирования
Процедура планирования
Начало новой эпохи
Многоуровневые очереди с обратной связью
Алгоритм многоуровневых очередей с обратной связью (multilevel feedback queues) является универсальным алгоритмом планирования (с помощью настройки параметров его можно свести почти к любому другому алгоритму), но при этом одним из самых сложных в реализации.
С точки зрения организации структур данных этот алгоритм похож на обычный алгоритм многоуровневых очередей: есть несколько очередей готовых потоков с различным приоритетом, при этом потоки очереди с более низким приоритетом выполняются, только когда все очереди верхнего уровня пустые.
Различия между двумя алгоритмами заключаются в том, что:
потокам разрешено переходить с уровня на уровень (из очереди в очередь);
потоки в одной очереди объединяются не по приоритету, а по длине интервала использования процессора, потоки с коротким интервалом в очереди с большим приоритетом.
Внутри всех очередей, кроме низкого, используют также круговое планирование (в самой очереди работает FIFO-алгоритм). Различные очереди отвечают разной длине кванта времени - чем выше приоритет, тем короче квант (обычно длина кванта для соседних очередей уменьшается вдвое). Если поток исчерпал свой квант времени, он перемещается в хвост очереди с низшим приоритетом (и с более длинным квантом). В результате потоки с более короткими интервалами (например, ограничены вводом-выводом) остаются с высоким приоритетом, а потоки с более длинными интервалами удлиняют свой квант времени. Можно автоматически перемещать потоки, которые давно не получали управления, из очереди нижнего уровня на уровень выше.
Лотерейное планирование
Идея лотерейного планирования заключается в том, что:
поток получает некоторое количество лотерейных билетов, каждый из которых дает право пользоваться процессором на протяжении времени Т;
планировщик через промежуток времени Т выбирает один случайный лотерейный билет;
поток, «выигравший», получает управление до следующего розыгрыша.
Лотерейное планирования позволяет:
эмулировать круговое планирование, выдав каждому потоку одинаковое количество билетов;
эмулировать планирование с приоритетами, распределяя билеты в соответствии с приоритетами потоков;
эмулировать SRTCF - давать коротким потокам больше билетов, чем длинным;
обеспечить распределение процессорного времени между потоками - дать каждому потоку количество билетов, пропорционально доле процессорного времени, которое требуется ему выделить;
динамично менять приоритеты, отбирая и добавляя билеты по ходу.
Хотя большинство этих задач может быть решено лотерейным планированием лишь приблизительно, с некоторой вероятностью, на практике получают не удовлетворительные результаты. При этом чем дольше работает система, то ближе будут результаты в теоретических значений (по закону больших чисел). На самом деле лотерейное планирования использует тот факт, что вся идеология планирования в значительной степени является эвристической, поскольку нельзя точно предсказать характер поведения потоков в системе.
Планирование процессов реального времени в ядре Linux
Относительно процессов реального времени, достаточно сказать, что:
они всегда будут иметь при планировании приоритет перед обычными процессами;
процесс с планированием по принципу FIFO выполняют до тех пор, пока он не будет вытеснен процессом реального времени с более высоким приоритетом;
то же касается процесса с круговым планированием, кроме того, что процесс дополнительно вытеснен после исчерпания кванта времени.
Традиционный алгоритм планирования
Рассмотрим алгоритм планирования обычных процессов. В основе алгоритма лежит распределение процессорного времени на эпохи (epochs). За эпохи каждый процесс имеет квант времени, длину которого рассчитывают в момент начала эпохи. В основном различные процессы имеют кванты различной длины. Когда процесс исчерпал свой квант, его вытесняют и в течение текущей эпохи он больше не будет выполняться. Управление передают другому процессу. Если же процесс был приостановлен для выполнения ввода-вывода или вследствие синхронизации его квант не считают исчерпанным и он может быть выбран планировщиком протяжении текущей эпохи. Эпоха заканчивается, когда все готовы к выполнению процессы исчерпали свои кванты. В этом случае алгоритм планирования перечисляет кванты для всех процессов и начинает новую эпоху.
Квант, который задают в начале эпохи, называют базовым квантом времени процесса. Его значения могут динамически изменяться системными вызовами. Процесс-потомок всегда наследует базовый квант своего предка.
Приоритет процесса бывает двух видов: фиксированный, для процессов реального времени, задают только при создании процесса, и динамический, для обычных про¬цесив, который зависит от базового приоритета и времени, оставшегося до исчерпания кванта. Динамический приоритет любого обычного процесса всегда ниже любой приоритет процесса реального времени.
Процедура планирования
Эта процедура сначала проверяет, не переходит текущий процесс в состояние ожидания, и если это так, изымает его из очереди готовых процессов. Затем выбирается процесс для выполнения. Для этого просматриваются очередь готовых процессов, для каждого процесса оценивают динамичный приоритет и выбирают процесс с максимальным его значением. Алгоритм оценки этого приоритета описан ниже. Для процесса, исчерпал свой квант времени, он равен нулю.
Если ни один процесс не был выбран, текущий процесс продолжает выполняться. Когда выбор состоялся, контекст переключают на новый процесс.
Начало новой эпохи
Особая ситуация возникает тогда, когда для всех процессов в очереди готовых процессов значение динамического приоритета равна нулю, то есть все они исчерпали свой квант и пора начинаний новую эпоху. Однако это не означает, что система вообще не имеет процессов, для которых квант не исчерпан, - они могут находиться в очередях ожидания (чаще всего это процессы, ограниченные вводом-выводом).
Когда начинается новая эпоха, происходит перечисление квантов для всех процессов системы (не только для процессов в состоянии готовности).
Поскольку до начала новой эпохи ненулевой квант остается только у процессов, которые не находятся в состоянии готовности, этот алгоритм дает определенное преимущество процессам, ограниченным возможностями ввода-вывода. При этом значение кванта для процесса никогда не сможет стать большим, чем удвоенное значение его базового приоритета.
