Я разрабатываю операционную систему на C, и я борется с поисковым вызовом. Я тестирую кучу ядра в цикле, выделяя память и выводя на экран вывод распределения памяти низкого уровня, который обрабатывает физическое и виртуальное распределение страниц.Перезагрузка инструкции после ошибки страницы
Когда PDE 0
, все работает отлично подходит для страниц 0-1023
но как только распределения переходит к PDE 1
, ошибка страницы поднимается с настоящим флагом, а иногда и rw
флаг тоже, если я начинаю выделять из другого физического адреса.
Должен ли я получить адрес сбоя от cr2
и отобразить его обратно на PDE
и страницу, к которой он принадлежит, а затем установить или адрес с 3? После этого мне нужно перезапустить инструкцию, но как мне это сделать? Какие-либо предложения?
Я не уверен, что понимаю, что вы спрашиваете в своем первом вопросе. Похоже, вы уже знаете, что делать с адресом, вызывающим ошибку? Что касается возврата: ошибки страницы такие же, как и любое другое прерывание - EIP/RIP (в этом случае, указывая на * инструкцию, вызвавшую ошибку страницы), сохраняется в стек до того, как вызывается обработчик ошибок на странице. – pmdj
Спасибо за ваш ответ. Ошибка страницы была вызвана неправильным распределением фрейма, который был выделен ранее выделенным кадром. Кроме того, проблема была связана с байтами в килоблоке, которые прошли границу страницы. Но все решено сейчас. Благодаря! –