- •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 |
Битовая карта перенаправления прерываний БКНП (InterruptRedirectionBitMap) имеет размер 32 байта и располагается в сегментеTSS(см.рис.7.13) непосредственно перед битовой картой ввода-вывода (БКВВ). Относительный адрес начала БКНП в сегменте TSS равен адресу БКВВ минус 32 байта. Каждый бит этой картыbiопределяет, будет ли программное прерывание с соответствующим номеромn=iобрабатываться в защищенном или реальном режиме. Приbi=1 обработка осуществляется с использованием дескрипторов, размещенных в таблице IDT, как это принято для защищенного режима. Приbi=0 производится обращение к подпрограмме обслуживания, вектор которой содержится в таблице прерываний, размещаемой в начальной области адресного пространства, начиная с адреса 0...0h, как это выполняется в реальном режиме (см. разд.$.1).