Мегаобучалка Главная | О нас | Обратная связь


Прерывание 8 - двойная ошибка



2015-12-06 532 Обсуждений (0)
Прерывание 8 - двойная ошибка 0.00 из 5.00 0 оценок




Как правило, если процессор обнаружил исключительную ситуацию во время вызова обработчика для предыдущей исключительной ситуации, могут быть обработаны две последовательных исключительных ситуации. Если, однако, процессор, находясь в защищенном режиме, не может обработать их последовательно, он вырабатывает прерывание по двойной ошибке. Для определения, какая из двух ошибок привела к двойной ошибке, в МП 80286/80386 исключительные ситуации подразделяются на три класса: ПРОСТЫЕ ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ, СЛОЖНЫЕ ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ и СТРАНИЧНЫЕ ОШИБКИ.

В табл. 7.6 приведена классификация этих ошибок, а в табл. 7.7 указаны комбинации исключительных ситуаций, приводящих и не приводящих к двойной ошибке.

Микропроцессор сохраняет в стеке обработчика прерывания код ошибки, но для двойной ошибки он всегда равен нулю. Ошибочная команда не может быть повторена. Если при попытке вызвать обработчик двойной ошибки снова возникнет исключительная ситуация, процессор перейдет в состояние тяжелого останова (SHUTDOWN).

 

Табл. 7.6. Классификация исключительных ситуаций

Класс Номер исключитльной ситуации Описание
Простые исключи- тельные ситуации Исключительные ситуации отладчика NMI Точка останова Переполнение Нарушение границ Отсутствие сопроцессора
Сложные исключи- тельные ситуации Ошибка деления Нарушение границ сегмента сопроцессора Ошибочный TSS Ошибка стека Общая защита
Страничные ошибки (только для МП 80386) Страничная ошибка

 

Табл. 7.7. Условия, приводящие к двойной ошибке

Первая исключи- тельная ситуация Вторая исключительная ситуация
простая сложная страничная ошибка
Несерьезная исключительная ситуация Нет Нет Нет
Серьезная исключительная ситуация Нет Двойная ошибка Нет
Страничная ошибка (только для МП 80386) Нет Двойная ошибка Двойная ошибка

Прерывание 9 - нарушение границ сегмента сопроцессором

Данная исключительна ситуация возникает в защищенном режиме при следующих условиях:

1) при выполнении команды сопроцессора операнд нарушает границу адресации (0FFFFh для коротких сегментов и 0FFFFFFh для длинных сегментов сопроцессора 80287; 0FFFFFFFFh для длинных сегментов сопроцессора 80387; нулевую границу для сегментов, расширяющихся вниз);

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

3) команда обращается за операндом по недоступным адресам. Два случая, когда возможно возникновение данной ситуации:

1) предел сегмента не совпадает с конечным адресом операнда (например, конечный адрес операнда равен FFFFh, а предел сегмента равен FFFDh), т.е. операнд будет находиться по адресу, который не находится внутри сегмента (например 8-байтовый операнд, начинающийся со смещения FFFCh, будет требовать адреса FFFCh-FFFFh и 0000-0003; но адреса FFFEh и FFFFh не доступны, поскольку они выходят за допустимые пределы);

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

Сбойный адрес в командах и операндах сопроцессора может исчезать, так как команда FSTENV не возвращает недействительные адреса. Как в системе 80286/80287, так и в системе 80386/80387 исключительная ситуация "нарушение границ сегмента сопроцессором" должна быть обработана путем выполнения команды FNINIT (т.е. FINIT с предварительным WAIT). Адрес возврата в стеке не обязательно указывает на сбойную или следующую команду. Сбойные команды сопроцессора не могут быть выполнены повторно.

Случай 2 может быть предупрежден либо выравниванием всех страниц по границам страниц либо размещением их таким образом, чтобы они начинались не раньше границы 108 байт от начала или конца страницы. (Максимальный размер операндов сопроцессора - 108 байт). Случай 1 может быть предупрежден, если разрыв между последним доступным смещением и первым доступным смещением в сегменте меньше 108 байт либо нулевой (т.е. сегмент полностью помещается в странице). Если нет никаких ограничений существующего программного обеспечения, обработчик исключительной ситуации должен выполнить команду FINIT и, вероятно, завершить задачу.

 

Прерывание по исключительной ситуации 10 - неверный сегмент состояния задачи

Это прерывание может возникать в защищенном режиме во время операции переключения задач. Данное прерывание - исключительная ситуация, связанная с ошибкой в контексте уходящей задачи, если обнаружен неверный TSS уходящей задачи или TSS входящей задачи не существует. Эта исключительная ситуация воспримется как часть контекста входящей задачи, если TSS входящей задачи добавит к имеющимся проблемам новые (здесь контекст - состояние регистров МП в любой момент времени).

Код ошибки (см. "Исключительные ситуации защищенного режима адресации") в исключительной ситуации 10 запоминается так, как показано в Таблице 7.8.

 

Таблица 7.8.

Код ошибки в стеке Условия, при которых возникает недоступность TSS одной из двух задач, участвующих в операции переключения Контроль выходной задачи Контроль входной задачи
Индекс TSS + ЕХТ Дескриптор TSS не корректен (включая тип дескриптора или дескриптор, неподдающийся расшифровке) Да Да
Индекс TSS + ЕХТ По командам JMP, CALL, INT 3, INT n, INT0 или BOUND происходит переключение задач, но TSS входящей задачи помечен "занято" (тип=3, В) Да Да
Индекс TSS + ЕХТ По команде IRET происходит переключение на задачу, в которой текущая задача является, повидимому, вложенной, но TSS входящей задачи не помечен "занято" (тип=1, 9} Да Да
Индекс TSS + ЕХТ Величина в поле "предел" меньше 43 для МП 80286 или меньше 103 для МП 80386 т.е. меньше фиксированной части TSS Да Да
Индекс LDT + ЕХТ Неверный дескриптор LDT или дескриптор LDT отсутствует Да Да
Индекс SS + ЕХТ Селектор стекового сегмента выходит за пределы границы таблицы дескрипторов Нет Да
Индекс SS + ЕХТ Селектор стекового сегмента ссылается на "незаписываемый" сегмент данных Нет Да
Индекс SS + ЕХТ DPL стекового сегмента не согласуется с новым CPL (указанным в RPL нового CS) Нет Да
Индекс CS + ЕХТ Селектор кодового сегмента выходит за пределы границы таблицы дескрипторов Нет Да
Индекс CS + ЕХТ Селектор кодового сегмента принадлежит сегменту, не являющемуся кодовым Нет Да
Индекс CS + ЕХТ DPL неподчиненного кодового сегмента меньше или больше нового CPL Нет Да
Индекс CS + ЕХТ DPL подчиненного кодового сегмента больше нового CPL Нет Да
Индекс DS, ES, GS, FS + ЕХТ Селектор сегмента DS, ES, GS, FS выходит за пределы границы таблицы дескрипторов * Нет Да
Индекс DS, ES, GS, FS + ЕХТ Селектор сегмента DS, ES, GS, FS ссылается на сегмент, не являющийся сегментом данных * Нет Да

* Селекторы сегментов GS, FS только для МП 80386.

 



2015-12-06 532 Обсуждений (0)
Прерывание 8 - двойная ошибка 0.00 из 5.00 0 оценок









Обсуждение в статье: Прерывание 8 - двойная ошибка

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (532)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.01 сек.)