0:05
Здравствуйте!
В прошлой лекции мы рассмотрели функции
планирования ресурсов в операционной системе.
В сегодняшней лекции рассмотрим способы организации
и дисциплины этого процесса.
В операционной системе используют различные очереди
(списки) для планирования процессов.
Процессы во время нахождения в системе
перемещаются между этими очередями.
Движущей силой,
меняющей состояния процессов, являются события.
Один из основных видов событий — это прерывания.
Примеры таких очередей. Очередь задач:
множество всех процессов в системе.
Очередь готовых:
множество всех процессов, готовых к выполнению.
Очередь ожидающих:
множество всех заблокированных процессов.
В самом простом случае, нам нужно только две очереди —
очередь заблокированных (чтобы из нее брать на выполнение)
и очередь готовых задач
(чтобы в нее переводить завершенные задачи).
Но при таком подходе возникают трудности,
если наступает какое-то событие,
то необходимо просмотреть всю очередь,
какой бы длинной она не была
(событие может затрагивать более чем один процесс).
Это не эффективно.
Решением данной проблемы является
использование нескольких очередей ожидания.
В идеале каждому событию выделять свою очередь.
Но на практике это не возможно,
так как событий в системе может быть огромное количество,
так же какие-то события частые, а некоторые очень редкие.
Поэтому чаще всего разработчики операционных систем
только увеличивают количество очередей
до определенного уровня.
Поэтому для состояния ожидания может быть не один список,
а столько, сколько различных видов
ресурсов могут вызывать состояние ожидания.
Например, состояний ожидания завершения
операции ввода/вывода, может быть столько,
сколько устройств ввода/вывода имеется в системе.
Поскольку операционная система должна иметь
возможность быстро выполнять операции
с различными блоками, во многих вычислительных машинах
предусматривается специальный аппаратный регистр,
который всегда указывает на блок управления
текущего выполняемого процесса.
Зачастую имеются также аппаратно-реализованные команды,
которые обеспечивают быструю загрузку информации
состояния в этот блок
и последующее быстрое восстановление этой информации.
Все это делается для ускорения работы с очередями планирования.
Существует множество механизмов планирования,
так же называемых дисциплинами планирования.
Рассмотрим некоторые из них.
2:18
Первый — это обслуживание в порядке поступления.
Выделение процессора производится по принципу
FIFO (First In First Out),
т. е. в порядке поступления заявок на обслуживание.
Этот подход позволяет реализовать стратегию
"по возможности заканчивать
выполнения в порядке их появления".
Те задачи, которые были заблокированы
в процессе выполнения, после перехода в состояние готовности
ставятся в очередь перед теми задачами,
которые еще не выполнялись.
Таким образом, создается две очереди:
одна из новых задач, а другая — из задач,
перешедших из состояния ожидания.
Эта дисциплина реализуется как не вытесняющая,
когда задачи освобождают процессор добровольно.
Достоинством данного алгоритма является
его простота реализации.
Недостатком — при большой загрузке
короткие задания вынуждены ожидать
в системе долгое время.
Следующий подход устраняет этот недостаток.
Вторая дисциплина: кратчайший процесс обслуживается первым.
Согласно этому алгоритму, следующим для выполнения
назначается поток с минимальным оценочным временем,
требуемым для его окончания работы.
Здесь оказывается предпочтение потокам,
которым осталось немного времени до их завершения.
Благодаря этому уменьшается количество
ожидающих задач в системе.
Но недостатком является необходимость заранее
знать оценочные времена, что не всегда возможно.
В качестве грубого приближения в некоторых случаях
можно использовать время, затраченное потоком
при последнем получении управления.
Алгоритм относится к разряду не вытесняющих
и бесприоритетных.
Названные алгоритмы могут использоваться
для пакетных режимов работы,
когда пользователь не ожидает реакции системы.
Для интерактивных вычислений нужно, прежде всего,
обеспечить приемлемое время реакции
и равенство в обслуживании для мультитерминальных систем.
3:59
Для однопользовательских систем желательно,
чтобы те программы, с которыми непосредственно работают
пользователи, имели лучшее время реакции,
чем фоновые задания.
Кроме того, некоторые приложения, выполняясь
без непосредственного участия пользователя,
должны, тем не менее, гарантированно получать
свою долю процессорного времени
(например, программа получения электронной почты).
Для решения подобных проблем используются
приоритетные методы обслуживания и концепция квантования.
Карусельная дисциплина, или круговая — Round Robin.
Данная дисциплина относится к вытесняющим алгоритмам
и основана на квантовании.
После окончания выделенного задаче кванта времени
она снимается с процессора и ставится в конец
очереди потоков, готовых к выполнению,
а на обслуживание процессором принимается очередная задача.
4:42
В некоторых операционных системах есть возможность
указывать в явном виде величину кванта времени
или допустимый диапазон его значений.
Дисциплина планирования Round Robin
является одной из самых распространенных.
В некоторых случаях, когда операционная система
не поддерживает в явном виде дисциплину карусельного планирования,
такое обслуживание можно организовать искусственно.
Например, в некоторых операционных системах
реального времени (когда нужно гарантированно
выполнять некоторые задачи в строго отведенный
промежуток времени) используется планирование
с абсолютными приоритетами, а при равенстве приоритетов
действует принцип очередности.
Тогда снять задачу с выполнения может
только задача с более высоким приоритетом.
При необходимости организовать обслуживание
равномерно и равноправно, т. е. чтобы все задания
получали одинаковые кванты времени,
системный оператор может сам реализовать такое обслуживание.
Для этого достаточно пользовательским задачам
присвоить одинаковые приоритеты
и создать одну высокоприоритетную задачу,
которая не должна ничего делать, кроме как планировать
на выполнение по таймеру через указанные интервалы времени.
Эта задача будет только снимать
с выполнения текущее приложение,
перемещать его в конец очереди,
а сама задача тут же покинет процессор
и уступит его следующему в очереди процессу.
В простейшей реализации карусельная дисциплина
обслуживания предполагает, что все задания
имеют одинаковый приоритет.
Если же необходимо ввести
механизм приоритетного обслуживания,
обычно организуют несколько очередей,
в зависимости от приоритетов,
и к обслуживанию менее приоритетной очереди
переходят только в том случае,
когда более приоритетная очередь пуста.
По такому алгоритму выполняется планирование,
например, в системе Windows.
6:15
Важная концепция, лежащая в основе многих
вытесняющих алгоритмов — это приоритетное обслуживание.
Такие алгоритмы используют информацию,
находящуюся в описателе потока — его приоритет.
В разных системах приоритет определяется по-разному.
В одних системах наивысшим значением приоритета
может считаться его численно наибольшее значение
в других наоборот, наивысшим приоритетом считается нулевой.
Как правило, приоритет потока
непосредственно связан с приоритетом процесса,
в рамках которого выполняется данный поток.
Приоритет процесса назначается операционной системой
при его создании, при этом учитывается,
является ли процесс системным или прикладным,
каков статус пользователя, запустившего процесс,
было ли явное указание пользователя
на присвоение процессу определенного приоритета.
Если поток инициирован не по команде пользователя,
а в результате выполнения системного вызова другим потоком,
тогда для назначения ему приоритета
операционная система должна учитывать параметры
системного вызова.
При планировании обслуживания программ
согласно описанным ранее алгоритмам
может возникнуть ситуация, когда некоторые задачи
контроля или управления не смогут быть реализованы
в течение длительного промежутка времени
из-за возрастания нагрузки в системе.
При этом последствия из-за несвоевременного выполнения
таких задач могут быть серьезнее,
чем из-за невыполнения каких-то программ
с более высоким приоритетом.
В таком случае было бы целесообразно
временно изменить приоритет "аварийных" задач,
у которых истекает отпущенное для них время обработки,
а после выполнения восстановить прежнее значение.
Введение механизмов динамического
изменения приоритетов позволяет реализовать
более быструю реакцию системы на короткие запросы,
что важно при интерактивной работе,
но при этом гарантировать выполнение любых запросов.
Таким образом, приоритет может быть статическим
(фиксированным) или динамическим (изменяющимся
системой в зависимости от ситуации в ней).
Так называемый базовый приоритет потока
непосредственно зависит от базового приоритета процесса,
его породившего.
В некоторых случаях система может повышать
приоритет потока в различной степени,
например, если квант отведенного ему
процессорного времени не был использован полностью,
или понижать приоритет в противном случае.
Например, операционная система повышает приоритет
в большей степени потокам, ожидающим
ввода с клавиатуры, и в меньшей степени потокам,
выполняющим операции с диском.