Intel x86 Assembly& Microarchitecture 物理地址扩展(PAE)

示例

介绍

随着内存价格下降,基于Intel的PC能够负担得起越来越多的RAM,从而减轻了许多用户在运行同时生产的越来越大的应用程序时遇到的问题。虚拟内存允许虚拟地“创建”内存-将现有的“旧”页面内容交换到硬盘上以允许存储“新”数据-这减慢了程序的运行,因为页面“颠簸”不断交换数据打开和关闭硬盘。

更多内存

需要的是能够访问更多物理RAM的能力-但是它已经是32位地址总线,因此,任何增加都将需要更大的地址寄存器。还是会?开发Pentium Pro(甚至Pentium M)时,作为一个临时措施,直到可以生产64位处理器为止,在更改寄存器位数的情况下添加更多的物理地址位(允许更多的物理内存)。之所以可以实现,是因为虚拟地址无论如何都映射到物理地址-只需更改映射系统即可。

设计

现有系统最多可以访问32位物理地址。增加此值需要将页面输入结构从32位完全更改为64位。决定将最小粒度保持在4K页,因此64位条目将具有52位地址和12位控制(就像以前的条目具有20位地址和12位控制)。

具有64位条目,但页面大小(仍为4K)意味着每个页面表或目录只有512个条目,而不是之前的1,024个。这意味着32位虚拟地址的分配方式与以前不同:

+-----+-----------+------------+------------+
| DPI | Dir Index | Page Index | Byte Index |
+-----+-----------+------------+------------+
 3   3 2         2 2          1 1          0   Bit
 1   0 9         1 0          2 1          0   number

 DPI        = 2-bit index into Directory Pointer Table
 Dir Index  = 9-bit index into Directory
 Page Index = 9-bit index into Page Table
 Byte Index = 12-bit index into Page (as before)

从目录索引和页面索引中都砍掉一位,就为第三层映射提供了两位:他们称其为页面目录指针表(PDPT),该表恰好是四个用于处理四个目录的64位条目的表,而不是前一个目录一。现在,PDBR(CR3)指向PDPT-由于CR3只有32位,因此需要将其存储在前4 GB RAM中以进行访问。请注意,由于的低位CR3用于控制,因此PDPT必须从32字节边界开始。

页面大小扩展(PSE)

而且,由于以前的4MB Pages是一个好主意,因此他们希望能够再次支持大型Pages。但是,这次删除层系统的最后一层并不会产生10 + 12位4MB页面,而是9 + 12位2MB页面。