Обработка прерываний. Приоритеты прерываний
При обработке прерывания нужно выполнить следующую последовательность действий:
1) восприятие запроса на прерывание;
2) запоминание состояния прерванного процесса (значение счетчика команд, содержимое регистров общего назначения, режим работы ЦП и т.д.);
3) передача управления программе обработки прерываний, для чего в счетчик команд заносится адрес, уникальный для каждого типа прерывания;
4) обработка прерывания;
5) восстановление нормальной работы.
В большинстве ЭВМ этапы 1-3 реализуется аппаратно, а этапы 4-5 - операционной системой.
Рассмотрим изменения состояний центрального процессора, связанные с возникновением и обработкой прерываний (рис.7). ЦП может функционировать в одном из четырех независимых состояний: P1 – выполнение прикладных программ, P2 – обработка прерываний, P3 – анализ прерываний, P4 – обработка прерываний от схем контроля машины. В состоянии P1 выполняются программы пользователя, выполнение любого прерывания допустимо. В состоянии P2 выполняется программа соответствующего обработчика прерываний, так же как и в предыдущем состоянии допустимо любое прерывание. В состоянии P3 система определяет тип прерывания и соответствующую программу его обработки. Переключение в состояние P3 из состояний P1 и P2 происходит всегда автоматически при возникновении любого прерывания, кроме прерываний от схем контроля машины. Переключение ЦП из состояния P3 в состояние P1 или P2 происходит по командам управления. В состоянии P3 все прерывания, кроме прерываний от схем контроля, запрещены. Процессор автоматически переключается в состояние P4 из любого состояния (P1, P2, P3) при появлении прерывания от схем контроля машины. Из состояния P4 нельзя вернуться ни в какое другое состояние без принятия мер по устранению сбойной ситуации.
В зависимости от характера прерываний можно выделить пять уровней:
· прерывания от систем контроля и диагностики, связанные с неисправностями в аппаратуре;
· прерывание при обращении к ОС с целью получения каких-либо услуг;
· программные или внутренние прерывания, связанные с ошибками в ЦП при выполнении программы;
· внешние прерывания, обусловленные прерыванием программы оператором, по сигналу из линии связи и т.д.;
· прерывания от устройств ввода-вывода, инициированные внешними процессами.
Для каждого уровня прерываний в ОС имеются системные программы обработки прерываний. Нередко поступает сразу несколько запросов на прерывания, при этом они выстраиваются в очередь в соответствии со своими приоритетами. Порядок поступления запросов строго определен:
1) прерывания от схем контроля;
2) программные прерывания или прерывания при обращении к ОС (не могут появляться одновременно);
3) внешние прерывания;
4) прерывания от устройств ввода-вывода.
Обработка прерываний происходит в порядке, обратном его поступлению и соответствует их важности: ввод-вывод, внешние, программные и обращения к ОС. Прерывания от схем контроля идут вне очереди и блокируют обработку всех других прерываний.
Прерывания производятся всегда после того, как выполнение текущей команды закончилось, а выполнение следующей не началось. При машинных сбоях этот порядок может быть нарушен.
Прерывания поступают на обработку, если процессор не замаскирован по отношению к данному типу прерываний. Маскирование – это запрет на прерывания. Если прерывания замаскировано и поступил запрос на него, то он либо ждет, пока сможет быть воспринят, либо теряется. Замаскированными могут быть прерывания от устройств ввода-вывода, внешние прерывания, часть программных прерываний и прерывания от схем контроля.
Замаскированные прерывания от устройств ввода-вывода и внешних прерываний хранятся до тех пор, пока ЦП не сможет их воспринять, а замаскированные программные прерывания от схем контроля теряются.
Информация, необходимая для обработки прерываний, запоминается в специальной области памяти в виде регистра и слова-состояния программы (ССП). Регистр прерываний представляет собой слово, каждый бит которого соответствует единственной причине прерывания.
Слово состояния программы хранит информацию о состоянии процессора для последующего анализа, восстановления нормального продолжения прерванной программы.