А. Робачевский - Операционная система UNIX (1114671), страница 43
Текст из файла (страница 43)
UNIX SVR4 позволяет установить таймеры высокого разрешенияс помощью системного вызовадля которого время указывается вмикросекундах. С помощью этого вызова также достигается совместимостьс BSD, которая обеспечивается библиотечной функциейАна!логично, в BSD UNIX вызовреализован в виде библиотечнойфункции.Не следует, однако, заблуждаться насчет высокого разрешения таймеровреального времени. На самом деле их точность может быть довольно низ!кой. Допустим, что значение таймера реального времени, установленногокаким!либо процессом, достигло нуля. При этом ядро отправит этомупроцессу сигнал SIGALRM.
Однако процесс сможет получить и обработатьэтот сигнал, только когда он будет выбран планировщиком и поставлен навыполнение. В зависимости от приоритета процесса и текущей загрузкисистемы это может привести к существенным задержкам и, как следствие,к неточностям определения временного интервала. Таймеры реальноговремени высокого разрешения обладают достаточной точностью лишь длябольших интервалов времени или для высокоприоритетных процессов.Тем не менее и для таких процессов получение сигнала может быть задер!жано, если в текущий момент процесс выполняется в режиме ядра и неможет быть приостановлен.Два других типа таймера обладают более высокой точностью, поскольку неимеют отношения к реальному течению времени. Однако их точность длямалых временных интервалов может определяться следующим фактором.системы System V, например SCO UNIX, также имеют в своем распоряженииэтот системный вызов.www.books-shop.comПланирование выполнения процессовПри обработке таймера процессу засчитывается тик целиком, даже если,предположим, процесс выполнялся лишь часть тика.
Для временных ин!тервалов порядка тика это может внести значительную погрешность.Контекст процессаКаждый процесс UNIX имеет контекст, под которым понимается вся ин!формация, требуемая для описания процесса. Эта информация сохраняет!ся, когда выполнение процесса простанавливается, и восстанавливается,когда планировщик предоставляет процессу вычислительные ресурсы.Контекст процесса состоит из нескольких частей:Адресное пространство процесса в режиме задачи. Сюда входят код,данные и стек процесса, а также другие области, например, разде!ляемая память или код и данные динамических библиотек.Управляющая информация. Ядро использует две основные структурыданных для управления процессом —и user. Сюда же входятданные, необходимые для отображения виртуального адресного про!странства процесса в физическое.Окружение процесса.
Переменные окружения процесса представляютсобой строки пар вида:которые наследуются дочерним процессом от родительского и обыч!но хранятся в нижней части стека. Окружение процесса упоминалосьв предыдущих главах, там же были показаны функции, позволяющиеполучить или изменить переменные окружения.Аппаратный контекст. Сюда входят значения общих и ряда систем!ных регистров процессора.
К системным регистрам, в частности, от!носятся:• указатель инструкций, содержащий адрес следующей инструк!ции, которую необходимо выполнить;• указатель стека, содержащий адрес последнего элемента стека;• регистры плавающей точки;• регистры управления памятью, отвечающие за трансляцию вир!туального адреса процесса в физический.Переключение между процессами, необходимое для справедливого рас!пределения вычислительного ресурса, по существу выражается в переклю!чении контекста, когда контекст выполнявшегося процесса запоминается,и восстанавливается контекст процесса, выбранного планировщиком. Пе!реключение контекста является достаточно ресурсоемкой операцией.
По!мимо сохранения состояния регистров процесса, ядро вынуждено выпол!нить множество других действий. Например, длясистем ядруwww.books-shop.comГлава 3.управления процессаминеобходимо очистить кэш данных, инструкций или адресных трансляций,чтобы предотвратить некорректные обращения нового процесса. Поэтомузапущенный процесс сначала вынужден работать по существу без кэша,что также сказывается на производительности.Существуют четыре ситуации, при которых производится переключениеконтекста:1.
Текущий процесс переходит в состояние сна, ожидая недоступного ре!сурса.2. Текущий процесс завершает свое выполнение.После пересчета приоритетов в очереди на выполнение находится бо!лее высокоприоритетный процесс.4. Происходит пробуждение более высокоприоритетного процесса.Первые два случая соответствуют добровольному переключению контекстаи действия ядра в этом случае достаточно просты. Ядро вызывает процеду!ру переключения контекста из функций() илиТретий ичетвертый случаи переключения контекста происходят не по воле процес!са, который в это время выполняется в режиме ядра и поэтому не можетбыть немедленно приостановлен. В этой ситуации ядро устанавливает спе!циальный флагкоторый указывает, что в очереди находится болеевысокоприоритетный процесс, требующий предоставления вычислитель!ных ресурсов.
Перед переходом процесса из режима ядра в режим задачиядро проверяет этот флаг и, если он установлен, вызывает функцию пере!ключения контекста.Принципы планирования процессовТрадиционные алгоритмы планирования UNIX обеспечивают возможностьодновременного выполнения интерактивных и фоновых приложений. Та!ким образом, они хорошо подходят для систем общего назначения с не!сколькими подключенными пользователями, работающими с текстовымии графическими редакторами, компилирующими программы и выпол!вычислительные задачи. Эти алгоритмы обеспечиваютвремя реакции для интерактивных приложений, следя в то же время, что!бы фоновым громоздким задачам справедливо предоставлялись ресурсысистемы.
Современные системы поддерживают выполнение задач реаль!ного времени, однако в данном разделе мы остановимся на планированиисистемы разделения времени.Планирование процессов в UNIX основано на приоритете процесса. Пла!нировщик всегда выбирает процесс с наивысшим приоритетом. Приоритетпроцесса не является фиксированным и динамически изменяется систе!мой в зависимости от использования вычислительных ресурсов, времениожидания запуска и текущего состояния процесса.
Если процесс готов кwww.books-shop.comПланирование выполнения процессовзапуску и имеет наивысший приоритет, планировщик приостановитполнение текущего процесса (с более низким приоритетом), даже еслипоследний не "выработал" свой временной квант.Традиционно ядро U N I X является "непрерываемым"Этоозначает, что процесс, находящийся в режиме ядра (в результате систем!ного вызова или прерывания) и выполняющий системные инструкции,может быть прерван системой, а вычислительные ресурсы переданы друго!му, более высокоприоритетному процессу.
В этом состоянии выполняю!щийся процесс может освободить процессор "по собственномув результате недоступности какого!либо ресурса перейдя в состояние сна.В противном случае система может прервать выполнение процесса толькопри переходе из режима ядра в режим задачи. Такой подход значительноупрощает решение задач синхронизации и поддержания целостностиструктур данных ядра.Каждый процесс имеет два атрибута приоритета:наосновании которого происходит планирование, и заказанныйный приоритет, называемый nice number (или просто nice), который зада!ется при порождении процесса и влияет на текущий приоритет.Текущий приоритет варьируется в диапазоне от 0 (низкий приоритет) до127 (наивысший приоритет).
Процессы,в режиме задачи,имеют более низкий приоритет, чем в режиме ядра. Для режима задачиприоритет меняется в диапазонедля режима ядра —(систем!ный диапазон).Процессы, приоритеты которых лежат в диапазонеявляютсяпроцессами с фиксированным приоритетом, не изменяемым операцион!ной системой, и предназначены для поддержки приложений реальногоПроцессу, ожидающему недоступного в данный момент ресурса, системаопределяет значениевыбираемое ядром из диапазона сис!темных приоритетов и связанное с событием, вызвавшее это состояние.В табл. 3.3 приведены значения приоритетов сна для системUNIXи SCO UNIX5.0).
Заметим, что направление роста з н а ч е н и йприоритета для этих систем различно — в BSD UNIX большему значениюсоответствует более низкий приоритет.Схема нумерацииприоритетов различна для различных версий U N I X .более высокому значению текущего приоритета может соответствоватьтический приоритет планирования.между приоритетами режима ядра и задачитакже зависит от версии. Здесь мы привелив SCO U N I X ,кото!рой большему значениювысокийwww.books-shop.com224Глава 3.управления процессамиТаблица 3.3. Системные приоритеты снаПриоритет4.3BSD UNIXзагрузки в память сегмен% 0(свопинг/страничное замещение)10Ожидание индексного дескриптораОжидание20Ожидание буфера30Ожидание терминального вводаОжидание терминального выводаОжидание завершения выполненияОжидание события — низкоприоритетное со% 40стояние снаОжиданиеПриоритетSCO UNIX9588818075747366Когда процесс пробуждается, ядро устанавливает значение текущего при!оритета процесса равным приоритету сна.