虽然经典的IA32架构为PC提供了高达4GB的存储空间,可是随着计算规模以及相应存储规模的扩大,4GB的空间有时也会显得不足。在这种情况 下,Intel在IA32的基础上推出了页地址扩展(PAE,Page Address Extension),页面大小扩展(PSE,大概是Page Size Extension的简称)。其后,为了满足更高的要求,Intel开始了IA64(号称安腾)架构的研究。IA64架构是Intel为了于IBM的 PPC(Power PC,采用Power系列的CPU,即PPU)竞争高端市场(如银行、证券等)而研发、生产的。换句话说,IA64并不是为了中低端的PC市场而诞生的, 而是一个纯64位的机器。所以,Intel在设计之初就完全抛弃了IA64与他的拳头产品x86相容的念头(这也是为什么我们几乎看不到安腾处理器用在普 通的桌面PC上的应用,当然除了那些发烧到烧坏脑子的玩家)。
AMD推出了AMD64是完全兼容32位的x86而设计的,它成功地将经典的IA32架构推向了64位,在这种新的平台上,原有的32位操作系统和应用软 件可以不经修改正常运行。同时,操作系统可以有选择地切换到64位,从而拥有和为应用程序提供更大的存储空间。可以说,AMD在PC从32位到64位的过 渡这一问题上,打了一场漂亮仗。
AMD64吓坏了Intel,因为这可能动摇到Intel在中低端市场的占用率,于是慌忙地推出了EM64T(EM64T全称Extended Memory 64 Technology,即扩展64bit内存技术),它是Intel IA-32架构的扩展,也称IA-32e(Intel Architectur-32 extension)。
由于对x86的扩展,技术多多,名词也很多,所以这里分几节来讨论。
一.PSE
1. 概述
Page Size Extension(PSE)技术的作用是在IA32架构中,实现大于传统的4KB的页面。这一技术在最初的Pentium处理器中被引入(注:386、486时代的机器就没有这项功能了),在这类处理器上,可以通过CPUID指令的返回结果,知道处理器是否支持PSE。
PSE技术被引入的目的,是为了满足应用对大内存的申请和使用。设想,在传统的IA32架构下,如果一个应用需要1MB的内存,那么操作系统就应该为其分 配256个4KB的物理页面,为了对这些物理页面进行管理,就需要256x4=1KB的额外空间来存储这些物理页面的页表项。同时,太多的页表项在内存被 引用的时候,也意味这更高的TLB刷新需求。可是,如果把一个物理页面的大小改为1MB,就能够自然地解决这个问题。PSE技术就是在这一个背景下被提 出,用于扩充物理页面大小的。
2. 实现
PSE技术允许4MB的页面于传统的4KB物理页面共存。
在传统的IA32架构中,x86利用两级页表对物理内存进行管理,并实现线性地址到物理地址的映射。页目录中存储了1024个页表地址,而每个页表里又存 储了1024个物理页面的首地址,CR3中存放了页目录的物理地址。而如果使用PSE技术的话(需要设置CR4中的第4位),页目录中的表项就拥有了一个 新的标识(第7位,又称为PS位,Page Size),如果它的PS=1的话,这个页目录表项就指向了一个4MB的大物理页面,而不是象原来那样指向一个页表。同时,使用PSE技术的页目录项实际 上只使用了传统IA32页目录结构中20个地址位的高10位(后面的32-10=22位在寻址的时候全部填0),所以,它指向的是一个4MB对齐的物理页 面!
注意,要使用4MB的大页面,这里的前提是:
1) 需要Pentium以上的CPU;
2) CR4中的PSE位(第4位)为1;
3) 页目录项的PS位(第7位)为1。
3. PSE-36
PSE-36是继PSE技术后推出的扩展技术,在Pentium III处理器以后进入x86的历史。跟PSE一样,为了判断CPU是否支持PSE-36技术,操作系统也可以使用CPUID指令来进行。
我们知道,PSE技术能够在IA32的基础上,让x86机器管理4MB的物理页面,而且,就改动的规模来说,PSE技术仍然使用了IA32的页表到页目录的结构,这是因为无论采用PSE与否,机器仍然还是32位的。可是,如果把地址总线扩展到36位呢?
我们知道,IA32采用的是固定的页目录到页表的结构,页目录和页表的每个位几乎都有特定的含义。如果地址总线扩展增加了4位(成为36位),为了满足寻 址(即使这个时候用户程序仍然使用32位的逻辑地址)和内存管理的需要,最直接的方法是对已有的两层地址映射结构进行扩展,成为3层结构(这种做法我们将 在PAE中讲述)。可是,这样,操作系统必须作出比较大的修改,才能够对36位地址进行支持。有没有能够保留IA32两层地址映射,同时又能实现到36位 物理地址(64GB)映射的方法呢?PSE-36就是为这一特殊需要而制定的。
我们知道,在传统IA32中,无论是页目录项还是页表项,都是用高20位来存储它所指向的页表或物理页面的物理地址的。而在使用PSE寻址4MB大页面的 时候,页目录项只使用了其中的高10位来存储物理页面的地址,而在PSE-36中,则使用了高14位,这样&