WIN2000的4M页面模式
 

作者:陆麟
转载请征得作者同意.
2001.8.13



近日在检视WIN2000的时候意外发现一件WIN2000的内存优化措施. WIN2000在0x80000000~0x9fffffff段的内存区域里使用了4MB的页区域. 这使得我再度捧起了PENTIUM处理器手册. 4MB页面的功能在我手头上1996年版电子工业出版社的PENTIUM处理器手册内被录入了附录H. 对于这些"高级功能",INTEL要求"签订适当的保密协定就可以获得."
对于不时常搜索CPU功能的朋友来说, 4M页面的功能可能会有疑惑. 到目前为止, 我所知的书籍都说了CPU的4K模式, 而对4M模式没有提到.那么4M的页面是怎么一回事呢?
4M页面是PENTIUM以及更新的INTEL处理器的功能之一. 功能通过将CR4寄存器PSE位置1(CR4的第4位). CPU将开启4M模式的识别. 但是光打开该PSE, 还需要页表的配合. 当在4K模式时, 虚拟地址的22~31位指出了页表的INDEX. 虚拟地址的12~21位指出了页表内页表项的INDEX. CR3寄存器保存有页目录表地址. 每个DWORD描述一个页目录的物理地址.. 当需要使用4M的页面时, 虚拟地址的格式有所改变. CR3的指向的页目录表中, 如果某个项的第7位置1,该页就成为一个4M页. 此时,虚拟地址的22~31位指出了4M页对应的物理地址. 该项不解释为页目录的物理地址. 剩下的22位直接被解释为4M页面内的偏移. 我们可以看一下下面的图, 此图解释了4K和4M模式下的地址解析方法.
当使用4M模式时, 有一个好处.
我们知道, CPU通过TLB来缓存解析出来的地址,而TLB是有限的. 而4M模式有另外的TLB配合, 这样, 当4KTLB刷新时, 4M的TLB无需刷新. 这样, 当操作系统的代码和数据存在于4M页面里, OS对应的TLB的刷新就可以减少, 无需频繁地被应用程序的TLB改写. 相对来说就可提高效率.