- •Занятие 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
Занятие 9. Стратегия и алгоритмы планирования потоков и процессов
План занятия:
Стратегия планирования
Планирование по принципу FIFO
Круговое планирование
Планирование на основе характеристик дальнейшего планирования
Стратегия планирования
Существуют несколько вариантов передачи управления от одного потока к другому, а именно:
После того, как поток перешел в состояние ожидания (например, во время ввода-вывода или присоединения);
После окончания выполнения потока;
Явно (поток сам отдает процессор другим потокам на время, пока он не занят полезной работой);
За прерыванием (например, прерывания от таймера).
Последний вариант отличается от других тем, что поток не может контролировать, когда наступит время передачи управления, за это отвечает планировщик операционной системы. В зависимости от поддержки такого варианта передачи управления различают две основные стратегии планирования потоков - выталкивающую и не выталкивающую многозадачность.
При выталкивающей многозадачности (preemptive multitasking) потоки, логически должны выполняться, и могут быть временно прерваны планировщиком ОС, без их участия, для передачи управления другим потокам. Прерывание потока и передачу управления другому потоку чаще всего осуществляют в обработчике прерывания от системного таймера. Такая стратегия реализована во всех современных ОС.
При не выталкивающей многозадачности (non-preemptive multitasking) потоки могут выполняться на протяжении неограниченного времени и не могут быть прерваны ОС. Для не выталкивающей многозадачности передача управления по последнему варианту не реализована, и потоки сами должны отдавать управление ОС для передачи другим потокам или, переходить в состояние ожидания. Если какой-то поток забудет или не сможет это сделать, например займет процессор бесконечным циклом, другие потоки не смогут продолжать свою работу. Такую стратегию было реализовано в ОС Novell NetWare (например, в версии 3.11, которую широко использовали в 90-х годах XX в.)
Такую стратегию, можно использовать в системах, где все приложения выполняются в режиме ядра и фактически являются системными драйверами. При этом простота реализации и отсутствие внешних прерываний потоков от планировщика ОС может повысить производительность системы для ограниченного круга задач (например, в случае ОС NetWare это было использование системы в качестве файлового сервера).
Планирование по принципу FIFO
Рассмотрим самый простой не выталкивающий алгоритм, в котором потоки ставят на исполнение в порядке их появления в системе и выполняют до перехода в состояние ожидания, явной передачи управления или завершения. Очередь готовых потоков при этом организуют по принципу FIFO, поэтому алгоритм называют алгоритмом FIFO.
Как только в системе создается новый поток, его управляющий блок добавляется в хвост очереди. Когда процессор освобождается, ему предоставляют поток из головы очереди. У такого алгоритма есть три весомых недостатка:
он по определению не выталкивающий;
среднее время отклика для него может быть довольно значительным;
он подлежит эффекту конвоя (convoy effect).
Круговое планирование
Самым простым для понимания и справедливым вытисняющим алгоритмом является алгоритм кругового планирования (round-robin scheduling). В средние века термином «round robin» называли петиции, где подписи идут по кругу, чтобы нельзя было узнать, кто подписался первым.
Каждому потоку выделяют интервал времени, который называют квантом времени (time quantum, time slice) и в течение которого этому потоку разрешено выполняться. Когда поток все еще выполняется после исчерпания кванта времени, его прерывают и переключают процессор на выполнение инструкций другого потока. Когда он блокируется или заканчивает свое выполнение до истечения кванта времени, процессор тоже передают другому потоку. Длина кванта времени для всей системы одинакова.
Такой алгоритм реализовать довольно легко. Для этого очередь готовых потоков должна быть циклическим списком. Когда поток исчерпал свой квант времени, его перемещают в конец списка, туда же добавляют и новые потоки. Проверку исчерпания кванта времени выполняют в обработчике прерывания от системного таймера.
Единственной характеристикой, которая влияет на работу алгоритма, является длина кванта времени. Здесь следует соблюдать баланс между временем, затрачиваемым на переключение контекста, и необходимостью отвечать на множество одновременных интерактивных запросов.
Планирование на основе характеристик дальнейшего планирования
Важным классом алгоритмов планирования с приоритетами являются алгоритмы, в которых решение о выборе потока для выполнения основываются на знаниях или оценках характеристик дальнейшего его исполнения.
Прежде всего, следует отметить алгоритм «первый - с коротким временем выполнения» (Shortest Time to Completion First, STCF), когда с каждым потоком связывают продолжительность следующего интервала использования им процессора и для выполнения каждый раз выбирают поток, у которого этот интервал короткий. В результате чего, потоки, захватывающие процессор на короткое время, получают при планировании предпочтение и быстрее выходят из системы.
Алгоритм STCF является теоретически оптимальным по критерию среднего времени отклика, то есть можно доказать, что для выбранной группы потоков среднее время отклика в случае применения этого алгоритма будет минимальным по сравнению с любым другим алгоритмом. К сожалению, для краткосрочного планирования реализовать его невозможно, так как эта реализация требует предвидения ожидаемых характеристик. Для долгосрочного планирования его используют довольно часто. Отметим также, что оптимальность такого алгоритма неотделима от его «несправедливости» - к потокам с длинными интервалами использования процессора.
Для краткосрочного планирования может быть реализовано приближение к этому алгоритму, основанное на оценке длины очередного интервала использования процессора с учетом предыдущих интервалов того же потока.
Вытисняющим аналогом STCF алгоритм «первый - с коротким временем выполнения, что осталось» (Shortest Remaining Time to Completion First, SRTCF). Его отличие от SCTF заключается в том, что, когда в очередь готовых потоков добавляют новый, у которого следующий интервал использования процессора короче, чем время, оставшееся до завершения выполнения текущего потока, что приводит к прерыванию текущего потога, и на его место становится новый поток.
