Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Описание особых случаев




Код ошибки

В некоторых особых случаях процессор включает в стек 4 байта кода ошибки (error code), причем действительными являются только 2 младших байта, остальные включаются лишь для выравнивания стека. Когда процессор обнаруживает

□ недействительный сегмент TSS;

□ нарушение неприсутствия;

□ нарушение стека;

□ нарушение общей защиты,

он включает в стек обработчика особого случая информацию, идентифицирующую "виновный" дескриптор.

(Страница204)

Формат кода ошибки напоминает селектор, т. к. большинство особых случаев связано с ошибками дескрипторов и содержит следующие поля:

□биты [15: 3] — индекс (номер строки дескрипторной таблицы);

□бит [2] — TI, как и в других селекторах, определяет принадлежность дескриптора к локальной (TI=1) или глобальной (TI=0) дескрипторной таблице;

□бит [1] — I. Если I=1, то индекс в старших битах [15: 3] кода ошибки относится к дескрипторной таблице прерываний IDT;

□бит [0] — ЕХТ=1 означает, что особый случай был вызван аппаратным прерыванием (внешним) или возник, когда процессор обрабатывал другой особый случай.

Если процессор не может сформировать содержательный код ошибки, он включает в стек код, равный 0.

Помимо кода ошибки в некоторых особых случаях дополнительная диагностическая информация находится в других регистрах процессора. Например, при страничном нарушении в регистре CR2 содержится линейный адрес, преобразование которого привело к ошибке. Обработчик этого особого случая может обратиться к соответствующим элементам PDE и PTE. Для особого случая отладки полезная информация содержится в регистре состояния отладки DR6.

Далее приводится краткое описание действий процессора х86 при возникновении особых случаев [3].

Ошибка деления (0) — автоматически формируется, когда в команде div или idiv делитель равен нулю или частное слишком велико для получателя (AL/AX/EAX).

Отладка (1) — формируется в следующих случаях (может быть нарушением или ловушкой):

□ нарушение контрольной точки по адресу команд;

□ ловушка контрольной точки по адресу данных;

□ нарушение общей защиты;

□ ловушка покомандной работы (флаг TF=1);

□ ловушка контрольной точки по переключению задачи (в сегменте TSS бит T-1).

(Страница205)

Немаскируемое прерывание NMI (2) — единственное внешнее радиальное прерывание.

Контрольная точка (3) — формируется при выполнении команды INT3 (код операции — CCh). Передача управления обработчику особого случая является частью команды INT3, адрес возврата в стеке относится к началу следующей команды. Тот же обработчик вызывается при выполнении внешнего прерывания с вектором 03 или двухбайтовой команды int 03.

Переполнение (4) — возникает при выполнении команды into при условии установки в 1 флага переполнения OF. Как и для INT3, передача управления обработчику особого случая является частью команды into, адрес возврата в стеке относится к началу следующей команды. Обычно команда into применяется в компиляторах для выявления переполнения в арифметике знаковых чисел. Тот же обработчик вызывается при выполнении внешнего прерывания с вектором 04 или команды int 04.

Нарушение границы массива (5) — возникает при выполнении команды bound, если контрольная проверка дает отрицательный результат, т. е. проверяемый (первый) операнд не попадает в диапазон значений, определенных вторым (нижняя граница) и третьим (верхняя граница) операндами команды.

Недействительный код операции (6) — генерируется, когда операционное устройство процессора обнаруживает неверный код операции, несоответствие типа операндов коду операции, попытку выполнения привилегированных команд в R-режиме, неверные байты mod r/m или sib, использование префикса блокировки LOCK с командами, которые нельзя блокировать. Характерно, что существует несколько одно- и двухбайтовых кодов, зарезервированных фирмой Intel для развития системы команд, и хотя им в 80486 не соответствуют никакие команды, зарезервированные коды не вызывают особого случая.

Устройство (Под устройством здесь понимается аналог математического сопроцессора — устройство с плавающей точкой FPU) недоступно (7) — возникает в двух ситуациях:

□ процессор выполняет команду esc и бит ЕМ (эмуляция сопроцессора) в регистре CR0 установлен в 1;

□ процессор выполняет команду wait или esc и бит TS (переключение задачи) в регистре CR0 установлен в 1.

В первом случае программист намерен выполнить операции плавающей арифметики программно.

Второй случай может возникнуть после переключения задачи. Бит TS аппаратно устанавливается в 1 при переключении задачи, а первая же встретившаяся в новой задаче команда сопроцессора вызывает особый случай 7, ибо контекст устройства с плавающей точкой старой задачи не сохранен. Обработчик особого случая 7 сохраняет старое состояние устройства с плавающей точкой в сегменте TSS старой задачи и загружает новое состояние устройства из сегмента TSS новой задачи. (В случае работы цепочки вложенных задач обработчик должен программно отследить ту старую задачу, которая последней использовала FPU.) После этого привилегированной командой clts сбрасывается флажок TS и осуществляется возврат на команду устройства с плавающей точкой. Так как теперь флаг TS сброшен, команда сопроцессора будет выполнена.

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

Для определения того, когда о двух нарушениях следует сообщать как о двойном нарушении, процессор подразделяет все особые случаи на три класса:

□ легкие особые случаи — векторы 1, 2, 3, 4, 5, 6, 7, 16;

□ тяжелые особые случаи — векторы 0, 10, 11, 12, 13;

□ страничные нарушения — вектор 14.

Когда возникают два легких особых случая или один легкий и один тяжелый, эти два события допускают последовательную обработку. При появлении двух тяжелых событий их обработать нельзя, поэтому процессор формирует особый случай двойного нарушения. Аналогичное состояние наступает, если после страничного нарушения возникает тяжелый особый случай или второе страничное нарушение, хотя если, наоборот, после тяжелого особого случая возникает страничное нарушение, эти события могут быть обработаны.

Если при попытке вызвать обработчик двойного нарушения возникает любое другое нарушение, процессор переходит в режим отключения. Этот режим аналогичен состоянию процессора после выполнения команды hlt. До восприятия сигналов NMI или RESET никакие команды не выполняются, причем если отключение возникло при выполнении обработчика немаскируемого прерывания, запустить процессор может только сигнал RESET.

Недействительный сегмент TSS (10) — возникает при попытке переключения на задачу с неверным сегментом TSS. Поскольку сегмент TSS может определять LDT, сегменты кода, стека, данных, к особому случаю 10 относятся ситуации с нарушением границ этих сегментов, нарушением прав доступа, запретом записи в сегмент стека и др. Нарушения могут возникать как в контексте старой, так и новой задачи, поэтому обработчик особого случая 10 должен сам быть задачей и вызываться через шлюз задачи (десятая строка IDT должна содержать шлюз задачи).

Неприсутствие сегмента (11) — формируется, когда бит присутствия сегмента в дескрипторе P=0. Это нарушение допускает рестарт, если обработчик особого случая 11 реализует механизм виртуальной памяти на уровне сегментов.

Нарушение стека (12) — возникает в двух ситуациях:

□ в результате нарушения предела любой операции, которая обращается к регистру SS (pop, push, enter, неявное использование стека при обращении к памяти, например, mov ax, [вр+6]);

□ при попытке загрузить в регистр SS дескриптор, который отмечен неприсутствующим.

Нарушение общей защиты (13) — все нарушения защиты, которые не служат причиной конкретного особого случая, вызывают особый случай общей защиты:

□ превышение предела сегмента (кроме стека);

□ передача управления сегменту, который не является выполняемым;

□ запись в защищенный от записи сегмент;

□ считывание из выполняемого сегмента;

□ загрузка в SS селектора сегмента, защищенного от записи;

□ загрузка в регистры SS, DS, ES, FS, GS селектора системного сегмента;

□ загрузка в регистры SS, DS, ES, FS, GS селектора выполняемого сегмента;

□ обращение к памяти через DS, ES, FS, GS, когда в них пустой селектор;

□ переключение на занятую задачу;

□ нарушение правила привилегий и др.

Страничное нарушение (14) — возникает, когда разрешено страничное преобразование и имеет место одна из следующих ситуаций:

□ в элементе каталога разделов или таблицы страниц, используемом для преобразования линейного адреса в физический, сброшен бит присутствия;

□ процедура не имеет достаточного уровня привилегий для доступа к адресуемой странице.

Ошибка операции с плавающей точкой (16) — сигнализирует об ошибке, возникшей в команде устройства с плавающей точкой.

Контроль выравнивания (17) — возникает при нарушении выравнивания операндов. Операнды считаются выровненными, если адрес двухбайтового слова является четным (младший разряд равен 0), адрес четырехбайтового двойного слова кратен 4, а адрес восьмибайтовой структуры данных кратен 8. Для разрешения контроля выравнивания должны выполняться три условия:

□ бит AM в регистре CR3 установлен;

□ флаг АС установлен;

□ выполняется программа на уровне привилегий 3.




Поделиться с друзьями:


Дата добавления: 2015-04-25; Просмотров: 509; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.02 сек.