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

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

Хотя существует несколько различных способов обработки прерывания, следующая последовательность действий присуща большинству ЭВМ.

1.Некоторую фиксированную ячейку заносятся характеристики произошедшего прерывания.

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

3.В счетчик команд заносится фиксированный адрес, который, как правило, является уникальным для каждого типа прерывания.

4.Обрабатывается прерывание.

5.Возобновляется нормальная работа.

Шаги 1-3 обычно реализуются аппаратной частью ЭВМ, а шаги 4 и 5-операционной системой.

Прерывания обрабатываются программой обработки прерываний. Ее первым действием обычно является запоминание той части состояния процесса, которая еще не была запомнена аппаратной частью ЭВМ. В некоторых ЭВМ предусматривается автоматическое запоминание довольно большого объема информации в специально отведенной области оперативной памяти. Например, с помощью технических средств можно запомнить только счетчик команд, а на программу обработки прерывания может быть возложено сохранение содержимого регистров. Далее программа обработки прерывания должна идентифицировать поступившее прерывание. В некоторой степени необходимая информация определяется самим фактом передачи управления на шаге 3 некоторой части программы обработки прерывания. Так, можно идентифицировать, например, прерывания от ввода/вывода или обращения к супервизору. В первом случае программа обработки прерывания должна запрашивать биты состояния ввода/вывода, установленные аппаратными средствами на шаге 1; в последнем же она анализирует код, определяющий действия, подлежащие выполнению супервизором.

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

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

Некоторые действия по обработке прерывания должны выполняться немедленно. Сюда входит запоминание состояния процесса, по крайней мере, частичное выяснение типа прерывания, и такие действия, как обработка программных ошибок и инициирование обслуживания устройств, критичных ко времени обслуживания. Чтобы избежать задержек, вызываемых загрузкой с внешней памяти требуемых частей программы обработки прерываний, последние должны находиться в исполняемой памяти как часть ядра операционной системы. Если общий размер программы обработки прерывания тактов, что ее неразумно хранить целиком в исполняемой памяти, то можно разбить ее на две части; резидентную программу обработки первого уровня и нерезидентную программу обработки второго уровня (в терминах IBM). Иногда удобно разбить каждую часть на отдельные программы обработки прерываний разных типов.

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

Далее...

   Обложка   Учебник   Экзамен   Глоссарий   Информация 
Hosted by uCoz