Порядок проверки условий обслуживания прерываний
Способы указания номера вектора прерывания
Вектор прерывания
Вход в процедуру, обслуживающую аппаратное прерывание или исключение, определяется с помощью вектора прерывания, являющегося ___________ ________ _______________.
Вектора группируются в структуру – таблицу прерываний* (IDT, Interrupt Descriptor Table).
Каждому номеру (0-255) прерывания или исключения соответствует свой вектор.
Вектора 0-31 в таблице прерываний Intel резервирует под _______________.
Таблица прерываний в реальном режиме
Содержит ___________ _________ (двойные слова) обслуживающих процедур.
После сброса располагается, начиная с нулевых адресов.
Команда LIDT дает возможность:
– ____________ ______________ таблицы в пределах первого мегабайта;
– ____________ _________ в пределах от 007Fh до 03FFh.
При попытке обслуживания прерывания с номером, выходящим за размер таблицы, генерируется исключение #DF.
Таблица прерываний в защищенном режиме
Содержит 8-байтные _________________ прерываний.
Размер: _______ элементов (дескрипторов).
Может располагаться в любом месте физической памяти.
Зависят от вида прерывания:
– маскируемых аппаратных прерываний – вводится от внешнего контроллера прерываний во втором ________ ________ или поступает по ______ ______;
– программных прерываний – задается командой;
– немаскируемого прерывания – имеет фиксированный вектор (2);
– _______________ – автоматически генерируется внутри процессора.
1.Ловушка ___________ (#DB) по выполненной инструкции (пошаговый режим через флаг TF или точка останова по данным через регистры отладки).
2.Отказ ___________ (#DB) по очередной инструкции (точка останова по инструкции через регистр отладки).
3.Немаскируемое аппаратное прерывание.
4.Маскируемое аппаратное прерывание (при IF=1).
5.Отказ _________________ (#NP или #GP) при выборке очередной инструкции.
6.Отказ ____________ (#PF) при выборке очередной инструкции.
7.Отказ ____________________ очередной инструкции (#UD или #GP).
8.Для операции ______ исключение #NM (если TS=1 и МР=1).
9.Для инструкции _____ исключение #NM (если ЕМ=1 или TS=1).
10.Для операции WAIT или инструкции FPU исключение #MF от FPU.
11.Отказ _________________ (#NP, #SS, #GP) или отказ страницы (#PF) для операндов, используемых в инструкции.
Двойной отказ
Double Fault (#DF).
Возникает, если:
– при обработке исключения, связанного с __________________ (#TS, #NP, #SS или #GP), процессор обнаруживает исключение, отличное от _________ ____________ (#PF);
– при обработке исключения отказа страницы #PF обнаруживается исключение другого типа.
Аварийный останов
Shutdown.
Происходит, если во время обслуживания исключения отказа страницы произойдет _____ ______ ________ страницы.
Никакие новые инструкции не выполняются.
Из этого состояния процессор можно вывести только аппаратно:
– сигналом _____, оставляя его в защищенном режиме;
– сигналом ________, переводящим процессор в реальный режим.
При обработке исключений 8-14, 17 и 18 в защищенном режиме процессор сохраняет в стеке ________ ______ _________ (Error Code). Если оно отлично от нуля, то в его битах [15:3] содержится селектор дескриптора, с которым связана ошибка, или описание ___________ _________ (для исключения 14 #PF).
Таблица прерываний микропроцессоров x86
Номер | Функция | Мне-моника | Тип |
00h | Переполнение при делении на 0 | #DE | __ |
01h | Исключение отладки | #DB | _____ |
02h | Немаскируемое прерывание (NMI) | - | I |
03h | Исключение отладки (INT 3) | #ВР | __ |
04h | Исключение по переполнению (INTO) | #OF | __ |
05h | Прерывание по контролю диапазона (BOUND) | #BR | __ |
06h | Недопустимый код операции | #UD | __ |
07h | Сопроцессор недоступен или переключалась задача | #NM | __ |
08h | Двойной отказ 1) | #DF | ___ ______ |
09h | Нарушение границы сегмента сопроцессором (386/387) | __, EC | |
0Ah | Недопустимый сегмент состояния задачи 2) | #TS | __, EC |
0Bh | Сегмент отсутствует 2) | #NP | __, EC |
0Ch | Нарушение границы сегмента стека или сегмент стека отсутствует 3) | #SS | __, EC |
0Dh | Общее нарушение защиты 4) | #GP | __, EC |
0Eh | Отказ страницы 2) | #PF | ___ ___ |
0Fh | Зарезервировано | - | - |
10h | Исключение сопроцессора | #MF | __ |
11h | Контроль выравнивания (486+) 2) | #AC | ___ ______ |
12h | Машинный контроль (Р5+) 2) | #MC | __, EC |
13h | Исключение блока ХММ (Рentium III+) | #XF | __ |
14h-1fh | Зарезервировано | - | - |
00h-FFh | Аппаратные (маскируемые) и программные прерывания INT n | - | __ |
Набор и обработка исключений реального и защищенного режимов различны. В реальном режиме:
1) вектор прерывания не попадает в таблицу;
2) не возникают; возможны в режиме V86;
3) нарушение границы сегмента стека;
4) нарушение границы сегмента данных или кода.
Таблица прерываний IBM PC
Часть из 32 зарезервированных Intel исключений перекрывается системными прерываниями BIOS и DOS.
Номер | Функция |
05h | Печать копии экрана. Генерируется при нажатии клавиши PrtScr |
08h | IRQ0 – от интервального таймера, возникает 18,2 раза в секунду |
09h | IRQ1 – от клавиатуры |
0Ah | IRQ2 – каскадирование контроллеров прерываний |
0Bh | IRQ3 – от асинхронного порта COM2 |
0Сh | IRQ4 – от асинхронного порта СОМ1 |
0Dh | IRQ5 – от контроллера HDD (в ХТ) или зарезервировано (PC/АТ) |
0Eh | IRQ6 – от контроллера FDD после завершения операции чтения/записи |
0Fh | IRQ7 – от принтера (готовность к выполнению очередной операции) |
10h | Обслуживание видеоадаптера |
11h | Определение конфигурации устройств в системе |
12h | Определение размера оперативной памяти в системе |
13h | Обслуживание дисковой системы |
14h | Последовательный ввод/вывод |
15h | Расширенный сервис для компьютеров АТ |
16h | Обслуживание клавиатуры |
17h | Обслуживание принтера |
1Ah | Обслуживание часов |
1Bh | Обработчик прерываний Ctrl-Break |
1Ch | Вызывается программно обработчиком прерываний таймера (18,2 раза в секунду) |
70h | IRQ8 – от часов реального времени |
71h | IRQ9 – от контроллера EGA |
72h | IRQ10 – зарезервировано |
73h | IRQ11 – зарезервировано |
74h | IRQ12 – зарезервировано |
75h | IRQ13 – от математического сопроцессора |
76h | IRQ14 – от контроллера HDD |
77h | IRQ15 – зарезервировано |