Предыдущий раздел ПРЕРЫВАНИЯ И РЕЗИДЕНТНЫЕ ПРОГРАММЫ Следующая глава

19.1.4. Алгоритм выполнения прерывания

Требуется реализовать описанный выше многопрограммный редактор информации.

Прежде чем приводить данный алгоритм, рассмотрим два понятия, играющих в нем важную роль. Во-первых, это номер прерывания. Подобно другим однотипным объектам в ВС, все типы прерываний пронумерованы. Номер – численный идентификатор объекта, пользуясь которым система находит дескриптор объекта в своих таблицах. В данном пособии нам уже встречались и еще встретятся другие численные идентификаторы. Отметим их общее свойство: однотипные идентификаторы уникальны в пределах всей однопрограммной ВС. Например, в системе, построенной на основе i8086 и DOS номера упомянутых выше прерываний следующие:

    00h   –       Деление на нуль

    01h   –       Трассировка

    02h   –       Немаскируемое прерывание

    . . . .

    08h   –       Таймер

    09h   –       Клавиатура

    . . . .

    10h–1Fh    Прерывания BIOS

    20h–3Fh    Прерывания DOS

    . . . . 

 

Вторым понятием, необходимым для изложения алгоритма обработки прерываний, является таблица векторов прерываний.  При использовании в качестве ЦП i8086 эта таблица занимает первые 1024 байта ОП (рис.65) и их никогда нельзя использовать для других целей. Один элемент этой таблицы занимает два слова (4 байта) ОП и называется вектором прерываний. Он соответствует своему типу прерывания и содержит адрес (сегмент и смещение) первой ячейки обработчика прерываний в ОП. При этом первое слово содержит смещение, а второе – сегмент. Общее число векторов прерываний 256 = 100h. Следовательно, таково максимальное число типов прерываний, которые могут существовать в системе.

 

  

Рис.65. Таблица векторов прерываний

 

Обработка прерывания производится совместными усилиями аппаратуры ЦП и программы обработчика прерываний. Общий алгоритм обработки любого типа прерываний:

 

Рис. 66. Перемещение содержимого регистров при прерывании с номером N

 

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

В заключение заметим, что среди трех типов прерываний (программные, исключения, внешние аппаратные) программные прерывания – наименее, а внешние аппаратные – наиболее приоритетные прерывания. Это означает, что обработчики программных прерываний могут прерываться сигналами исключений и сигналами внешних прерываний так, как прерываются обыкновенные прикладные программы. Обработчики исключений, в свою очередь, могут прерываться сигналами внешних аппаратных прерываний. Что касается обработчиков внешних прерываний, то, как будет показано позже, они могут прерываться сигналами других, более приоритетных внешних прерываний. (Чтобы такие прерывания были действительно возможны, прерываемые обработчики прерываний должны предварительно выполнить команду sti.)

 


Предыдущий раздел В начало Следующая глава