GDT与Paging

时间:2014-01-15 21:37:54

标签: kernel

我正在尝试启动自定义内核。 QEMU是GDT地址的页面错误。为什么是这样?我认为在使用lgdt指令加载后,不再需要GDT的地址。如果仍然需要,我该如何保持它? (我不能简单地将PTE指向GDT地址,因为我只有2048个指向内核代码。)

1 个答案:

答案 0 :(得分:1)

看起来你在x86中误解了MMU。

要确定数据的物理地址,处理器采用逻辑地址(访问内存时使用的地址)和段选择器,将其放入分段单元以产生线性地址,然后使用分页单元将其映射到物理地址(如果已启用)。

现在看看lgdt instruction description

  

它们是直接加载线性地址的唯一指令   (即,不是段相对地址)和受保护的限制   模式。

如果未启用分页,则线性地址将直接映射到物理地址,因此您可能会说您位于物理空间中。但是,当您启用分页时,Dorothy离开了Kansas:任何地址(CR3寄存器的页面目录的物理地址除外)现在都处于线性空间并进行分页转换。

至于你的问题:看起来你只使用了两页目录条目。为什么?尝试另外一个,鲍勃是你的叔叔。