Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M5 / Прерывания и исключения.doc
Скачиваний:
24
Добавлен:
16.04.2013
Размер:
238.08 Кб
Скачать

Приоритеты sse-исключений операций с плавающей точкой

Приоритет

Описание

1 (высший)

Исключение неверной операции из-за операнда SNaN(или любогоNaNоперанда для операций максимума, минимума, сравнения и преобразования).

2

Операнд1QNaN.

3

Любые другие исключения неверных операций, не упоминавшиеся выше и не исключение деления на ноль2.

4

Денормализованный операнд2.

5

Переполнение и потеря значимости, возможно в сочетании с исключением, уточняющим результат2.

6 (низший)

Исключение, уточняющее результат

Пояснения к таблице:

  1. Точнее QNaNэто не исключение, просто обработка операндаQNaNпредшествует исключениям с более низким приоритетам. Например, при деленииQNaNна ноль, в результате получаетсяQNaN, а не исключение деления на ноль.

  2. Если замаскировано, то выполнение инструкции продолжается и может произойти исключение с более низким приоритетом.

$.3. Реализация и обслуживание виртуальных прерываний

При работе процессора в защищенном режиме возникает ряд проблем при организации обслуживания аппаратных и программных прерываний. Обычно обслуживание прерываний является функцией операционной системы. В защищенном режиме инструкции CLI, STI, изменяющие в регистреEFLAGSзначение признака разрешения прерыванийIF, выполняются только программами, имеющими уровень привилегийCPLIOPL. При установленном в регистреEFLAGSзначении поляIOPL<3 разрешать или запрещать обслуживание маскированных прерываний могут только программы операционной системы, имеющие уровень привилегииCPL=0, 1 или 2. Поэтому обычно маскируемые запросы прерываний воспринимаются операционной системой, которая определяет, какой из программ пользователя адресован поступивший запрос прерывания. Если эта программа находится в стадии выполнения, то реализуется ее прерывание и обслуживание поступившего запроса.

Однако программы пользователя должны иметь возможность защитить себя от прерывания, так как прекращение или задержка некоторых выполняемых ими процедур может привести к нежелательным последствиям. Для решения этой проблемы в архитектуре IA-32 реализован механизм виртуальных прерываний. Этот механизм поддерживается в тех моделях процессоров, которые выполняют инструкцию CPUID.

Виртуальные прерывания в защищенном режиме

Поддержка виртуальных прерываний в защищенном режиме обеспечивается при значении бита CR4.PVI=1. Виртуальные прерывания реализуются только для программ, имеющих уровень привилегийCPL=3. При этом механизм виртуальных прерываний используется только при обслуживании маскируемых аппаратных прерываний пользователя, имеющих номера векторовn=32-255 (табл.$.1). Немаскируемые прерывания (NMI), программные прерывания и исключения обрабатываются обычным образом.

Для организации обслуживания виртуальных прерываний используются специальные признаки, введенные в регистрEFLAGS:VIF- признак разрешения обслуживания виртуального прерывания,VIP- признак поступившего запроса виртуального прерывания, обслуживание которого отложено.

Установка значения признака VIP=1 производится операционной системой в защищенном режиме, если внешний запрос маскируемого прерыванияINTR=1 поступает при выполнении программ пользователя (низший уровень привилегииCPL=3) с запрещенным обслуживанием прерываний (значениеIOPL<CPL). Обслуживание этого запроса разрешается при значении признакаVIF=1, установка которого производится инструкциейSTI.

Если CR0.PVI=1 (виртуальные прерывания разрешены), то при значенияхCPL=3 иIOPL<3 выполнение инструкцийCLIиSTIне вызывает исключения типа #GP. В этом случае инструкцииCLIиSTI устанавливают соответствующее значение признакаVIF=0 иVIF=1, не изменяя признакIF. Признак VIF запрещает или разрешает вызов подпрограммы обслуживания при поступлении запроса маскируемого аппаратного прерывания пользователя. Механизм виртуальных прерываний не оказывает влияние на выполнение инструкцийPUSHF, POPF иIRET.

Виртуальные прерывания не реализуются, если значение бита PVI=0, или уровень привилегий программыCPL<3, или содержимое поляIOPL=3. В этом случае инструкцииCLIи STIизменяют флагIF, еслиCPL≤IOPL, или вызывают исключение #GP. еслиCPL>IOPL.

Если происходит маскируемое прерывание и прерывания разрешены (IF=1), то процессор с помощью таблицыIDTпроизводит вызов обработчика прерывания, который проверяет значение признакаEPLAGS.VIF. ЕслиVIF=1 (для прерванной программы с уровнемCPL=3 разрешены маскируемые аппаратные прерывания), то обработчик выполняет обслуживание прерывания, после чего возвращает управление прерванной программе. ЕслиVIF=0 (для прерванной программы с уровнемCPL=3 запрещены маскируемые аппаратные прерывания), то обработчик устанавливает значение признакаVIP=1 (поступил запрос маскируемого аппаратного прерывания, но его обслуживание отложено) в хранящемся в стеке содержимом регистраEFLAGSи возвращает управление прерванной программе.

Когда программа пользователя (CPL=3) выполняет инструкциюSTI, желая разрешить прерывания, действия процессора зависят от значения признака VIP:

Если VIP=0 (нет отложенных прерываний), то процессор устанавливает значение признакаVIF=1 (разрешение виртуальных прерываний).

Если VIP=1 (есть отложенное прерывание), то процессор реализует исключение #GP. Вызываемая при этом подпрограмма обслуживания должна выполнить обработку отложенного прерывания. Перед возвратом из подпрограммы обслуживания необходимо установить значение призна­ковVIP=0 иVIF=1 в содержимом регистраEFLAGS, хранящемся в стеке.