3

我正在用 C 语言开发一个操作系统,但我在分页上苦苦挣扎。我通过分配内存并输出处理物理和虚拟页面分配的低级内存分配输出来循环测试我的内核堆。

当 时PDE 0,一切都适用于页面0-1023,但一旦分配移动到PDE 1,就会引发页面错误并设置当前标志,rw如果我从不同的物理地址开始分配,有时也会引发标志。

我是否需要从中获取错误地址cr2并将其映射回PDE它所属的页面,然后设置或使用 3 的地址?之后我需要重新启动指令,但我该怎么做?有什么建议么?

4

1 回答 1

3

页面错误是一个错误异常,这意味着您的页面错误处理程序被处理器直接调用,就好像发生了中断一样。

在您处理完页面错误并希望返回给调用者之后,您需要通过 IRET 指令从错误中返回。这会将代码段、eflags 寄存器和 EIP(如果故障来自环 3,则可能还有用户模式 ​​SS 和 ESP)返回到触发故障的指令。

于 2012-05-15T20:46:31.330 回答