微软实际上曾提供过让32位x86系统访问4GB以上物理内存的机制,当年英特尔曾联合微软为PentiumPro处理器引入一项名为PAE(PhysicalAddressExtension,即“物理地址扩展”,简称PAE)的技术,在WindowsServer部分版本中,可以让32位x86处理器使用36位物理地址,而不是传统的32位物理地址,从而访问超过4GB的物理内存。不过,面向普通消费者的Windows版本却主动限制了这一能力。原因并非处理器做不到,而是微软担心部分存在缺陷的硬件驱动在访问4GB以上物理内存时导致系统崩溃。具体来看,PAE并不会改变32位程序本身的虚拟地址空间。每个32位程序仍然拥有4GB虚拟地址空间,而普通程序通常只能使用其中2GB,其余空间由系统保留。PAE改变的是操作系统在后台管理物理内存的能力。根据微软相关文档,WindowsServer2003SP1Enterprise最高可以支持64GB物理内存,而Datacenter版本最高可支持128GB。不过,在启用PAE并让系统分配4GB以上的物理内存后,驱动程序就不能再假设物理地址一定能够用32位表示。如果驱动获取物理地址后直接丢弃高位,硬件最终就可能被指向错误的内存位置。同样,一些代码如果直接截断地址,也会丢失其中的信息;而负责DMA传输的驱动还必须严格区分虚拟地址和物理地址,早期部分驱动并没有做好这些处理,因此微软决心在面向普通消费者的Windows版本中限制了相应能力。▲启用了PAE功能的系统微软在相关支持文档中也指出,启用PAE后通常只需要对设备驱动进行一些小规模修改,但这些修改可能很难处理,因为未使用PAE时,驱动程序可以错误地认为物理地址和32位虚拟地址的限制是一致的,而PAE会使这一假设失效。举例来说,如果驱动程序拿到一个需要超过32位才能表示的物理地址,却直接将其截断,那么Windows认为数据写入了一个位置,硬件实际却可能将数据写入另一个位置。一旦错误的数据覆盖了其他内存区域,就可能造成内存损坏甚至系统崩溃。当年的消费级PC尤其容易遇到这一问题。用户可能安装打印机、扫描仪、摄像头、声卡以及各种扩展设备,而这些硬件对应的驱动程序并不一定经过PAE环境下的充分测试。因此,在WindowsXPSP2和WindowsServer2003SP1StandardEdition中,微软对硬件抽象层进行了调整,将物理地址空间限制在4GB以内,从而降低未经测试的驱动程序在PAE环境下破坏内存的风险。这也解释了为什么WindowsServer和面向普通用户的Windows在内存支持策略上存在明显区别。服务器通常运行在经过严格控制的硬件环境中,管理员会尽量使用经过验证的驱动程序,而普通消费者则可能随时安装各种第三方硬件及驱动。因此,微软当年限制客户端版Windows使用4GB以上物理内存,并不是因为32位处理器从技术上无法访问更多内存,而是在硬件驱动生态并不可靠的情况下,为了稳定性主动做出的取舍。随着64位处理器和操作系统逐渐普及,这一问题最终失去了现实意义。32位处理器和32位Windows的市场也持续萎缩,微软最终结束了32位Windows版本的生产,并逐渐将PC生态全面转向64位。至于“微软故意限制普通版Windows内存,是为了逼用户购买昂贵的WindowsServer”这一说法,Chen也曾否认。不过,从当年的价格来看,WindowsServer2003能够支持超过4GB内存的Enterprise版本售价高达3,999美元(亚汇网注:现汇率约合26,895元人民币),普通消费者显然也没有多少理由为了内存支持而选择服务器版。如今,微软又开始重新关注