- •8. Прерывания и исключения
- •Прерывания и исключения защищенного режима
- •Приоритеты событий, вызывающих прерывания
- •Обработка прерываний в реальном режиме
- •Обработка прерываний в защищенном режиме
- •Возможности последовательной обработки исключений различных классов
- •Условия недостоверности сегмента tss
- •Приоритеты sse-исключений операций с плавающей точкой
- •Варианты обработки прерываний в режиме виртуального 8086
- •Виртуальные прерывания в режиме виртуального 8086
- •Обработка прерываний с использованием idt (защищенный режим)
- •Обработка прерываний с помощью таблицы векторов прерываний (реальный режим).
- •Обработка прерываний с использованием признаков vif и vip
Виртуальные прерывания в режиме виртуального 8086
При работе процессора в режиме виртуального 8086 вводится дополнительный механизм, обеспечивающий реализацию виртуальных прерываний. Функционирование данного механизма разрешается при установке бита CR0.VME=1. При этом обслуживание маскируемых аппаратных прерываний можно производить с помощью признаков VIF, VIP, как описано выше. Обслуживание программных прерываний, выполняющихся по инструкциям INT n, может осуществляться с помощью таблицы дескрипторов прерываний IDT, как это выполняется в защищенном режиме, или путем непосредственного обращения к таблице векторов прерываний, как в реальном режиме (см. разд. $.1). Отметим, что обработка исключений всегда производится с помощью таблицы IDT, как в защищенном режиме.
В результате режим виртуального 8086 обеспечивает шесть возможных вариантов обработки прерываний (табл.$.6), выбор которых определяется значениями бита VME в регистре CR0, поля IOPL в регистре EFLAGS и содержимым битовой карты направления прерываний (БКНП), которая располагается в сегменте задачи TSS.
Если виртуальные прерывания разрешены (VME=1). То для обработки программных прерываний (инструкции INT n) привлекается БКНП, а при обработке маскируемых прерываний (запросов, поступающих по входу INTR) используются признаки VIF и VIP в регистре EFLAGS (при значении поля IOPL<3). Если виртуальные прерывания запрещены, или IOPL=3, то выполняется обработка маскируемых прерываний с помощью таблицы IDT (см. разд. $.1).
Таблица $.6
Варианты обработки прерываний в режиме виртуального 8086
№ вар. |
VME |
IOPL |
Бит в БКНП |
Программные прерывания |
Маскируемые прерывания |
1 |
0 |
3 |
X |
Обрабатываются с использованием таблицы IDT |
|
2 |
0 |
<3 |
X |
Вызывают исключение #GP |
Обрабатываются с использованием таблицы IDT |
3 |
1 |
<3 |
1 |
Обрабатываются с использованием флагов VIF и VIP |
|
4 |
1 |
3 |
1 |
Обрабатываются с использованием таблицы IDT |
|
5 |
1 |
3 |
0 |
Обрабатываются с использованием таблицы векторов прерываний |
Обрабатываются с использованием таблицы IDT |
6 |
1 |
<3 |
0 |
Обрабатываются с использованием флагов VIF и VIP |
|
Битовая карта перенаправления прерываний БКНП (Interrupt Redirection Bit Map) имеет размер 32 байта и располагается в сегменте TSS (см. рис.7.13) непосредственно перед битовой картой ввода-вывода (БКВВ). Относительный адрес начала БКНП в сегменте TSS равен адресу БКВВ минус 32 байта. Каждый бит этой карты bi определяет, будет ли программное прерывание с соответствующим номером n=i обрабатываться в защищенном или реальном режиме. При bi=1 обработка осуществляется с использованием дескрипторов, размещенных в таблице IDT, как это принято для защищенного режима. При bi=0 производится обращение к подпрограмме обслуживания, вектор которой содержится в таблице прерываний, размещаемой в начальной области адресного пространства, начиная с адреса 0...0h, как это выполняется в реальном режиме (см. разд. $.1).
