使用PAE在x86中转换虚拟内存

时间:2019-01-12 00:39:49

标签: memory x86 translation ram virtual-memory

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

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

第一步是提取“页面目录指针表”索引,该索引由两位表示-10,将其乘以8 => 10000,并将其值与外部表物理地址求和,以找到页面目录索引。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

您观察到4 * 2 ^ 10是4K很合适。 8 * 2 ^ 9也是4K。