Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kernel GDT与分页_Kernel - Fatal编程技术网

Kernel GDT与分页

Kernel GDT与分页,kernel,Kernel,我正在尝试启动一个自定义内核。QEMU是GDT地址上的页面错误。为什么会这样?我认为在使用lgdt指令加载它之后,就不再需要GDT的地址了。如果仍然需要它,我如何保持它?(我不能简单地将PTE指向GDT地址,因为我只有2048个PTE,它们都是指向内核代码所必需的。)看起来您对x86中的MMU有点误解 为了确定数据的物理地址,处理器采用逻辑地址(访问内存时使用的地址)和段选择器,将其通过分段单元生成一个线性地址,然后使用分页单元将其映射到物理地址(如果启用) 现在看一下lgdt: 它们是唯一直接

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

看起来您对x86中的MMU有点误解

为了确定数据的物理地址,处理器采用逻辑地址(访问内存时使用的地址)和段选择器,将其通过分段单元生成一个线性地址,然后使用分页单元将其映射到物理地址(如果启用)

现在看一下
lgdt

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

当未启用分页时,线性地址直接映射到物理地址,因此您可以说您在物理空间中。但是,当您启用分页时,Dorothy将离开堪萨斯州:任何地址(除了CR3寄存器中页面目录的物理地址)现在都位于线性空间中,并经过分页转换


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

对不起,你用了太多的程序员俚语,我不太明白你在说什么。你能编辑一下你的答案来澄清一下吗?谢谢