Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 45
Текст из файла (страница 45)
Внутри системы этот интервал преобразуется в соответствующее ему количество тиков, так как именно тик является минимальной временной единицей, различаемой ядром. В Буэсещ Ъ' для обращения к будильнику реального времени применяется системный вызов а!апп. Задаваемый ему интервал времени должен выражаться в секундах. В систему 5Ъ'К4 был добавлен системный вызов йггэуэ, который обеспечивает таймерный интерфейс с высоким разрешением, позволяющим задавать временной интервал в микросекундах.
Этот вызов позволяет реализовать совместимость с В5Р посредством веВВюег (а также деВВтеп деЫтеойау и эетнтеойау) в виде библиотечных функций. Высокое разрешение будильников реального времени не предполагает высокой точности их работы. Предположим, что приложение использует будильник реального времени для воспроизведения звука по истечении 60 миллисекунд с момента запроса. После того как пройдет указанный промежуток времени, ядро пошлет сигнал 516АИМ вызывающему процессу. Однако процесс не сможет увидеть (а следовательно, и среагировать) на сигнал до тех пор, пока в очередной раз не будет назначен планировщиком на выполнение. Таким образом, перед началом обработки сигнала неизбежно возникает задержка, величина которой зависит от приоритета процесса и степени загруженности системы.
Таймеры высокого разрешения полезны при использовании их 192 Глава 5. Планирование процессов высокоприоритетными процессами, обладающими минимальными задержками при планировании. Но даже и эти процессы могут быть задержаны, если текуший процесс, выполняясь в режиме ядра, еше не достиг точки, с которой он может быть вытеснен. Более подробно описание таймеров реального времени см. в разделе 5.5.4. Виртуальные будильники и будильники профиля не имеют вышеизложенной проблемы, так как они не привязаны к реальному времени.
Точность этих будильников определяется другими факторами. Обработчик прерываний таймера измеряет число полных тиков работы текушего процесса, даже в том случае, если было использовано не целое количество тиков. Таким образом, измеряемый промежуток времени отражает количество прерываний таймера, произошедших в течение выполнения процесса. При большой продолжительности работы эта величина является достаточно точным индикатором. Однако для любого единичного будильника результат будет весьма неточен.
5.3. Цели, стоящие перед планировщиком Планировщик должен по возможности наиболее справедливо распределять процессорное время между всеми процессами системы. Естественно также и то, что при увеличении обшей загруженности системы каждый процесс получает меньшее количество процессорного времени и, следовательно, работает медленнее, чем на незагруженной системе. Планировщик должен следить за тем, чтобы система предоставляла приемлемую производительность каждому приложению при обшей занятости системы в рамках нормы.
Обычно операционная система предоставляет возможность одновременного выполнения нескольких приложений. Эти приложения можно весьма фривольно категоризировать по следующим классам, в зависимости от их требований к планированию и производительности работы: + Интерактивные приложения.
Приложения типа командных интерпретаторов, редакторов и программ с графическим пользовательским интерфейсом, постоянно взаимодействующих с пользователями. Большую часть времени такие приложения находятся в ожидании действий пользователя, таких как ввод с клавиатуры, либо манипуляций мышью. После получения ввода приложение должно быстро его обработать, иначе пользователь будет наблюдать «торможение» системы. Следовательно, системе необходимо уменьшать среднее время между действием пользователя и реакцией приложения на него, так, чтобы пользователь не заметил задержки. Приемлемая величина задержек реакции на ввод с клавиатуры или движения мыши составляет 50-150 миллисекунд.
+ Пакетные приложения. К ним относятся такие действия, как сборка программ или научные вычисления, то есть программы, не требуюшие взаимодействия с пользователем и часто выполняющиеся в фоновом 5.4. Планирование в традиционных системах ОЬйХ 193 режиме. Для таких задач мерой эффективности планирования является время завершения их работы при функционировании среди других процессов, сравниваемое со временем их выполнения как единственной задачи системы. + Приложения реального времени.
Это достаточно широкий класс приложений, для которых время часто является весьма критичным. Хотя на сегодняшний день существует множество различных видов приложений реального времени, обладающих отличными друг от друга наборами требований, между ними существует множество сходств. Обычно все они требуют упреждающего поведения планировщика, с гарантированными границами времени реакции. Например, приложение работы с видео может выводить фиксированное количество кадров в секунду (баташев рег зесопд, ~рз). Такое приложение может больше заботиться об уменьшении времени реакции системы, нежели просто запрашивать дополнительное процессорное время. Пользователи могут настраивать частоту кадров в диапазоне 10-30 1рз со средней частотой в 20 1рз.
На рабочей станции одновременно способны выполняться сразу несколько типов приложений. Планировщик должен пытаться сбалансировать требования каждого из них. Также он обязан следить за тем, чтобы функции ядра, такие как поддержка страничной памяти, обработка прерываний и управление процессами, могли работать именно тогда, когда это требуется. В хорошо сбалансированной системе все приложения должны продолжать выполнение. Ни одно приложение не должно влиять на продолжение выполнения остальных, кроме случая, когда пользователь принудительно укажет на это. Более того, система обязана постоянно находиться в состоянии получения и обработки интерактивного пользовательского ввода, в противном случае пользователь не будет иметь возможности управлять системой.
Выбор политики планирования оказывает важное влияние на способность системы удовлетворять требованиям различных типов приложений. Следующий раздел описывает традиционный вариант планировщика (ЗЧВЗ/4.3ВЯ)), который поддерживает только интерактивные и пакетные задания. Остальная часть пятой главы посвящена планировщикам современных систем У)ч1Х, поддерживающих приложения реального времени, 5.4. Планирование в традиционных системах 0Й!Х В этом разделе обсуждается традиционный алгоритм планирования, применяемый как в БЪ'КЗ, так и в 4.3ВЗП.
Эти ОС создавались как системы разделения времени, обладающие интерактивными средами для нескольких пользователей, которые могли одновременно запускать несколько пакетных 194 Глава б. Планирование процессов 5.4.1. Приоритеты процессов Приоритет процесса задается любым целым числом, лежащим в диапазоне от 0 до 127.
Чем меньше такое число, тем выше приоритет. Приоритеты от 0 до 49 зарезервироваиы для ядра, следовательно, прикладные процессы могут обладать приоритетом в диапазоне 50 — 127. Структура ргос содержит следую- шие поля, относящиеся к приоритетам: Текущий приоритет планирования Приоритет резгима задачи р рп р Отгрп р срв р п1се Результат последнего измерения использования процессора Фактор «любезности, устанавливаемый пользователем Поля р рп' и р цзгрп применяются для различных целей. Плаиировшик использует р рп для принятия решения о том, какой процесс направить иа вы- и интерактивных процессов. Цель политики планирования заключается в увеличении скорости реакции при интерактивном взаимодействии пользователя с системой, одновременно отслеживая протекание фоновых задач, защищая их от зависания из-за недостатка процессорного времени.
Механизм планирования в традиционных системах базируется иа приоритетах. Каждый процесс обладает приоритетом планирования, измеияюшимся с течением времени. Планировщик всегда выбирает процессы, обладающие более высоким приоритетом. Для диспетчеризации процессов с равным приоритетом применяется вытесняющее квантование времени. Изменение приоритетов процессов происходит динамически иа основе количества используемого ими процессорного времени. Если какой-либо из высокоприоритетных процессов будет готов к выполнению, планировщик вытеснит ради него текущий процесс даже в том случае, если тот ие израсходовал свой квант времени.
Традиционное ядро 1ЛЧ1Х является строго иевытесияюшим. Если процесс выполняется в режиме ядра (например, в течение исполнения системного вызова или прерывания), то ядро ие заставит такой процесс уступить процессор какому-либо высокоприоритетному процессу. Выполняющийся процесс может только добровольно освободить процессор в случае своего блокирования в ожидании ресурса, иначе ои может быть вытеснен при переходе в режим задачи. Реализация ядра иевытесияюшим решает множество проблем синхронизации, связанных с доступом нескольких процессов к одним и тем же структурам данных ядра (см.
раздел 2.5). Следующие подразделы посвящены описанию устройства и реализации планировщика в системе 4.ЗВЯКА. Вариант, применяемый в 5'тгКЗ, имеет лишь незначительные отличия во второстепенных деталях, таких как имена некоторых функций и переменных. 5.4. Планирование в традиционных системах 0(Ч)Х 195 полнение. Когда процесс находится в режиме задачи, значение его р рп' идентично р цзгрп'. Когда процесс просыпается после блокирования в системном вызове, его приоритет будет временно повышен для того, чтобы дать ему предпочтение для выполнения в режиме ядра, Следовательно, планировщик использует р изгрп' для хранения приоритета, который будет назначен процессу при возврате в режим задачи, а р рп' — для хранения временного приоритета для выполнения в режиме ядра.
Ядро системы связывает приоритет сна с событием или ожидаемым ресурсом, из-за которого процесс может заблокироваться. Приоритет сна является величиной, определяемой для ядра, и потому лежит в диапазоне 0 — 49. Например, значение приоритета сна для терминального ввода равно 28, в то время как для операций дискового ввода-вывода оно имеет значение 20. Когда замороженный процесс просыпается, ядро устанавливает значение его р рп', равное приоритету сна события или ресурса'. Поскольку приоритеты ядра выше, чем приоритеты режима задачи, такие процессы будут назначены на выполнение раньше, чем другие, функционирующие в режиме задачи. Такой подход позволяет системным вызовам быстро завершать свою работу, что является желательным, так как процессы во время выполнения вызова могут занимать некоторые ключевые ресурсы системы, не позволяя пользоваться ими другим.