Страничный сбой происходит, когда подкачка страниц разрешена (бит PG регистра CR0 установлен) и процессор обнаруживает одно из следующих условий во время трансляции линейного адреса в физический:
Элемент каталога страниц или таблицы страниц, необходимый для трансляции адреса, имеет очищенный бит Присутствия, что означает, что таблица страниц или страница, содержащая операнд, не присутствует в физической памяти.
Процедура не имеет достаточного уровня привилегированности для доступа к указанной странице.
Процессор обеспечивает для обработчика страничного сбоя два информационных элемента, помогающих диагностировать исключение и восстановить нормальные условия:
Код ошибки в стеке. Код ошибки для страничного сбоя имеет формат, отличный от формата для других особых ситуаций (см. Рисунок 9 -7). Код ошибки сообщает обработчику исключения следующие три вещи:
Произошло ли данное исключение вследствие того, что страница не присутствует, или из-за нарушения прав доступа к странице.
Работал ли процессор в момент исключения в режиме пользователя, или в режиме супервизора.
Состоял ли доступ к памяти, вызвавший данное исключения, в чтении или в записи.
Содержимое регистра CR2. Процессор загружает в регистр CR2 32- разрядный линейный адрес, сгенерировавший исключение. Обработчик исключения может использовать данный адрес для нахождения соответствующих элементов каталога страниц и таблицы страниц. Если во время выполнения обработчика страничного сбоя произойдет еще один страничный сбой, то обработчик должен поместить содержимое регистра CR2 в стек.
-----------------------------------------------------------------| Поле | Значение | Описание |----------------------------------------------------------------- U/S 0 Доступ, вызвавший сбой, произошел при работе процессора в режиме супервизора 1 Доступ, вызвавший сбой, произошел при работе процессора в режиме пользователя W/R 0 Вид досупа, вызвавший сбой, это чтение 1 Вид досупа, вызвавший сбой, это запись P 0 Сбой был вызван отсутствием страницы 1 Сбой был вызван нарушением защиты на уровне страниц----------------------------------------------------------------- 31 15 7 3 2 1 0 ---------------------------------------- | |U|W| | | Не определены |/|/|P| | |S|R| | ---------------------------------------- Рисунок 9-7. Код ошибки страничного сбоя