我正在用C开发一个操作系统,我正在努力进行分页。我正在循环中测试我的内核堆,方法是分配内存并输出处理物理和虚拟页面分配的低级内存分配输出。
当PDE 0
时,所有内容都适用于页面0-1023
,但只要分配移至PDE 1
,就会在设置了当前标志的情况下引发页面错误,有时会rw
如果我开始从不同的物理地址分配,那么也会标记。
我是否需要从cr2
获取错误地址并将其映射回PDE
及其所属的页面然后设置或地址为3?之后我需要重新启动指令但是我该怎么做?有什么建议吗?
答案 0 :(得分:2)
页面错误是一个错误异常,这意味着处理器直接调用页面错误处理程序,就像发生了中断一样。
在您处理了页面错误并希望返回调用者之后,您需要通过IRET指令从错误中返回。这将返回代码段,eflags寄存器和EIP(如果故障来自环3,则可能是用户模式SS和ESP)返回到触发故障的指令。