Перезапуск инструкции после сбоя страницы - PullRequest
3 голосов
/ 20 февраля 2012

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

Когда PDE 0, все прекрасно работает для страниц 0-1023, но каккак только распределение переходит на PDE 1, возникает ошибка страницы с установленным текущим флагом, а иногда и с флагом rw, если я начинаю выделять с другого физического адреса.

Нужно ли мне получатьошибочный адрес из cr2 и сопоставить его с PDE и страницей, к которой он принадлежит, а затем установить или адрес с 3?После этого мне нужно перезапустить инструкцию, но как мне это сделать?Есть предложения?

1 Ответ

2 голосов
/ 16 мая 2012

Page Fault - исключение сбоя, которое означает, что ваш обработчик сбоя страницы вызывается процессором напрямую, как если бы произошло прерывание.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...