Memory 使用PAE转换x86中的虚拟内存

Memory 使用PAE转换x86中的虚拟内存,memory,x86,translation,ram,virtual-memory,Memory,X86,Translation,Ram,Virtual Memory,为什么从虚拟内存地址到具有三级分页(2-9-9-12,4K页)的物理地址的转换需要在计算下一个页面索引之前将每个页面索引乘以8 例如,如果我有虚拟地址:0xabde203(二进制:1010 1011 1101 1110 0010 0000 0011) 第一步是提取“Page directory pointer table”索引,该索引由两位-10表示,将其乘以8=>10000,并将其值与外部表物理地址相加,以找到页面目录索引 在正常的x86虚拟转换中,我理解分页是通过两级分页(10-10-12)

为什么从虚拟内存地址到具有三级分页(2-9-9-12,4K页)的物理地址的转换需要在计算下一个页面索引之前将每个页面索引乘以8

例如,如果我有虚拟地址:0xabde203(二进制:1010 1011 1101 1110 0010 0000 0011)

第一步是提取“Page directory pointer table”索引,该索引由两位-10表示,将其乘以8=>10000,并将其值与外部表物理地址相加,以找到页面目录索引

在正常的x86虚拟转换中,我理解分页是通过两级分页(10-10-12)完成的,因此将每个索引(由10位表示)乘以4(2位)将等于页面大小


但是为什么在使用PAE时要乘以8,这是如何表示页面目录表的呢?

在传统的32位分页中,每个页面目录项和每个页面表项都是4字节,因此索引要乘以4。在PAE和64位分页中,每个表项为8字节,因此索引乘以8

1024个4字节的条目适合4KB的页面,因此在两级分页中,每个索引为10位。512个8字节的条目适合4KB的页面,因此在PAE中,每个索引是9位


你认为4*2^10是4K是恰当的。8*2^9也是4K。

首先,谢谢你的回答!但我仍然遗漏了一些东西,那表示页面目录指针中索引的前2位呢?为什么它们也是。乘以8?同样的原因,PDPTE每个都是8字节。没有一整页都没有关系。