2012-02-20 21 views
3

我正在开发一个C语言的操作系统,我在分页上挣扎着。我通过分配内存并输出处理物理和虚拟页分配的低级内存分配输出来测试我的内核堆。页面错误后重新启动指令

PDE 0,一切的伟大工程0-1023页,但只要分配移动到PDE 1,如果我开始从不同的物理地址分配一个页面故障引发本标志设置,有时rw标志了。

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

+0

我不确定我是否理解你在第一个问题中提出的问题。这听起来像你已经知道如何处理导致错误的地址?至于返回:页面错误与任何其他中断相同 - 在调用页面错误处理程序之前,EIP/RIP(在这种情况下,指向*导致页面错误*的指令)将保存到堆栈。 – pmdj 2012-02-24 10:47:26

+0

感谢您的回复。页面错误是由于意外分配了已经分配的帧而导致错误的物理帧分配器。另外,通过页面边界传输的kmallocing字节也是一个麻烦。但现在一切都解决了。谢谢! – 2012-02-29 18:10:20

回答

2

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

服务完页面错误并想返回调用者之后,需要通过IRET指令从故障中返回。这将返回代码段,eflags寄存器和EIP(如果故障来自环3,可能将用户模式SS和ESP)返回到触发故障的指令。