为什么从虚拟内存地址到具有三级分页(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,这是如何表示页目录表的?
发布于 2019-01-12 14:33:26
在传统的32位分页中,每个页面目录项和每个页表项都是4个字节,因此索引是4倍的。在PAE和64位分页中,每个表项是8个字节,所以索引是8倍的。
1024个4字节的条目适合4KB的页面,因此在两级分页中,每个索引是10位。512个8字节的条目适合4KB的页面,因此在PAE中,每个索引是9位。
你关于4*2^10是4K的观察是恰当的。8*2^9也是4K。
https://stackoverflow.com/questions/54155786
复制相似问题