странный вопрос о трансляции адресов в x86, когда таблица страниц неверна - PullRequest
0 голосов
/ 30 августа 2018

Я работаю над ядром OS и нахожу очень странную проблему. Я перемещаю часть таблицы страниц процесса в пользовательское пространство, только уровень pud и уровень pgd, все еще находящийся в пространстве ядра. Новая запись о пуде неверна. Поэтому, когда я запускаю процесс, происходит сбой страницы для виртуального адреса пространства пользователя и перезагрузки ОС.

Через инструмент аварийного завершения я нахожу содержимое регистра cr2 0xffff8800d1802050. Мой журнал показывает, что новая запись pud - 0xd1802067. Я думаю, что преобразование адресов выполняется аппаратно, поэтому pgd физический, pud физический. когда пуд не правильный, почему cr2 это виртуальный адрес? есть ли какое-то правило импликации?

...