Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 18
Текст из файла (страница 18)
Потери, связанные с невыполнением таких задач, могутоказаться больше, чем потери от невыполнения программ с более высоким приоритетом. При этом оказывается целесообразным временно изменить приоритет«аварийных» задач (для которых истекает отпущенное для них время обработки).После выполнения этих задач их приоритет восстанавливается. Поэтому почти в любой операционной системе реального времени (ОС РВ) имеются средства для динамического изменения приоритета (dynamic priority variation) задачи. Есть такие средства и во многих операционных системах, которые не относятся к классу ОС РВ.Рассмотрим, например, как реализован механизм динамических приоритетов в операционной системе UNIX, которая, как известно, не относится к ОС РВ.
Операцион-V66Глава 2, Управление задачаминые системы класса UNIX относятся к мультитерминальным диалоговым системам.Основная стратегия обслуживания, применяемая в UNIX-системах, — это равенствов обслуживании и обеспечение приемлемого времени реакции системы. Реализуется эта стратегия за счет дисциплины диспетчеризации RR с несколькими очередямии механизма динамических приоритетов. Приоритет процесса вычисляется следующим образом [39]. Во-первых, в вычислении участвуют значения двух полей дескриптора процесса — p_nice и р_сри.
Первое из них назначается пользователем явноили формируется по умолчанию с помощью системы программирования. Второеполе формируется диспетчером задач (планировщиком разделения времени) и называется системной составляющей или текущим приоритетом. Другими словами,каждый процесс имеет два атрибута приоритета. С учетом этого приоритета и распределяется между исполняющимися задачами процессорное время: текущий приоритет, на основании которого происходит планирование, и заказанный относительный приоритет (называемый nice number, или просто nice).Схема нумерации текущих приоритетов различна для различных версий UNIX.Например, более высокому значению текущего приоритета может соответствоватьболее низкий фактический приоритет планирования.
Разделение между приоритетами режима ядра и задачи также зависит от версии. Рассмотрим частный случай, когда текущий приоритет процесса варьируется в диапазоне от 0 (низкий приоритет) до 127 (наивысший приоритет). Процессы, выполняющиеся в режимезадачи, имеют более низкий приоритет, чем в режиме ядра. Для режима задачиприоритет меняется в диапазоне 0-65, для режима ядра — 66-95 (системный диапазон). Процессы, приоритеты которых лежат в диапазоне 96-127, являются процессами с фиксированным приоритетом, не изменяемым операционной системой,и предназначены для поддержки приложений реального времени.Процессу, ожидающему недоступного в данный момент ресурса, система определяет значение приоритета сна, выбираемое ядром из диапазона системных приоритетов и связанное с событием, вызвавшим это состояние.
Когда процесс пробуждается, ядро устанавливает значение текущего приоритета процесса равнымприоритету сна. Поскольку приоритет такого процесса находится в системномдиапазоне и выше, чем приоритет режима задачи, вероятность предоставленияпроцессу вычислительных ресурсов весьма велика. Такой подход позволяет, в частности, быстро завершить системный вызов, в ходе выполнения которого могутблокироваться некоторые системные ресурсы.После завершения системного вызова перед возвращением в режим задачи ядровосстанавливает приоритет режима задачи, сохраненный перед выполнением системного вызова.
Это может привести к понижению приоритета, что, в свою очередь, вызовет переключение контекста.Текущий приоритет процесса в режиме задачи p_priuser, как мы только что отмечали, зависит от значения относительного приоритета p_nice и степени использования вычислительных ресурсов р_сри:p_pri user = а х p_nice - b х p_cpuЗадача планировщика разделения времени — справедливо распределить вычислительный ресурс между конкурирующими процессами. Для принятия решения оПигпйтчеризация задач с использованием динамических приоритетов67ыборе следующего запускаемого процесса планировщику необходима информаи я об использовании процессора. Эта составляющая приоритета уменьшаетсябработчиком прерываний таймера каждый тик. Таким образом, пока процесс вып о1Няется в режиме задачи, его текущий приоритет линейно уменьшается.Каждую секунду ядро пересчитывает текущие приоритеты процессов, готовых к запуску (приоритеты которых меньше некоторого порогового значения; в нашемпримере эта величина равна 65), последовательно увеличивая их за счет последовательного уменьшения отрицательного компонента времени использования процессора.
Как результат, эти действия приводят к перемещению процессов в болееприоритетные очереди и повышению вероятности их последующего выполнения.Возможно использование следующей формулы:Вp_cpu = р__сри/2В этом правиле проявляется недостаток нивелирования приоритетов при повышении загрузки системы. Происходит это потому, что в таком случае каждый процесс получает незначительный объем вычислительных ресурсов и, следовательно,имеет малую составляющую р_сри, которая еще более уменьшается благодаря формуле пересчета величины р_сри.
В результате загрузка процессора перестает оказывать заметное влияние на приоритет, и низкоприоритетные процессы (то естьпроцессы с высоким значением nice number) практически «отлучаются» от вычислительных ресурсов системы.В некоторых версиях UNIX для пересчета^значения р_сри используется другаяформула:p__cpu = p_cpu х (2 х load)/(2 х load + 1)Здесь параметр load равен среднему числу процессов, находившихся в очереди навыполнение за последнюю секунду, и характеризует среднюю загрузку системы заэтот период времени.
Этот алгоритм позволяет частично избавиться от недостаткапланирования по формуле p_cpu = p_cpu/2, поскольку при значительной загрузкесистемы уменьшение р_сри при пересчете будет происходить медленнее.Описанные алгоритмы диспетчеризации позволяют учесть интересы низкоприоритетных процессов, так как в результате длительного ожидания очереди на запуск приоритет таких процессов увеличивается, соответственно повышается и вероятность их запуска. Эти алгоритмы также обеспечивают более вероятный выборпланировщиком интерактивных процессов по отношению к сугубо вычислительным (фоновым). Такие задачи, как командный интерпретатор или редактор, большую часть времени проводят в ожидании ввода, имея, таким образом, высокийприоритет (приоритет сна).
При наступлении ожидаемого события (например,пользователь осуществил ввод данных) им сразу же предоставляются вычислительные ресурсы. Фоновые процессы, потребляющие значительные ресурсы процессора, имеют высокую составляющую р_сри и, как следствие, более низкий приоритет."алогичные механизмы имеют место и в таких операционных системах, как OS/2и Windows NT/2000/XP. Правда, алгоритмы изменения приоритета задач в этих' 5стемах иные. Например, в Windows NT/2000/XP каждый поток выполнения1еетбазовый уровень приоритета, который лежит в диапазоне от двух уровнейл68Глава 2, Управление задачаминиже базового приоритета процесса, его породившего, до двух уровней выше этогоприоритета, как показано на рис.
2.4. Базовый приоритет процесса определяет, скольсильно могут различаться приоритеты потоков этого процесса и как они соотносятся с приоритетами потоков других процессов. Поток наследует этот базовыйприоритет и может изменять его так, чтобы он стал немного больше или немногоменьше. В результате получается приоритет планирования, с которым поток и начинает исполняться. В процессе исполнения потока его приоритет может отклоняться от базового.А151413121110987654321ПриоритетДиапазонзначенийдинамическогоприоритетапотокаБазовый приоритетпроцессаБазовый приоритетпотокаРис. 2.4.
Схема динамического изменения приоритетов в Windows NT/2000/XPНа рисунке также показан динамический приоритет потока, нижней границей которого является базовый приоритет потока, а верхняя зависит от вида работ, исполняемых потоком. Например, если поток обрабатывает текущие результаты операций ввода пользователем своих данных, диспетчер задач Windows поднимаетего динамический приоритет; если же он выполняет вычисления, то диспетчер задач постепенно снижает его приоритет до базового. Снижая приоритет одной задачи и поднимая приоритет другой, подсистемы могут управлять относительнойприоритетностью потоков внутри процесса.Для определения порядка выполнения потоков диспетчер задач использует систему приоритетов, направляя на выполнение задачи с высоким приоритетом раньшезадач с низким приоритетом.
Система прекращает исполнение, или вытесняет(preempts), текущий поток, если становится готовым к выполнению другой потокс более высоким приоритетом.Имеется группа очередей — по одной для каждого приоритета. В операционныхсистемах Windows NT/2000/XP используется один и тот же диспетчер задач. Онподдерживает 32 уровня приоритета. Задачи делятся на два класса: реального времени и переменного приоритета.