Последовательность действий при выполнении запроса прерывания
Аппаратные и программные прерывания
Прерывания делятся на аппаратные и программные
Аппаратныепрерывания используются для организации взаимодействия с внешними устройствами. Запросы аппаратных прерываний поступают на специальные входы микропроцессора. Они бывают:
- маскируемые, которые могут быть замаскированы программными средствами компьютера;
- немаскируемые, запрос от которых таким образом замаскирован быть не может.
Программныепрерывания вызываются следующими ситуациями:
- особый случай, возникший при выполнении команды и препятствующий нормальному продолжению программы (переполнение, нарушение защиты памяти, отсутствие нужной страницы в оперативной памяти и т.п.);
- наличие в программе специальной команды прерывания INT n, используемой обычно программистом при обращениях к специальным функциям операционной системы для ввода-вывода информации.
Каждому запросу прерывания в компьютере присваивается свой номер (тип прерывания), используемый для определения адреса обработчика прерывания.
При поступлении запроса прерывания компьютер выполняет следующую последовательность действий:
- определение наиболее приоритетного незамаскированного запроса на прерывание (если одновременно поступило несколько запросов);
- определение типа выбранного запроса;
- сохранение текущего состояния счетчика команд и регистра флагов;
- определение адреса обработчика прерывания по типу прерывания и передача управления первой команде этого обработчика;
- выполнение программы - обработчика прерывания;
- восстановление сохраненных значений счетчика команд и регистра флагов прерванной программы;
- продолжение выполнения прерванной программы.
Этапы 1-4 выполняются аппаратными средствами ЭВМ автоматически при появлении запроса прерывания. Этап 6 также выполняется аппаратно по команде возврата из обработчика прерывания.
Задача программиста - составить программу - обработчик прерывания, которая выполняла бы действия, связанные с появлением запроса данного типа, и поместить адрес начала этой программы в специальной таблице адресов прерываний. Программа-обработчик, как правило, должна начинаться с сохранения состояния тех регистров процессора, которые будут ею изменяться, и заканчиваться восстановлением состояния этих регистров. Программа-обработчик должна завершаться специальной командой, указывающей процессору на необходимость возврата в прерванную программу.