Зарезервированные прерывания защищённого режима
Каскадное включение контроллеров прерываний
На современных системных платах функции контроллеров прерываний возлагаются на чипсет, который может иметь и более гибкие возможности управления, чем пара контроллеров 8259A.
Контроллер прерываний имеет схему приоритетов так как в один момент времени может прийти более одного запроса:
· В основном режиме - режиме полного вложения, - до тех пор, пока установлен разряд в регистре ISR, соответствующий запрашиваемому прерыванию, все последующие запросы с таким же или более низким приоритетом игнорируются, подтверждаются лишь запросы с более высоким приоритетом.
· В циклическом режиме используется круговой порядок использования приоритетов. Последнему обслуженному запросу присваивается низший приоритет, следующему по кругу - наивысший, что гарантирует обслуживание остальных устройств до очередного обслуживания данного устройства.
Взаимодействие контроллера прерываний с внешним устройством осуществляется по следующей схеме. Пусть в некоторый момент времени контроллер клавиатуры с помощью единичного сигнала по линии IRQ 1 известил контроллер прерываний о своей готовности к обмену. В ответ на запрос контроллер прерываний генерирует сигнал INTR (запрос на прерывание) и посылает его на соответствующий вход процессора. Процессор, если маскируемые прерывания разрешены (т.е. установлен флаг прерываний IF в регистре флагов процессора), посылает на контроллер шины сигналы R# - чтение, C# - управление и IO# - ввод/вывод, определяющие тип цикла шины. Контроллер шины, в свою очередь, генерирует два сигнала подтверждения прерывания INTA# и направляет их на контроллер прерываний. По второму импульсу контроллер прерываний выставляет на шину данных восьмибитный номер вектора прерывания, соответствующий данной линии IRQ.
Процедура обработки аппаратного прерывания должна завершаться командой конца прерывания EOI (End of Interruption), посылаемой контроллеру прерываний. Для этого необходимо записать байт 20h в порт 20h (для первого контроллера) и в порт A0h (для второго).
Источники аппаратных прерываний в IBM PC AT | ||||
Запрос | Источник | P | вектор1 | вектор2 |
NMI | Ошибка памяти или другая неисправимая ошибка в системе | 02h | ||
IRQ0 | Системный таймер | 08h | 50h | |
IRQ1 | Клавиатура | 09h | 51h | |
IRQ8 | Часы реального времени | 70h | 58h | |
IRQ9 | Устройство на системной шине | 71h | 59h | |
IRQ10 | Устройство на системной шине | 72h | 5Ah | |
IRQ11 | Устройство на системной шине | 73h | 5Bh | |
IRQ12 | Устройство на системной шине | 74h | 5Ch | |
IRQ13 | Ошибка сопроцессора | 75h | 5Dh | |
IRQ14 | IDE контроллер | 76h | 5Eh | |
IRQ15 | Устройство на системной шине | 77h | 5Fh | |
IRQ3 | Последовательный порт (COM2 или COM4) | 0Bh | 52h | |
IRQ4 | Последовательный порт (COM1 или COM3) | 0Ch | 53h | |
IRQ5 | Параллельный порт (LPT2) или IDE контроллер (вторичный) | 0Dh | 54h | |
IRQ6 | Контроллер дисковода | 0Eh | 55h | |
IRQ7 | Параллельный порт (LPT1) | 0Fh | 56h |
Зарезервированные прерывания защищённого режима.
00h | Ошибка при выполнении команды деления. |
01h | Прерывание для пошаговой работы, используется отладчиками. |
02h | Немаскируемое прерывание. |
03h | Прерывание по точке останова для отладчиков. |
04h | Переполнение, генерируется командой INTO, если установлен флаг переполнения OF. |
05h | Генерируется при выполнении машинной команды BOUND, если проверяемое значение вышло за пределы заданного диапазона. |
06h | Недействительный код операции, или длина команды больше 10 байт. |
07h | Отсутствие арифметического сопроцессора. |
08h | Двойная ошибка, вырабатывается в том случае, если при обработке исключения возникло ещё одно исключение. Если во время обработки этого прерывания возникает третье исключение, процессор переходит в состояние отключения, что приводит к перезапуску процессора. |
09h | Превышение сегмента арифметическим сопроцессором. |
0Ah | Недействительный сегмент состояния задачи TSS. |
0Bh | Отсутствие сегмента. Вырабатывается при попытке использовать для адресации дескриптор, у которого бит присутствия сегмента в памяти P сброшен в 0. Это прерывание используется для реализации механизма виртуальной памяти. В этом случае по прерыванию 0Bh операционная система может выполнить подкачку отсутствующего сегмента в память. |
0Ch | Исключение при работе со стеком. Может возникать в случае отсутствия сегмента стека в памяти или в случае переполнения (антипереполнения) стека. |
0Dh | Исключение по защите памяти. Возникает при любых попытках получения доступа к сегментам памяти, если программа обладает недостаточным уровнем привилегий. |
0Eh | Отказ страницы для процессоров i80386 или i80486, зарезервировано для i80286. |
0Fh | Зарезервировано. |
10h | Исключение сопроцессора. |
11h - 1Ah | Зарезервированы. |
Сравнение источников аппаратных прерываний в IBM PC AT и в Intel.
Из таблицы мы можем увидеть источники и запросы прерываний в IBM PC AT.
С помощью диспетчера устройств посмотрим, использует ли системный таймер ресурсы:
Так же можем посмотреть через программу EVEREST ресурсы устройств, запрос системного таймера там присутсвует.
А если посмотреть в диспетчере устройств клавиатуру и мышь, то ресурсов там нет.