Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 5
Текст из файла (страница 5)
Примерами являются следующие запросы на прерывания:20Глава 1. Основные понятияQ при нарушении адресации (в адресной части выполняемой команды указан запрещенный или несуществующий адрес, обращение к отсутствующему сегментуили странице при организации механизмов виртуальной памяти);•при наличии в поле кода операции незадействованной двоичной комбинации;•при делении на ноль;Q вследствие переполнения или исчезновения порядка;Q от средств контроля (например, вследствие обнаружения ошибки четности,ошибок в работе различных устройств).ИсполняемаяпрограммаОтключениепрерываний,сохранениеконтекста прерваннойпрограммы, установкарежима работы системыпрерыванийСобственно телопрограммы обработкипрерыванияВосстановлениеконтекста прерваннойранее программы,установка прежнегорежима работысистемы прерыванийРис.
1.2. Обработка прерыванияМогут еще существовать прерывания в связи с попыткой выполнить команду, которая сейчас запрещена. Во многих компьютерах часть команд должна выполнятьсятолько кодом самой операционной системы, но не прикладными программами.
Этоделается с целью повышения защищенности выполняемых на компьютере вычислений. Соответственно в аппаратуре предусмотрены различные режимы работы,и пользовательские программы выполняются в режиме, в котором некоторое под-21Прерываниямножество команд, называемых привилегированными, не исполняется. К привилегированным командам помимо команд ввода-вывода относятся и команды переключения режима работа центрального процессора, и команды инициализациинекоторых системных регистров процессора. При попытке использовать команду,запрещенную в данном режиме, происходит внутреннее прерывание, и управление передается самой операционной системе.Наконец, существуют собственно программные прерывания. Эти прерывания происходят по соответствующей команде прерывания, то есть по этой команде процессор осуществляет практически те же действия, что и при обычных внутреннихпрерываниях.
Этот механизм был специально введен для того, чтобы переключение на системные программные модули происходило не просто как переход наподпрограмму, а точно таким же образом, как и обычное прерывание. Этим, прежде всего, обеспечивается автоматическое переключение процессора в привилегированный режим с возможностью исполнения любых команд.Сигналы, вызывающие прерывания, формируются вне процессора или в самомпроцессоре, они могут возникать одновременно. Выбор одного из них для обработки осуществляется на основе приоритетов, приписанных каждому типу прерывания.
Так, со всей очевидностью, прерывания от схем контроля процессора должны обладать наивысшим приоритетом (действительно, если аппаратура работаетнеправильно, то не имеет смысла продолжать обработку информации). На рис. 1.3изображен обычный порядок (приоритеты) обработки прерываний в зависимостиот типа прерываний. Учет приоритета может быть встроен в технические средства,а также определяться операционной системой, то есть кроме аппаратно реализованных приоритетов прерывания большинство вычислительных машин и комплексов допускают программно-аппаратное управление порядком обработки сигналов прерывания.
Второй способ, дополняя первый, позволяет применять различныедисциплины обслуживания прерываний.Средства контроля процессораСистемный таймерМагнитные дискиВнешние устройства < Сетевое оборудованиеТерминалыммные прерыванияРис. 1.3. Распределение прерываний по уровням приоритетаНаличие сигнала прерывания не обязательно должно вызывать прерывание исполняющейся программы.
Процессор может обладать средствами защиты от прерываний: отключение системы прерываний, маскирование (запрет) отдельных сиг-22Глава 1. Основные понятияналов прерывания. Программное управление этими средствами (существуют специальные команды для управления работой системы прерываний) позволяет операционной системе регулировать обработку сигналов прерывания, заставляя процессор обрабатывать их сразу по приходу; откладывать обработку на некотороевремя; полностью игнорировать прерывания. Обычно операция прерывания выполняется только после завершения выполнения текущей команды.
Посколькусигналы прерывания возникают в произвольные моменты времени, то на моментпрерывания может существовать несколько сигналов прерывания, которые могутбыть обработаны только последовательно. Чтобы обработать сигналы прерыванияв разумном порядке, им (как уже отмечалось) присваиваются приоритеты. Сигналс более высоким приоритетом обрабатывается в первую очередь, обработка остальных сигналов прерывания откладывается.Программное управление специальными регистрами маски (маскирование сигналов прерывания) позволяет реализовать различные дисциплины обслуживания.•С относительными приоритетами, то есть обслуживание не прерывается дажепри наличии запросов с более высокими приоритетами. После окончания обслуживания данного запроса обслуживается запрос с наивысшим приоритетом.Для организации такой дисциплины необходимо в программе обслуживанияданного запроса наложить маски на все остальные сигналы прерывания илипросто отключить систему прерываний.О С абсолютными приоритетами, то есть всегда обслуживается прерывание снаивысшим приоритетом.
Для реализации этого режима необходимо на времяобработки прерывания замаскировать все запросы с более низким приоритетом. При этом возможно многоуровневое прерывание, то есть прерывание программ обработки прерываний. Число уровней прерывания в этом режиме изменяется И зависит от приоритета запроса.•По принципу стека, или, как иногда говорят, по дисциплине LCFS (Last ComeFirst Served — последним пришел, первым обслужен), то есть запросы с болеенизким приоритетом могут прерывать обработку прерывания с более высокимприоритетом.
Дли этого необходимо не накладывать маску ни на один из сигналов прерывания и не выключать систему прерываний.Следует особо отметить, что для правильной реализации последних двух дисциплин нужно обеспечить полное маскирование системы прерываний при выполнении шагов 1-4 и 6-7. Это необходимо для того, чтобы не потерять запрос и правильно его обслужить.
Многоуровневое прерывание должно происходить на этапесобственно обработки прерывания, а не на этапе перехода с одного процесса вычислений на другой.Управление ходом выполнения задач со стороны операционной системы заключается в организации реакций на прерывания, в организации обмена информацией(данными и программами), в предоставлении необходимых ресурсов, в динамикевыполнения задачи и в организации сервиса.
Причины прерываний определяетоперационная система (модуль, который называют супервизором прерываний), онаже и выполняет действия, необходимые при данном прерывании и в данной ситуации. Поэтому в состав любой операционной системы реального времени преждеПрерывания23всего входят программы управления системой прерываний, контроля состоянийзадач и событий, синхронизации задач, средства распределения памяти и управления ею, а уже потом средства организации данных (с помощью файловых системи т.
д. Следует однако заметить, что современная операционная система реальноговремени должна вносить в аппаратно-программный комплекс нечто большее, нежели просто обеспечение быстрой реакции на прерывания.Как мы уже знаем, при появлении запроса на прерывание система прерыванийидентифицирует сигнал и, если прерывания разрешены, то управление передается на соответствующую подпрограмму обработки. Из рис. 1.2 видно, что в подпрограмме обработки прерывания имеется две служебные секции.
Это — перваясекция, в которой осуществляется сохранение контекста прерываемых вычислений, который не смог быть сохранен на шаге 2, и последняя, заключительная секция, в которой, наоборот, осуществляется восстановление контекста. Для того чтобы система прерываний не среагировала повторно на сигнал запроса на прерывание,она обычно автоматически «закрывает» (отключает) прерывания, поэтому необходимо потом в подпрограмме обработки прерываний вновь включать систему прерываний. В соответствии с рассмотренными режимами обработки прерываний(с относительными и абсолютными приоритетами и по правилу LCFS) установкаэтих режимов осуществляется в конце первой секции подпрограммы обработки.Таким образом, на время выполнения центральной секции (в случае работы в режимах с абсолютными приоритетами и по дисциплине LCFS) прерывания разрешены.
На время работы заключительной секции подпрограммы обработки система прерываний вновь должна быть отключена и после восстановления контекстаопять включена. Поскольку эти действия необходимо выполнять практическив каждой подпрограмме обработки прерываний, во многих операционных системах первые секции подпрограмм обработки прерываний выделяются в уже упоминавшийся специальный системный программный модуль, называемый супервизором прерываний.Супервизор прерываний прежде всего сохраняет в дескрипторе текущей задачи рабочие регистры процессора, определяющие контекст прерываемого вычислительного процесса. Далее он определяет ту подпрограмму, которая должна выполнитьдействия, связанные с обслуживанием настоящего (текущего) запроса на прерывание.
Наконец, перед тем, как передать управление на эту подпрограмму, супервизор прерываний устанавливает необходимый режим обработки прерывания.После выполнения подпрограммы обработки прерывания управление вновь передается ядру операционной системы. На этот раз уже на тот модуль, который занимается диспетчеризацией задач (см. раздел «Планирование и диспетчеризацияпроцессов и задач» в главе 2). И уже диспетчер задач, в свою очередь, в соответствии с принятой дисциплиной распределения процессорного времени (междувыполняющимися вычислительными процессами) восстановит контекст той задачи, которой будет решено выделить процессор.