Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Организация прерываний в ЭВМ

.doc
Скачиваний:
39
Добавлен:
17.06.2016
Размер:
90.62 Кб
Скачать

7. Организация прерываний в ЭВМ

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

В зависимости от источника, прерывания подразделяются на 2 типа:

  1. непосредственно прерывания, если прерывания вызваны внешним устройством.

  2. Исключения, если прерывание вызвано командой int, выполняемой CPU.

Наличие запросов прерывания проверяется после завершения выполнения текущей команды. В зависимости от источника прерывания могут быть внешними и внутренними. Внешними называют прерывания, инициируемые периферийными устройствами. Внутренние прерывания инициируются аппаратурой контроля работы CPU или командой прерывания (int). Например, при делении на 0 формируется сигнал запроса (требования) прерывания. Запрос поступает на специальный вход CPU.

Каждый поступающий запрос прерывания можно замаскировать (то есть игнорировать). Можно замаскировать все требования от внешних устройств. Для этой цели используется флаг IF (interrupt flag). Для немаскируемых запросов прерывания используется специальный вход (NMI). На вход NMI запрос подается, например, при отказе блока питания, при ошибке функционирования ОЗУ. Маскирование запроса прерывания осуществляется с помощью логической схемы, приведенной ниже.

Д

S

R

TR

&

S

R

TM

ля хранения запроса

IRQ Вход CPU

Для хранения маски

IM

Рис. 12. Формирование сигнала прерывания для CPU

7.1. Программируемый контроллер прерываний

Обычно логическая схема обработки прерывания реализуется в виде программируемого контроллера прерываний (PIC), который располагается на кристалле вместе с CPU.

№ запроса

Рис. 13. Схема взаимодействия PIC и CPU

АВП – адрес вектора прерываний.

Все регистры контроллера имеют адреса (либо четные, например 20h, либо нечетные – 21h). Кроме регистров, изображенных на рисунке, в состав контроллера входят дополнительные управляющие регистры. Запрос от ВУ «защелкивается» (размещается) на регистре запросов прерывания (IRR). Наиболее приоритетным является IR0 запрос. На регистре IRR размещаются одновременно несколько запросов. Для выбора запроса (на IRR) с максимальным приоритетом используется логическая схема маскирования и выделения приоритета. Выбранный запрос идентифицируется в виде номера запроса, задаваемого с помощью трех младших разрядов регистра типа прерывания. Старшие разряды регистра типа прерывания устанавливаются при инициализации контроллера таким образом, чтобы величина (N), содержащаяся в данном регистре, соответствовала адресу вектора прерывания для выбранного запроса. Для выбранного запроса устанавливается бит в регистре ISR обслуживания прерывания, а сам запрос в IRR сбрасывается. Это свидетельствует о начале обслуживания прерывания.

Логическая схема маскирования и выделения приоритета формирует сигнал INT, поступающий на специальный вход процессора INTR (запрос прерывания). Если в CPU флаг прерывания IF установлен в 1, что означает отсутствие маскирования внешних запросов прерывания, то CPU выдает сигнал INTA (подтверждение прерывания), предоставляя возможность контроллеру сформировать АВП.

По сигналу INTA все запросы на IRR, имеющие приоритет равный или меньший приоритета выбранного для обслуживания запроса, маскируются до тек пор, пока не будет сброшен (обнулен) бит в регистре ISR для обслуживаемого прерывания. Этот сброс осуществляется программой обслуживания прерывания. Для сброса необходимо в программе обслуживания прерывания выполнить команду OUT, в которой задан известный адрес регистра ISR.

После появления сигнала INTA контроллер формирует на регистре типа прерывания АВП, который подается на младшие разряды D0-D7 шины данных CPU.

АВП используется для указания адреса первой из двух ячеек памяти (ОЗУ), в которых хранится адрес (CS:IP) начала программы обработки запроса прерывания. Предполагается 256 типов прерываний и каждому типу соответствует пара ячеек (вектор), в которых хранится адрес начала обработчика. АВП представляет собой величину 4N, где N – тип прерывания.

7.2. Типы прерываний

Типы прерываний представлены группами, каждая из которых объединяет восемь типов прерываний. Номер группы задается с помощью старших (с 3 по 7) разрядов регистра типа. Для обслуживания запросов прерываний от внешних устройств необходимо при инициализации занести в регистр типа номер группы, равный величине (const) 00001, так как аппаратным прерываниям соответствуют типы 8h-0Fh, 70h-77h.

N

Регистр типа

7  3

2  0

8

00001

000 – системный таймер

9

00001

001  клавиатура

F

00001

111 – принтер (LPT1)

Классификация прерываний:

  1. 0-7 – логические;

  2. 8-F, 70h-77h – аппаратные;

  3. 10-1Fh, 40-5Fh – BIOS;

  4. 20-3Fh – DOS;

  5. 80-F0h – Basic;

  6. 60-67h – для пользовательских нужд.

Рассмотренные примеры типов прерываний входят в состав 256 возможных типов.

Для любого типа прерывания существует обработчик, 32-разрядный адрес (IP и CS) которого расположен в специальной таблице IVT.

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

Нет

Да

  1. Выдача в контроллер прерывания сигнала INTA для получения от контроллера АВП.

  2. Сохранение в стеке IF из регистра флагов и АВ (адреса возврата) из CS, IP.

  3. Сброс IF (запрет прерываний).

  4. Перемещение из IVT (таблицы векторов прерываний) адреса обработчика прерываний на CS, IP.

Адрес в IP используется для

вызова процедуры обслужива-

ния прерывания (ISR).

Адрес1

ISR 1

АдресN

Для обеспечения вложенных прерываний

необходимо в начале процедуры обработки

прерывания установить IF командой STI.

ISR N

При выполнении в обработчике команды RET из стека перемещаются в RF, IP сохраненные IF, АВ.

Рис. 14. Схема обработки запросов прерываний

Рассмотренная организация системы прерывания реализуется во многих CPU и, в частности, в ранних версиях процессоров intel. Появление ОС типа Windows способствовало совершенствованию CPU и системы прерываний. При программировании в среде Windows нужно знать о возможных режимах работы CPU. Существуют реальный и защищенный режимы работы. Прерывания в защищенном режиме обрабатываются иначе, чем в реальном режиме работы CPU. В защищенном режиме вместо IVT используется таблица дескрипторов прерываний IDT, размещаемая в любом месте оперативной памяти. Для обращения к таблице используются системные функции.

Таблица IDT размещается в памяти по линейному адресу, который хранится в специальном регистре IDTR. Таблица IDT представляет собой массив так называемых шлюзов (специальных структур), через которые осуществляется переход к обработчику. Индекс IDT определяется так: N*8, так как для дескриптора используется 8 байт. При обслуживании прерывания в стек размещается минимум 12 байт. Четыре байта для CS, четыре байта для IP и четыре байта для расширенного регистра флагов EFLAG (PCW).

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

  1. Общее количество допустимых запросов прерывания.

  2. Время реализации запроса (отклика). Время между появлением запроса и началом выполнения обработчика.

  3. Временные затраты на переключение программ.

А) Запоминание текущего состояния CPU.

Б) Восстановление текущего состояния CPU.

  1. Глубина прерывания – количество программ, которые могут прерывать друг друга.

  2. Насыщение системы прерывания – это количество накопившихся запросов на обработку между первым и следующим запросом от одного и того же источника.

  3. Момент обслуживания запроса на прерывание.

А) Обслуживание после выполнения текущей команды.

Б) Обслуживание после выполнения текущей микрокоманды.

В) Немедленное обслуживание.

  1. Количество уровней запроса на прерывание – IRQL (Interrupt Request Level). Представляет собой число, определяющее приоритет. Программный код, выполняемый на данном уровне IRQL, не может быть прерван программным кодом, имеющим равный или более низкий IRQL. CPU сравнивает значение текущего IRQL со значением полученного запроса IRQL.

ОС Windows использует идеализированную систему приоритетов, которая учитывает особенности разных CPU.

Таблица уровней IRQL

Наименование

Назначение

HIGH_LEVEL

Диагностика ЭВМ; ошибка шины.

POWER_LEVEL

Прерывание по сбою в электроснабжении.

IPI_LEVEL

Прерывания межпроцессорного взаимодействия.

CLOCK_LEVEL

Интервальный таймер.

PROFILE_LEVEL

Таймер профилирования.

DIRQL

Платформенно-зависимое число уровней для прерываний устройств ввода-вывода.

DISPATCH_LEVEL

Планирование потоков и выполнение отложенных процедурных вызовов.

APC_LEVEL

Выполнение асинхронных процедурных вызовов.

PASSIVE_LEVEL

Уровень нормального исполнения потоков.

4