Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
еп / 2 вопрос.doc
Скачиваний:
4
Добавлен:
24.02.2016
Размер:
142.85 Кб
Скачать

Обработка прерываний в персональной эвм

Микропроцессоры типа х86 имеют два входа запросов внешних аппаратных прерываний:

  • NMI - немаскируемое прерывание, используется обычно для запросов прерываний по нарушению питания;

  • INT - маскируемое прерывание, запрос от которого можно программным образом замаскировать путем сброса флага IF в регистре флагов.

Рис. 1.4.  Структура контроллера приоритетных прерываний

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

  • восприятие и фиксация запросов прерываний от внешних устройств;

  • определение незамаскированных запросов среди поступивших запросов;

  • проведение арбитража: выделение наиболее приоритетного запроса из незамаскированных запросов в соответствии с установленным механизмом назначения приоритетов;

  • сравнение приоритета выделенного запроса с приоритетом запроса, который в данный момент может обрабатываться в микропроцессоре, формирование сигнала запроса на вход INT микропроцессора в случае, если приоритет нового запроса выше;

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

Переход к соответствующему обработчику прерывания осуществляется (в реальном режиме работы микропроцессора) посредством таблицы векторов прерываний. Эта таблица (рис. 1.5) располагается в самых младших адресах оперативной памяти, имеет объем 1 Кбайт и содержит значения сегментного регистра команд (CS) и указателя команд (IP) для 256 обработчиков прерываний.

Рис. 1.5.  Структура таблицы векторов прерываний

Обращение к элементам таблицы осуществляется по 8-разрядному коду - типу прерывания (табл. 1.1).

Таблица 1.1.

Тип прерывания

Источник прерывания

0

Деление на 0

1

Пошаговый режим выполнения программы

2

Запрос по входу NMI

· · ·

8

Запрос по входу IRQ0 (системный таймер)

9

Запрос по входу IRQ1 (контроллер клавиатуры)

· · ·

11

Отсутствие сегмента в оперативной памяти

· · ·

255

Пользовательское прерывание

Различные источники задают тип прерывания по-разному:

  • программные прерывания вводят его изнутри процессора или содержат его в номере команды INT n;

  • аппаратные маскируемые прерывания вводят его от контроллера приоритетных прерываний по шине данных;

  • немаскируемому аппаратному прерыванию назначен тип 2.

Механизмы передачи управления обработчикам прерываний.

Дескрипторная таблица прерываний (IDT) содержит шлюзы (рис 4.2).

Рис. 4.2 Формат шлюза IDT

Поле «TYPE» в байте доступа определяет тип шлюза:

  • 4 - шлюз вызова 80286 (Call Gate);

  • 5 - шлюз задачи 80286 (Task Gate);

  • 6 - шлюз прерывания 80286 (Interrupt Gate);

  • 7 - шлюз ловушки 80286 (Trap Gate);

  • C - шлюз вызова 386+ (Call Gate);

  • D - шлюз задачи 386+ (Task Gate);

  • Е - шлюз прерывания 386+ (Interrupt Gate);

  • F - шлюз ловушки 386+ (Trap Gate).

Шлюз прерывания содержит адрес входа в обработчик прерывания в виде «селектор сегмента» и «смещение».

Шлюзы вызова (Call Gates) используются для вы­зовов процедур со сменой уровня привилегий, шлюзы задач (Task Gates) исполь­зуются для переключения задач, шлюзы прерываний (Interrupt Gates) и ловушек (Trap Gates) определяют процедуры обслуживания прерываний. Шлюзы вызова позволяют автоматически копировать заданное число слов из старого стека в новый. Шлюзы прерываний отличаются от шлюзов ловушек только тем, что они запрещают прерывания (сбрасывают IF), а шлюзы ловушек — нет.

Аналогично тому, как команда CALL вызывает процедуру или задачу, так и исключение или прерывание может "вызвать" обработчик прерывания, представленный в виде процедуры или задачи. Реагируя на исключение или прерывание, процессор использует вектор особого прерывания или прерывания в качестве индекса дескриптора в IDT. Если процессор индексирует шлюз прерывания или шлюз ловушки, то вызов обработчика происходит аналогично вызову при помощи CALL шлюза вызова. Если процессор индексирует шлюз задачи, это приводит к переключению задачи аналогично вызову при помощи CALL шлюза задачи.

Прерывания, использующие либо шлюзы прерывания, либо шлюзы ловушки, вызывают очистку флага TF после того, как его текущее значение сохранено в стеке как часть сохраняемого содержимого регистра EFLAGS. Поступая таким образом, процессор предотвращает воздействие трассировки команды на реакцию прерывания. Последующая команда IRET восстанавливает флаг TF в значение, сохраненное в регистре EFLAGS в стеке.

Различие между шлюзом прерывания и шлюзом ловушки состоит в их воздействии на флаг IF. Прерывание, использующее шлюз прерывания, очищает флаг IF, предотвращая тем самым влияние на текущий обработчик прерывания прочих возможных прерываний. Последующая команда IF восстанавливает флаг IF в состояние, которое он имел в сохраненном в стеке регистре EFLAGS. Прерывание, проходящее через шлюз ловушки, не изменяет флага IF.

Соседние файлы в папке еп