Значение указателя инструкций после обработки ошибки страницы

Честно говоря, я действительно запутался с этой концепцией, связанной с виртуальной памятью.

Q1) Когда происходит сбой страницы, процессор сначала заканчивает выполнение текущей инструкции, а затем перемещает содержимое регистра IP (адрес следующей инструкции) в стек? Или он прерывает выполнение текущей инструкции и перемещает содержимое регистра указателя инструкции в стек?

Q2) Если второй случай истинен, то как он возобновляет прерванную инструкцию, потому что, если он возобновляется, стек содержит значение указателя инструкции, которое является ничем иным, как адресом следующей инструкции. Таким образом, он никогда не возобновит инструкцию, где произошла ошибка страницы.

Что я думаю
Я думаю, что второй случай звучит неправильно. Путаница произошла, когда я читал Принципы операционной системы Зильбершаца и Гальвина. Во что они написали

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

Но указатель инструкции всегда указывает на адрес следующей инструкции, поэтому он означает, что в соответствии с тем, что пытается передать эта книга, мы уменьшаем значение IP только для того, чтобы возобновить выполнение инструкции, где произошла ошибка страницы?

1 ответ

Решение

В руководстве по системному программированию In tel, глава 6.5, говорится

Неисправности. Неисправность - это исключение, которое, как правило, может быть исправлено и которое после исправления позволяет перезапустить программу без потери непрерывности. Когда сообщается о сбое, процессор восстанавливает состояние машины до состояния до начала выполнения команды сбоя. Адрес возврата (сохраненное содержимое регистров CS и EIP) для обработчика сбоев указывает на инструкцию сбоя, а не на инструкцию, следующую за инструкцией сбоя.

Отказ страницы классифицируется как сбой (там нет никаких сюрпризов), поэтому, когда сбой страницы произошел, вы находитесь в состоянии "до того, как это произошло" - ну, на самом деле, нет, потому что вы находитесь в обработчике сбоя (так EIP и ESP) определенно отличаются, также CR2 содержит адрес), но когда вы вернетесь, это будет состояние раньше, чем когда-либо, только с изменениями, внесенными обработчиком (так, поместите туда страницу или убейте процесс)

Другие вопросы по тегам