内存分布
IA32e下的地址用64位来表示,但CPU只使用了其中的前52位,即4PB的最大物理内存寻址空间,而开启分页后,CPU只使用其中48位,即256TB的最大虚拟内存寻址空间,而到了Windows,则更是只使用了其中44位,即只用16TB的虚拟内存寻址空间,其中0000000000000000-000007FFFFFFFFFF是用户层地址空间,而FFFFF80000000000-FFFFFFFFFFFFFFFF则是内核地址空间,前16位会被CPU忽略,而构造的页表则会忽略44-48位。
下面是Windows在IA32e下的虚拟内存分布图:
页表构成
和传统的IA32的两级页表以及开启PAE后三级的三级页表不同,IA32e的页表是四级页表,每级占9位,共36位,加上页内偏移12位,正好48位。
第一级页表叫做PLM4表,每一个表项8字节,共512项,每一项表示128GB,指向了对应的第二级页表叫做PDPT,既页目录指针表,每一个表项8字节,共512项,每一项标识1GB的虚拟内存空间(这个结构在IA32中也有,但需要开启PAE并且只有4项),其既可以指向一个1G的大页面,也可以指向一个第三级页表(取决于PAT位的状态)也就是IA32下熟知的PageDirectory,而PDT同样既可以指向一个2M的大页面,或者指