解析为什么 Windows 不能完全使用 4GB 物理内存

  应该说从 2007 年下半年开始,家用计算机的内存已经有不断有人直接配置到 4GB 的大内存。但,同时也有一些爱好者发现了一个令人不解的问题,那就是,Windows 操作系统认出的物理内存并不是微软标称的"4GB 物理内存"。这是怎么样的情况呢?在某树解析问题之前,先来了解一下 Windows 2000、XP 和 Vista 关于内存管理等一些方面的差异:

Windows 2000 Professional 与 Server 几个版本之间的差异

版本

支持的处理器数目

支持的物理内存

Windows 2000 Professional

2

4 GB

Windows 2000 Server

4

4 GB

Windows 2000 Advanced Server

8

8 GB

Windows 2000 Datacenter Server

32

64 GB

深入解析 Windows 操作系统,第4版,p47

Windows XP 与 Windows Server 2003 之间的差异

  

支持的处理器数目(32位版本)

支持的物理内存(32位版本)

支持的处理器数目(64位版本)

支持的物理内存(Itanium版本)

支持的物理内存(x64版本)

Windows XP Home Edition

1

4 GB

不可用

不可用

不可用

Windows XP Professional

2

4 GB

2

不可用

128 GB

Windows Server 2003 Web Edition

2

2 GB

不可用

不可用

不可用

Windows Server 2003 Small Business Server

2

2 GB

不可用

不可用

不可用

Windows Server 2003 Standard Edition

4

4 GB

不可用

不可用

不可用

Windows Server 2003 Enterprise Edition

8

32 GB

8

64 GB

64 GB

Windows Server 2003 Datacenter Edition

32

64 GB

64

1024 GB

1024 GB

深入解析 Windows 操作系统,第4版,p48

32 位 Vista 与 64 位 Vista 间的差异

说明

Windows Vista,32 位版本

Windows Vista,64 位版本

系统要求

1 GHz 的32 位(x86)或 64 位(x64)的处理器,512 MB 的内存

1 GHz 的 64 位(x64)的处理器,1 GB的内存(推荐 4GB 内存)

支持的物理内存

32 位的 Vista 版本最大可以访问 4 GB 的内存

64 位的Vista 版本最大可以访问从 1 GB 到超过 128 GB 的内存

各版本支持的物理内存

所有 32 位的 Vista 版本可以访问最大为 4 GB 的内存

Windows Vista 家庭基本版 – 4 GB
Windows Vista 家庭高级版 – 16 GB
Windows Vista 商业版 – 128 GB 或更多
Windows Vista 企业版 – 128 GB 或更多
Windows Vista 旗舰版 – 128 GB 或更多

数据执行保护(DEP)

32 位的Vista 使用基于软件的数据执行保护

64 位的Vista 支持基于硬件的数据执行保护

内核修补保护(PatchGuard)

此功能在 32 位的 Vista 上不可用

此功能在 64 位 Vista 上可用。内核补丁保护有助于阻止恶意程序在更新 Windows Vista 内核。此功能有助于防止内核模式的驱动来自于其他内核服务的扩展或替换。当然,此功能有助于预防第三方程序在修补(更新)任何内核部分时。

驱动签名

32 位版本的 Vista 可以使用未签名的驱动

64 位版本的 Vista 要求所有的设备驱动由开发者添加数字签名

32 位驱动支持

32 位版本的 Vista 支持为 Vista 设计的 32 位驱动

64 位版本的Vista 不支持 32 位驱动

16 位程序支持

32 位版本的 Vista 支持部分的 16 位程序

64 位版本的Vista 不支持 16 位程序

Microsoft 支持中心 – Windows Vista 32 位版本与 Windows Vista 64 位版本的区别描述

  列出了这三个表格,其实从单纯的数据上来看,家用级的 Windows 操作系统应该都是能够完美支持 4 GB 内存的。但是,在 Windows NT 系列产品中有导入过一种概念,这个概念应该说,很多人并不陌生——页面文件,之后又引入了"虚拟内存"的技术。我们这里也稍微解释一下什么叫做"虚拟内存",所谓虚拟内存是基于平面(线性)地址空间的一种内存虚拟系统,使每个进程功能拥有一个独立的很大的私有地址空间。而这个技术是提供了一个内存逻辑视图,它可能并不对应于内存中的物理布局。在运行时,内存管理器借助于硬件的支持,将虚拟地址翻译或映射成真正存放数据的物理地址(深入解析 Windows 操作系统,第4版,p14)。这个技术在 Win9x 上也有使用。而整个内存空间在Windows 下则被定义为"页面"。所以在 Windows XP 的"Windows 任务管理器"的"性能"选项卡中也有"PF 使用率"、"页面文件使用记录",而虚拟内存文件的文件名也是"pagefile.sys","PF"也就是"Pagefile"——页面文件。其实,当你仔细查看时,便不难发现,这"页面文件"其实就是实际的物理内存加上"认可用量"(XP)。这个页面文件实际大小才是 Windows 能够真正管理的内存大小。

  那么,现在可能就会有人提出这样一种想法:禁用所有的虚拟内存,这样不就可以把页面文件全部指向物理内存了吗?对不起,在 Windows 中不可以这样设置。Windows 必须要求在其启动分区下存在一个不小于 200 MB 的可用虚拟内存文件。这里的启动分区是指 Windows 安装的分区。因此,到这里就可以比较单纯地下结论了——Windows 只能最大管理到 4 GB – 200 MB 的物理内存。这个大小则应该是 3896 MB(3.80 GB)。

  但是,事情并不是这么简单。根据 Microsoft 支持中心的《如果计算机上安装了 4 GB RAM,则 Windows Vista 的"系统信息"对话框中报告的系统内存将小于预期值。》文章,包括实际的情况来说。安装了 4 GB 的内存的计算机,就算完成了上面的操作,也不能用到 3.80 GB 的内存。首先,显卡的显存也会被映射到这个总的物理内存值之中,加上其他硬件管理上的计算机原始设计,也需要通过内存中建立相关的 I/O(输入/输出)内存映射地址。这些内容都是被映射在你的内存的最前端的那部分地址,之后才能轮得上用于一般意义上的物理内存空间地址。所以,这样一来,可以被识别的物理内存最大也只能是 3.12 GB 了?不!你还注意到了上面的表格中有高于 4 GB 的几个版本了么?对于家用级的 Windows 产品来说,除了 Windows XP Home Edition、Windows Vista 家庭基本版以外,其他都可以支持到 4 GB 以上的内存空间——当然,必须是使用 64 位的系统。

  到这里,有些人可能还有一个问题。那就是我现在买的 CPU 支持 64 位呀,怎么不可以呢?这里就必须要了解一个很重要的问题,那就是必须你的 CPU、操作系统这两个同时运行在 64 位下,这样你的 CPU 才能访问到 64 位的地址——一个 32 位 CPU 的最大能够访问到的地址也只是 4 GB!而 CPU 的使用特性又是由操作系统决定的。只有操作系统支持 64 位,加上 CPU 的硬件支持 64 位,这才能在 64 位下工作。

  最后,将微软给予的如何在 Windows Vista 下启用 4 GB (或超过 4 GB)的方法转载如下:

如果要使 Windows Vista 使用安装有 4 GB 内存的计算机上的全部 4 GB 内存,则该计算机必须符合下列要求:

  • 芯片集必须至少支持 8 GB 地址空间。具有此功能的芯片集包括(不限于以下列表):
    • Intel 975X
    • Intel P965
    • 采用 Socket 775 插槽的 Intel 955X
    • 支持 AMD 处理器的芯片集,AMD 处理器采用 Socket F、Socket 940、Socket 939 或 Socket AM2 插槽。这些芯片集包括任意 AMD 插槽和 CPU 的组合,其中内存控制器位于 CPU 内。
  • CPU 必须支持 x64 指令集。AMD64 CPU 和 Intel EM64T CPU 支持此指令集。
  • BIOS 必须支持内存重新映射功能。利用内存重新映射功能,可以将先前被外围组件互连 (PCI) 配置空间覆盖的系统内存段重新映射到 4 GB 地址行以上。必须在计算机上的 BIOS 配置实用程序中启用该功能。有关如何启用此功能的说明,请查看计算机产品文档。大多数面向消费者的计算机可能不支持内存重新映射功能。在产品文档或 BIOS 配置实用程序中未使用与此功能有关的任何标准术语。因此,您可能必须阅读有关各种可用 BIOS 配置设置的说明,以确定是否有任何 BIOS 设置启用了内存重新映射功能。
  • 必须使用 Windows Vista x64(64 位)版本。

    以上说明,对于 Windows XP 同样有效,Windows 2000 不适用。