我正在用 C 语言开发一个操作系统,但我在分页方面遇到了困难。我通过分配内存并输出处理物理和虚拟页面分配的低级内存分配输出来循环测试我的内核堆。
当PDE 0
时,页面0-1023
一切正常,但一旦分配移动到PDE 1
,就会出现页面错误是通过设置当前标志来引发的,如果我开始从不同的物理地址进行分配,有时也会设置 rw 标志。
我是否需要从cr2
获取错误地址并将其映射回PDE
及其所属页面,然后将地址设置为3?之后我需要重新启动指令,但我该怎么做呢?有什么建议吗?
最佳答案
页面错误是一个错误异常,这意味着处理器直接调用页面错误处理程序,就像发生中断一样。
处理完页面错误并想要返回调用者后,您需要通过 IRET 指令从错误中返回。这会将代码段、eflags 寄存器和 EIP(如果故障来自环 3,则可能还包括用户模式 SS 和 ESP)返回到触发故障的指令。
关于paging - 页面错误后重新启动指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362764/