Выше приведенные инструкции зарезервированы «на будущее». Эти коды операций прерывания 6 не генерируют
Исключение 7 - Устройство недоступно
Сбой типа "устройство недоступно" генерируется при одном из двух следующих условий:
· Процессор выполняет команду ESC при установленном бите EM регистра CR0;
· Процессор выполняет команду WAIT или ESC при установленном бите TS регистра CR0.
Таким образом, прерывание 7 происходит, когда программист хочет, чтобы команда ESC обрабатывалась программно (бит EM установлен), либо когда встречена команда WAIT или ESC, а контекст модуля операций с плавающей точкой отличен от контекста для текущей задачи.
Для процессоров 80286 и 386 бит MP регистра CR0 используется с битом TS для определения того, должна ли команда WAIT генерировать исключение. Для программ, выполняемых на процессоре i486, бит MP должен быть установлен всегда.
Исключение 8 - Двойной сбой
Обычно когда процессор обнаруживает исключение при попытке вызвать обработчик исключения, происшедшей ранее, эти два исключения могут обрабатываться последовательно. Однако, если процессор не в состоянии этого сделать, он генерирует исключение двойного сбоя. Для того, чтобы определить, когда о двух сбоях следует сообщить как о двойном сбое, процессор делит исключения на три класса: незначительные исключения (1-7,16), значительные исключения (0,10-13) и страничные сбои (14).
Когда происходит два незначительных исключения или прерывания, либо одно незначительное и одно значительное, то два таких события могут обрабатываться последовательно. В случае двух значительных событий они не могут быть обработаны, и тогда генерируется исключение двойного сбоя.
Если за незначительным или значительным исключением следует страничный сбой, то два таких события могут быть обработаны последовательно. Это также справедливо и в том случае, когда сначала следует страничный сбой, а за ним незначительное исключение. Однако, если за страничным сбоем следует значительное исключение или еще один страничный сбой, то генерируется аварийное завершение типа "двойной сбой".
Любые последующие сбои, генерируемые при попытках процессора передать управление соответствующему обработчику прерывания, могут также привести к ситуации двойного сбоя.
Процессор всегда помещает код ошибки в стек обработчика двойного сбоя, однако этот код ошибки всегда равен 0. Рестарт вызвавшей сбой команды невозможен. Если при попытке вызвать обработчик двойного сбоя произойдет еще одно исключение, процессор входит в режим закрытия системы. Этот режим аналогичен состоянию, следующему за выполнением команды HLT. Никакие дальнейшие команды не выполняются до приема немаскируемого прерывания или сигнала сброса системы RESET. Если закрытие системы происходит во время выполнения процессором обработчика немаскируемого прерывания, то рестарт процессора возможен только при помощи сигнала RESET. Процессор генерирует специальный цикл шины, указывающий на вхождение процессора в режим закрытия.
Исключение 9 - (Резервируется Intel. Не использовать!)
Прерывание 9, аварийное завершение выхода за границы сегмента сопроцессора, генерируется в системе центрального процессора 386/математического сопроцессора 387, когда процессор 386 обнаруживает нарушение границы страницы или сегмента при пересылке средней части операнда математического сопроцессора 387. Это прерывание процессором i486+ не генерируется; вместо него происходит прерывание 13.
Исключение 10 - Неверный TSS
Сбой типа "неверный TSS" генерируется при попытке переключения задачи на сегмент с неверным TSS. TSS является неверным в случаях, описанных в таблице ниже. Код ошибки помещается в стек обработчика исключений, что помогает идентифицировать причину сбоя. Бит EXT указывает, что исключение было вызвано условием вне управления программы (например, внешнее прерывание, используя шлюз задачи, попыталось выполнить переключение задачи на неверный TSS).
--------------------------------------------------------------------------------------------------------------------------
Индекс кода ошибки Описание
--------------------------------------------------------------------------------------------------------------------------
Сегмент TSS Граница сегмента TSS меньше 67H
Сегмент LDT Неверная LDT или LDT не присутствует
Сегмент стека Селектор сегмента стека превышает границу таблицы дескрипторов
Сегмент стека Сегмент стека не доступен для записи
Сегмент стека DPL сегмента стека не совместим с CPL
Сегмент стека RPL селектора сегмента стека не совместим с CPL
Сегмент кода Селектор сегмента кода превышает границу таблицы дескрипторов
Сегмент кода Сегмент кода не является выполняемым
Сегмент кода DPL не конформного сегмента кода не равен CPL
Сегмент кода DPL конформного сегмента кода больше CPL
Сегмент данных Селектор сегмента данных превышает границу таблицы дескрипторов
Сегмент данных Сегмент данных не доступен для чтения
--------------------------------------------------------------------------------------------------------------------------
Данный сбой может происходить как в контексте исходной задачи, так и в контексте новой задачи. До тех пор, пока процессор полностью не убедится в присутствии нового TSS, исключение происходит в контексте исходной задачи. Как только присутствие нового TSS будет подтверждено, переключение задачи считается завершенным, т.е. регистр TR загружен селектором нового TSS, и если переключение задачи является следствием CALL или прерывания, то поле Компоновки нового TSS будет содержать ссылку на старый TSS. Любые ошибки, обнаруженные процессором после этой точки, обрабатываются в контексте новой задачи.
Чтобы гарантировать доступность TSS для обработки исключения, обработчик исключения типа "неверный TSS" должен вызываться как задача посредством шлюза задачи.