为何Windows Vista不支持4GB内存

32位操作系统最多支持4G内存,若用4G,那么在32位XP下,最多只能认出并使用3G多,自Vista SP1后虽然能认出4G,但是实际使用的还是3G多 。对于32位机器,4G是标准支持,也就是32位的最大寻址,PAE标准扩展支持可以到64G,其实就是把高四位拿来做索引 。PAE(AWE)物理地址扩展,这个不是专门对某一系统的,32位的Windows、Unix、Linux都可用,它的扩展需要存储适配器支持,操作系统支持,另外应用程序也必须支持才可以使用超过4G的内存 。
PAE 提高了 IA32 处理器处理大于 4 GB 的物理内存的能力 。微软下列操作系统可以通过 PAE 来利用大于 4 GB 的物理内存,也许你能明白为何32位的服务器系统可以支持超过4GB的内存:
Microsoft Windows 2000 Advanced Server
Microsoft Windows 2000 Datacenter Server
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Datacenter Edition
若要启用 PAE,需要在 Boot.ini 文件中使用 /PAE 参数 。
注意:在 Windows Server 2003 中,仅当服务器使用热插拔内存设备时,才会自动启用 PAE 。在这种情况下,不需要在配置为使用热插拔内存设备的系统上使用 /PAE 开关 。在其他情况下,必须在 Boot.ini 文件中使用 /PAE 开关来利用大于 4GB 的内存 。
典型情况是,在 Windows 2000 或 Windows Server 2003 下运行的进程最多可以访问 2 GB 的内存地址空间(假设未使用 /3GB 参数),其中一些内存是物理内存,另一些是虚拟内存 。运行的程序越多(因而进程也越多),占用的内存地址空间也就越接近 2 GB 这一最大值 。
当出现这种情况时,分页进程将显著增加并且会对性能产生负面影响 。Windows 2000 和 Windows Server 2003 内存管理器使用 PAE 向程序提供更多的物理内存 。这会降低对交换页面文件内存的需要,从而提高了性能 。程序本身并不知道实际的内存大小 。所有的内存管理和 PAE 内存分配都由内存管理器处理,与运行的程序无关 。
当使用 /3GB 参数时,上述信息对于运行的程序有效 。要求 3 GB 内存的程序更有可能让其所需的内存有更多部分在物理内存中,而不是在分页的虚拟内存中 。这将增强那些能够使用 /3GB 参数的程序的性能 。但例外情况是当 /3GB 参数与 /PAE 参数一起使用时 。在这种情况下,操作系统将不使用任何超过 16 GB 的内存 。此行为是由内核虚拟内存空间考虑导致的 。因此,如果系统使用 Boot.ini 文件中的 /3GB 项重新启动,并且系统的物理内存超过 16 GB,则操作系统不使用额外的物理随机存取内存 (RAM) 。重新启动计算机时如果不使用 /3GB 开关,将能够使用所有的物理内存 。
AWE 是内存管理器功能的一套应用程序编程接口 (API),它使程序能够寻址更多内存 — 超过标准 32 位寻址的 4 GB 内存空间 。AWE 使程序能够将物理内存保留为非分页内存,然后将非分页内存部分动态映射到程序的内存工作集 。此过程使内存密集型程序(如大型数据库系统)能够为数据保留大量的物理内存,而不必交换分页文件以供使用 。相反,数据在工作集中进行交换,并且保留的内存超过 4 GB 范围 。此外,超出 4 GB 的内存范围对内存管理器是公开的,并且 AWE 通过 PAE 发挥作用 。没有 PAE,AWE 就无法保留超出 4 GB 的内存 。
以下是一个 Boot.ini 文件的示例,其中已添加了 PAE 开关:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)WINDOWS="Windows Server 2003, Enterprise" /fastdetect /PAE
警告:Boot.ini 文件的内容根据您的配置而异 。
总之,PAE 是 Windows 2000 和 Windows Server 2003 内存管理器的一项功能,它为请求内存的程序提供了更多物理内存 。程序并不知道它正使用的内存中有些在大于 4 GB 的范围内,正如程序不知道它请求的内存实际上是在页面文件中一样 。

推荐阅读