Kernel GDT与分页
我正在尝试启动一个自定义内核。QEMU是GDT地址上的页面错误。为什么会这样?我认为在使用Kernel GDT与分页,kernel,Kernel,我正在尝试启动一个自定义内核。QEMU是GDT地址上的页面错误。为什么会这样?我认为在使用lgdt指令加载它之后,就不再需要GDT的地址了。如果仍然需要它,我如何保持它?(我不能简单地将PTE指向GDT地址,因为我只有2048个PTE,它们都是指向内核代码所必需的。)看起来您对x86中的MMU有点误解 为了确定数据的物理地址,处理器采用逻辑地址(访问内存时使用的地址)和段选择器,将其通过分段单元生成一个线性地址,然后使用分页单元将其映射到物理地址(如果启用) 现在看一下lgdt: 它们是唯一直接
lgdt
指令加载它之后,就不再需要GDT的地址了。如果仍然需要它,我如何保持它?(我不能简单地将PTE指向GDT地址,因为我只有2048个PTE,它们都是指向内核代码所必需的。)看起来您对x86中的MMU有点误解
为了确定数据的物理地址,处理器采用逻辑地址(访问内存时使用的地址)和段选择器,将其通过分段单元生成一个线性地址,然后使用分页单元将其映射到物理地址(如果启用)
现在看一下lgdt
:
它们是唯一直接加载线性地址的指令
(即,不是段相对地址)和受保护的
模式
当未启用分页时,线性地址直接映射到物理地址,因此您可以说您在物理空间中。但是,当您启用分页时,Dorothy将离开堪萨斯州:任何地址(除了CR3寄存器中页面目录的物理地址)现在都位于线性空间中,并经过分页转换
至于您的问题:看起来您只使用了两个页面目录条目。为什么?试着再拿一个,鲍勃是你叔叔。对不起,你用了太多的程序员俚语,我不太明白你在说什么。你能编辑一下你的答案来澄清一下吗?谢谢