[ Тематический план ] [  Система прерываний ] [ 1 ] [ 2 ]



Прерывания делятся на аппаратные и программные

Аппаратные прерывания используются для организации взаимодействия с внешними устройствами. Запросы аппаратных прерываний поступают на специальные входы микропроцессора. Они бывают:

  1. маскируемые , которые могут быть замаскированы программными средствами компьютера;
  2. немаскируемые , запрос от которых таким образом замаскирован быть не может.

Программные прерывания вызываются следующими ситуациями:

  1. особый случай, возникший при выполнении команды и препятствующий нормальному продолжению программы (переполнение, нарушение защиты памяти, отсутствие нужной страницы в оперативной памяти и т.п.);
  2. наличие в программе специальной команды прерывания INT n , используемой обычно программистом при обращениях к специальным функциям операционной системы для ввода-вывода информации.

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

Возможные источники прерываний:

Рис.3. Возможные источники прерываний.

Внешние прерывания

В микропроцессоре имеются два входа прерываний - маскируемого прерывания INT и немаскируемого прерывания NMI.

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

Если установлен сигнал на линии INT и установлен в 1 флажок разрешения прерывания IF, то после завершения выполнения текущей команды происходит прерывание и процессор выполняет следующие действия:
1) выдает контроллеру прерывания подтверждение прерывания;
2) считывает из контроллера прерывания код типа прерывания;
3) заносит в стек содержимое регистра флагов;
4) заносит в стек содержимое регистров IP и CS;
5) вызывает и выполняет процедуру прерывания;
6) извлекает из стека содержимое CS и IP;
7) извлекает из стека содержимое регистра флагов;
8) возвращается к выполнению следующей команды прерванной программы.

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

Если установлен сигнал на линии NMI, то после завершения выполнения текущей команды происходит прерывание и процессор выполняет следующие действия:

1) заносит в стек содержимое регистра флагов;
2) заносит в стек содержимое регистра IP и CS, запоминая тем самым точку возврата из процедуры прерывания;
3) вызывает и выполняет процедуру прерывания;
4) извлекает из стека содержимое CS и IP;
5) извлекает из стека содержимое регистра флагов;
6) возвращается к выполнению следующей команды.

Наибольшее время запаздывания реакции на внешние прерывания получается при выполнении команд умножения, деления и многобитного сдвига.

Внутренние прерывания

В процессоре 8086 предусмотрено несколько внутренних прерываний, генерируемых при выполнении программы. Команда INT n вызывает прерывание сразу после своего завершения. Тип прерывания n, закодированный программистом в команде, определяет вызываемую процедуру прерывания. Следовательно, эту команду можно использовать для отладки процедур прерываний, обслуживающих периферийные устройства.

Команда INTO генерирует прерывание типа 4 после своего завершения, если установлен флаг переполнения OF.

Процессор самостоятельно генерирует прерывание типа 0 сразу после выполнения команд деления DIV и IDIV, если имело место деление на 0.

Если установлен флаг пошаговой работы TF, процессор автоматически генерирует прерывание типа 1 после выполнения каждой команды. Пошаговый режим предназначен для отладки программ.

Внутренние прерывания характеризуются следующими свойствами:

1) Тип прерывания либо предопределен, либо содержится в коде команды.
2) Подтверждение прерывания не выдается.
3) Внутренние прерывания нельзя запретить, кроме прерываний пошаговой работы.
4) Любое внутреннее прерывание (за исключением прерывания пошаговой работы) имеет более высокий приоритет, чем внешние прерывания.

Если запрос NMI или INT появляется при выполнении команды, которая сама генерирует внутреннее прерывание (например, ошибка деления), оно обрабатывается первым.

По командам внутреннего прерывания процессор выполняет следующие действия:

1) заносит в стек содержимое регистра флагов;
2) заносит в стек содержимое регистра IP и CS;
3) вызывает и выполняет процедуру прерывания;
4) извлекает из стека содержимое CS и IP;
5) извлекает из стека содержимое регистра флагов;
6) возвращается к выполнению следующей команды.

Приоритеты прерываний в порядке их убывания:

1) прерывание из-за ошибки деления;
2) программное прерывание, инициируемое командой INT;
3) команда прерывания при переполнении;
4) немаскируемое прерывание NMI;
5) маскируемое прерывание INT;
6) прерывание пошаговой работы.