paging - 页面错误后重新启动指令

标签 paging kernel osdev page-fault

我正在用 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/

相关文章:

需要分页说明

c++ - 如果我有足够的 RAM,是否会发生内存分页?

c - 无法在 win32 项目中包含 ntifs.h

c - lkm函数劫持BUG

linux - 启动 VM 时出错 - CentOS 内核 panic - 未同步 : Attemped to kill

c - 在 C : OSdev 中绘制像素

c - x86-64 内核在设置 IDT 时崩溃

ios - 启用分页的 UICollectionView

sql-server - T-SQL SELECT DISTINCT & ROW_NUMBER() OVER 排序问题

assembly - 使用 gdb 在 qemu 中调试时内存位置错误