Сделай Сам Свою Работу на 5

Блок управления процессом

 

Для того, чтобы управлять процессом, операционная система должна знать атрибуты процесса. Набор атрибутов, характеризующих поведение процесса, объединен в блок управления процессом (PCB - Process Control Block). По сути дела, блок управления процессом является центральным пунктом, в котором операционная система может сосредоточить информацию о процессе. Эта информация в общем случае может быть разделена на три категории:

- информация для идентификации процесса;

- информация о состоянии процессора;

- информация для управления процессом.

С целью идентификации каждому процессу назначается уникальный числовой идентификатор. Этот идентификатор может быть просто индексом в списке процессов, создаваемом операционной системой (см. п.4.1.1). Когда процессам порождают другие процессы, идентификаторы используются для указания родителя и потомков каждого процесса. Кроме того, процессу может быть назначен идентификатор пользователя, загружающего данный процесс.

Информация о состоянии процессора представляет собой данные, заносимые в регистры процессора. К таким регистрам относятся следующие:

- регистры, доступные пользователю, управляемые программами и предназначенные для временного хранения данных; их количество колеблется от 8 до 32;

- счетчик команд (PC - Program Counter), содержащий адрес команды, следующей за выполняемой;

- специализированные регистры, предназначенные д­ля некоторой синтетической информации, называемые словом состояния процессора или словом состояния программы (PSW - Program Status Word );

- регистры стека, содержащие указатели вершины и базы стека выполнения, который используется операционной системой для управления исполнением программы и хранения параметров. Такой стек существует для каждого процесса.

Информация для управления процессом включает в себя :

- текущее состояние процесса;

- приоритет процесса;

- указатели выделенных процессу ресурсов;

- указатели памяти процесса (включая таблицу страниц и(или) таблицу сегментов в зависимости от используемого метода управления памятью).



Поскольку при переключении центрального процессора с процесса на процесс операционная система должна иметь возможность быстро выполнять операции с различными PCB, во многих вычислительных машинах предусматривается специальный аппаратный регистр, который всегда указывает на PCB текущего выполняемого процесса.

 

Планирование процессов

 

Управление процессами связано с обращениями к очередям ожидания - структурам данных для хранения списка объектов, подлежащих обработке. Когда процесс поступает в систему, он помещается в очередь входных заданий. Процессы, размещенные в оперативной памяти и находящиеся в состоянии готовый к исполнению, объединены в очередь готовых к выполнению процессов, представляющую собой список с использованием указателей. В управляющей части такой очереди расположены указатели на первый и последний блоки управления процессами, входящие в нее. Каждый блок управления процессом (кроме последнего) имеет поле указателя, которое содержит ссылку на следующий процесс в очереди готовых к выполнению процессов. Список процессов, ожидающих соответствующего устройства ввода-вывода, представляет собой очередь устройства. Каждое устройство ввода-вывода имеет свою собственную очередь.

Процесс переходит из одной очереди в другую в течение всего времени своего существования. Выбор процесса пользователя для выполнения называется планированием процесса. Он осуществляется программой операционной системы - планировщиком. Принято различать планировщик верхнего уровня и планировщик нижнего уровня. Планировщик верхнего уровня (иногда его называют планировщик заданий) определяет совокупность задач, выполняемых системой. Он выбирает процессы в очереди входных заданий и размещает их в очереди готовых к выполнению (очереди активных процессов). Планировщик нижнего уровня определяет, какому процессу из очереди готовых к выполнению будет предоставлен процессор на ближайший период времени. Процедура выделения процессора готовому процессу носит название диспетчеризация, а сам планировщик нижнего уровня поэтому называют диспетчером.

Подобная двухуровневая система планирования в мультипрограммной системе, приведенная на рис.4.3, вводится в целях ограничения уровня мультипрограммирования, т.е. числа процессов, между которыми происходит разделение центрального процессора и других системных ресурсов. Это необходимо для поддержания эффективной работы мультипрограммной системы. Если система пытается выполнять одновременно слишком много процессов, перекрытие при управлении ресурсами становится слишком большим, а количество доступных каждому процессу ресурсов - слишком малым. В результате производительность системы снижается.

 

 

Рис. 4.3. Двухуровневая система планирования

 

В приведенной выше схеме планировщик заданий используется в качестве инструмента для поддержания требуемого уровня мультипрограммирования. Однако этот идеальный уровень мож­ет меняться в зависимости от характера выполняющихся процессов. Рассмотрим, например, систему, в которой для управления памятью применяется стратегия размещения страниц по запросу. Количество процессов, одновременно использующих реальную память, по существу, не ограничено. Выполняться может любой процесс, имеющий по крайней мере одну страницу. Однако, когда в памяти у процесса отсутствует некоторое критическое число страниц, начинается пробуксовка, и от этого страдает производительность всей системы. К сожалению, трудно заранее определить то количество выделяемых процессу страниц, которое позволит избежать пробуксовки. Вдобавок в течение выполнения программы оно может сильно меняться, поэтому во время работы системы может меняться и требуемый уровень мультипрограммирования.

Если входная очередь не пуста, уровень мультипрограммирования достаточно просто можно увеличить, обратившись к планировщику заданий. Труднее бывает его уменьшить, например ­для того, чтобы остановить пробуксовку. Это обычно достигается при помощи процедуры трехуровневого планирования процессов, которая показана на рис.4.4.

Планировщик заданий и планировщик процессов (т. е. диспетчер) работают, как и ранее. Однако существует также планировщик промежуточного уровня, управляющий производительностью системы и, если требуется, регулирующий уровень мультипрограммирования. Если он слишком высок, промежуточный планировщик понижает его, приостанавливая или свертывая один или несколько процессов. Если уровень мультипрограммирования слишком низок,

 

 

Рис. 4.4. Трехуровневая система планирования

 

промежуточный планировщик возобновляет работу приостановленных процессов или обращается к планировщику заданий для того, чтобы активизировать новые. Промежуточные планировщики могут использоваться и для регулирования приоритета диспетчеризации активных процессов, основываясь на наблюдении за ними в процессе выполнения. Вся система планирования обычно базируется на системе приоритетов, предназначенных для достижения определенных целей. Первой целью может быть, например, получение максимальной пропускной способности системы, т. е. выполнение наибольшей вычислительной работы за кратчайшее время. Ясно, что для этого требуется эффективное использование всех системных ресурсов. Другая задача - получение наименьшего среднего времени прохождения, т. е. времени между загрузкой процесса пользователем и завершением его выполнения. С системами разделения времени связана задача минимизации предполагаемого времени ответа (времени между нажатием клавиши ENTER на терминале и получением на это ответа системы).

К сожалению, высокая пропускная способность и малое среднее время прохождения и время ответа часто несовместимы. Так, если в системе разделения времени, работающей с большим числом терминалов пользователей, для обеспечения лучшего времени ответа быстрее переключать управление между различными терминалами путем уменьшения кванта времени, выделяемого каждому процессу, то это приведет к увеличению частоты операций контекстного переключения. Последнее означает, что накладные расходы операционной системы будут выше, а время, предоставляемое процессам пользователей, - меньше, поэтому пропускная способность в целом уменьшится.

Основное отличие между планированием и диспетчеризацией состоит в то, что планирование для любого процесса выполняется только один раз, в то время как процессор может выделяться процессу многократно. Поскольку диспетчеризация процессов тесно связана с управлением процессором, она будет подробно рассмотрена в следующей главе.

 

Обработка прерываний

 

Для правильного функционирования системы необходимо взаимодействие между диспетчером, выполняющимся процессом и подсистемой ввода-вывода. Обычно истечение кванта времени или завершение ввода-вывода выявляется в результате прерывания.

Прерывание (interrupt) представляет собой перестановку контекста процесса, вызванную внешней по отношению к выполняемой инструкции причиной. Физически прерывание представляется сигналом, заставляющим процессор менять обычный порядок исполнения потока команд.

Рис.4.5 дает представление о последовательности событий, происходящих в ответ на прерывание.

 

 

 

Рис. 4.5. Основная концепция обработки прерываний

 

Предположим, что в момент поступления от некоторого источника сигнала прерывания программа А находится в состоянии исполнения. В результате управление автоматически передается на блок обработки прерываний, который обычно является частью операционной системы. Этот блок предназначен для выполнения некоторых действий в ответ на условие, вызвавшее прерывание. После завершения обработки управление снова передается в ту точку программы А, где ее выполнение было прервано.

В описанной последовательности событий возникновение и обработка прерывания могут быть совершенно не связаны с программой А. Например, оно может быть вызвано завершением операции ввода-вывода, выданной другой программой. В общем случае невозможно предсказать, когда и по какой причине программа А будет прервана. Другими словами, по отношению к ней прерывания возникают асинхронно. За сохранение текущего состояния компьютера в момент прерывания программы А, а также за его восстановление, когда программа А будет продолжена, отвечает операционная система. Благодаря этому в случае прерывания ничто, за исключением времени, не влияет на выполнение программы А.

Прерывания распадаются на два основных класса. Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса. Примерами являются прерывания от таймера и от подсистемы ввода-вывода. Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями. В качестве примеров можно привести попытку деления на нуль, операции с плавающей запятой, вызывающие переполнение или исчезновение порядка. Кроме того, внутренние прерывания происходят при обращении к защищенным или несуществующим ячейкам памяти, а также к отсутствующему сегменту или странице.

Указанные классы прерываний в свою очередь могут подразделяться на типы. Количество типов прерываний различно для разных классов компьютеров, но наиболее часто используются следующие четыре типа прерываний.

1. SVC-прерывание возникает при выполнении ЦП команды вызова супервизора (SVC - SuperVisor Call), используемой для вызова функций операционной системы. Механизм SVC помогает защитить операционную систему от пользователей. Пользователю не разрешается самому произвольно входить в операционную систему - он должен запросить требуемую ему услугу при помощи команды SVC. Благодаря этому операционная система всегда знает обо всех запросах пользователя и может не выполнять некоторые из них, если данный пользователь не имеет соответствующих полномочий.

2. Программное прерывание возникает при появлении в процессе работы программы некоторой ситуации, такой как деление на нуль, попытка выполнить неправильную машинную команду, арифметическое переполнение, отсутствие сегмента или страницы, выход за границу сегмента.

3. Прерывание по таймеру вызывается интервальным таймером ЦП. Этот таймер содержит регистр, которому может быть присвоено определенное начальное значение, которое автоматически уменьшается на 1 после использования каждой миллисекунды времени ЦП. Когда это значение становится равным нулю, происходит прерывание по таймеру. Как отмечалось ранее, подобный интервальный таймер используется операционной системой для определения времени, в течение которого процесс может оставаться в состоянии исполнения в ЦП.

4. Прерывание по вводу-выводу вызывается каналами или устройствами ввода-вывода. Причиной многих таких прерываний является нормальное завершение некоторой операции ввода (вывода), однако они могут также оповещать о возникновении различных ошибочных ситуаций.

Для обработки каждого из этих различных типов прерываний в составе операционной системы предусмотрены программы, называемые обработчиками прерываний (IH - Interrupt Handler). Кроме того, как показано на рис.4.6, в оперативной памяти для каждого типа прерываний имеется соответствующая ему рабочая область прерываний. Когда происходит прерывание (например, по таймеру), операционная система запоминает состояние прерванного процесса в соответствующей рабочей области. Затем из двух первых слов области заранее занесенные туда значения загружаются в слово состояния SW и счетчик команд PC. Загрузка счетчика команд новым значением адреса автоматически вызывает передачу управления на соответствующую команду. Этот адрес, заранее сохраненный в рабочей области прерывания, представляет собой начальный адрес стандартной программы обработки прерываний по таймеру. Загрузка слова состояния SW также вызывает определенные изменения в состоянии ЦП (что будет рассмотрено ниже).

После выполнения в ответ на запрос на прерывание требуемого действия стандартная программа обработки прерываний выполняет команду загрузки состояния процессора (LPS - Load Processor Status), в результате чего управление передается прерванной программе (рис.4.7). Команда LPS вызывает загрузку сохраненного содержимого SW, PC и других регистров из соответствующих слов рабочей области, начиная с адреса, указанного в команде. Это приводит к восстановлению содержимого регистров и состояния ЦП, которые были в момент прерывания. Управление затем передается на команду, перед выполнением которой произошло прерывание. Сохранение и восстановление состояний ЦП и содержимого регистров представляют собой операцию контекстного переключения, рассмотренную ранее.

 

.

 

 

Рис. 4.6. Операция контекстного переключения,

вызванная прерыванием по таймеру

 

 

Рис. 4.7. Операция контекстного переключения,

вызванная командой LPS

Слово состояния SW содержит часть информации, необходимой для обработки прерываний. Большинство ЭВМ имеет аналогичный регистр, называемый словом состояния программы (PSW - Program Status Word) или словом состояния процессора, разряды которого соответствуют характеристикам состояния устройства или процесса. В компьютерах разного класса этот регистр имеет разное содержимое. Один из возможных вариантов назначений разрядов слова состояния приведен на рис.4.8.

 

 

Разряды Имя поля Использование
    2 - 5 6 - 7 8 - 11 12 - 15 16 - 23 MODE   IDLE   ID CC MASK   ICODE 0 = режим пользователя 1 = режим супервизора 0 = активен 1 = пассивен Идентификатор процесса Код условия Маска прерывания Не используется Код прерываний  

 

Рис. 4.8. Содержимое слова состояния

 

Первым битом (MODE) задается режим, в котором находится ЦП - пользовательский или супервизора. Обычные программы выполняются в пользовательском режиме (MODE=0). Когда происходит прерывание, новое загружаемое содержимое SW­ имеет МODЕ = 1, что автоматически переводит ЦП в режим супервизора. Тем самым становится возможным использование привилегированных команд.

Перед тем, как значение SW­ будет сохранено, в поле ICODE автоматически устанавливается значение, указывающее на причину прерывания. В случае SVC-прерываний ICODE присва­ивается значение, заданное пользователем командой SVC. Он определяет тип сервисного запроса. При программном прерывании в ICODE отражен тип вызвавшего его условия, например деление на нуль. При прерывании по вводу-выводу в ICODE дан номер канала, породивший прерывание.

В ID содержится 4-битовое значение, идентифицирующее текущую выполняемую программу.

Поле IDLE определяет, выпол­няет ли ЦП команды или простаивает.

В SW­ содержится также код состояния процесса СС (Condition Code). Сохранение SW автоматически спасает значение кода состояния прерванного процесса.

Оставшееся поле слова состояния (МАSK) используется для контроля за разрешением прерываний. Это требуется для того, чтобы избежать потери сохраненной ранее информации о состоянии процесса. Предположим, например, что произошло прерывание по вводу-выводу. Значения SW­, РС и других регистров будут сохранены в рабочей области прерывания вводавывода, а ЦП начнет выполнение обработчика прерываний по вводу-выводу. Если до конца обработки первого прерывания произойдет еще одно, снова будет иметь место контекстное переключение. Однако на этот раз в качестве содержимого регистров, сохраняемого в рабочей области, окажутся значения, используемые обработчиком прерываний. Значения же, сохраненные при первом прерывании, будут утрачены, поэтому вернуть управление программе пользователя, которая в тот момент выполнялась, будет нельзя.

Чтобы избежать этого, нужно не допустить наступления прерываний определенного типа, пока первое из них не будет обработано. Это достигается использованием поля МАSК слова состояния. В МАSК каждый бит соответствует некоторому типу прерываний. Если какой-то бит установлен в 1, то прерывания соответствующего типа разрешены, если в 0, то запрещены. В последнем случае говорят, что они маскированы (­часто их также называют запрещенными или закрытыми). Однако маскированные прерывания не теряются, потому что сигнал, вызвавший прерывание, сохраняется аппаратурой. Временно задержанное таким способом прерывание называется отложенным. Когда, вследствие того, что МАSК сброшена, прерывания соответствующего типа вновь разрешаются, сигнал опознается и происходит прерывание.

Каждому типу прерываний присвоен определенный приоритет прерываний. Наивысший приоритет имеют SVC-прерывания (тип 1), затем идут программные (тип 2) и т.д. Поле МАSK в слове состояния устанавливается в соответствии с классом прерывания так, чтобы все прерывания с равным или более низким приоритетом были запрещены, а с более высоким - разрешены. Например, слово состояния, загруженное в результате программного прерывания, будет иметь биты МАSK, соответствующие прерываниям - программным, по таймеру и по вводу-выводу, установленными в 0; эти типы прерываний будут запрещены. Бит в МАSK для SVC-прерываний будет установлен в 1, поэтому они будут разрешены. Когда прерывания по завершении работы обработчика прерываний открываются, среди ожидающих может оказаться более одного типа прерываний (например, по таймеру и по вводу-выводу). В этом случае первым опознается то, что имеет более высокий приоритет.

­ Если используется такая система приоритетов, то программа обработки прерываний сама может быть прервана. Каким образом происходит вложенное прерывание, показано на рис.4.9.

 

Рис. 4.9. Пример вложенного прерывания

 

По прерыванию по вводу-выводу состояние программы А, выполняющейся в этот момент на ЦП, сохраняется, а управление передается обработчику прерываний по вводу-выводу. Во время его работы происходит новое прерывание - уже по таймеру, в результате чего управление передается обработчику прерываний по таймеру. По завершении обработки этого прерывания при помощи команды ­LPS из рабочей области прерывания по таймеру восстанавливается состояние ЦП. В результате управление снова передается обработчику прерываний по вводу-выводу. Так как опять загружено старое значение MASK, прерывания по таймеру, которые были запрещены, снова открываются. Однако прерывания по вводу-выводу по-прежнему остаются закрытыми. После завершения обработки прерывания при помощи уже другой LPS восстанавливается состояние ЦП, которое было в момент первого прерывания. Теперь все прерывания открыты, потому что в слове состояния, используемом программой А, все биты MASK установлены в 1.­



©2015- 2018 stydopedia.ru Все материалы защищены законодательством РФ.