我正在尝试启动自定义内核。 QEMU是GDT地址的页面错误。为什么是这样?我认为在使用lgdt
指令加载后,不再需要GDT的地址。如果仍然需要,我该如何保持它? (我不能简单地将PTE指向GDT地址,因为我只有2048个指向内核代码。)
答案 0 :(得分:1)
看起来你在x86中误解了MMU。
要确定数据的物理地址,处理器采用逻辑地址(访问内存时使用的地址)和段选择器,将其放入分段单元以产生线性地址,然后使用分页单元将其映射到物理地址(如果已启用)。
现在看看lgdt
instruction description:
它们是直接加载线性地址的唯一指令 (即,不是段相对地址)和受保护的限制 模式。
如果未启用分页,则线性地址将直接映射到物理地址,因此您可能会说您位于物理空间中。但是,当您启用分页时,Dorothy离开了Kansas:任何地址(CR3寄存器的页面目录的物理地址除外)现在都处于线性空间并进行分页转换。
至于你的问题:看起来你只使用了两页目录条目。为什么?尝试另外一个,鲍勃是你的叔叔。