4G Memory windows x86 OS

最近升级4G Memory 需要分析系统内存使用状况。特摘抄如下:

确实是只能认到3.25G,要是想用到4G,可以装以下的系统:
Windows XP Professional x64 Edition(即64位的XP)
windows server 2003(即服务器系统,32位或64位版本都可以)
windows 7(测试版系统,但只有64位可以用4G以上的内存)
windows server 2008(也是服务器系统,32位或64位版本都可以)
windows vista 64(最强系统,vista64旗舰版可以识别2048G内存)
尽管从许可上来说,32位客户端SKU的最大内存支持是4GB,但是实际上的限制会更低,这要看计算机的芯片组以及所连接的设备。这是因为物理地址映射不仅仅包含物理内存,还包含设备内存,X86和X64位系统会把所有设备内存映射到低于4GB的地址边界,以便确保和32位操作系统的兼容性,这些操作系统不知道如何处理超过4GB的地址部分。如果计算机配备4GB内存和类似显卡、声卡和网卡这样的设备,Windows会给这些设备内存分配共计500MB空间,而4GB物理内存中的500MB只能占用超过4GB的地址边界,如下图所示。 

其结果是,如果计算机拥有3GB或者更多内存,同时又运行32位Windows客户端操作系统,我们可能无法享受到所有内存。在Windows 2000、Windows XP和Windows Vista RTM系统上,我们可以在系统属性对话框、任务管理器的“性能”标签页上看到可以访问的物理内存,在Windows XP和Windows Vista(包含SP1)中,我们还可以在Msinfo32和Winver工具窗口里看到这些信息。在Windows Vista SP1中,其中某些工具会显示系统所安装的物理内存,而不是可以使用的内存,可以参考这篇微软知识库文章。
在笔者的4GB笔记本电脑中,如果启动到32位Windows Vista,可用的物理内存是3.5GB,可以在Msinfo32工具中看到。 

我们可以使用Alex Ionescu所开发的Meminfo工具来查看物理内存的分配情况。在这台笔记本电脑上运行Meminfo,并加上-r参数以便转储物理内存的分配情况,结果如下图所示: 

注意其中内存地址范围中存在两个缺口,其中一个从页9F0000到页100000,另一个缺口从DFE6D000到FFFFFFFF(4GB)。但是,如果启动到64位Windows Vista,所有的4GB内存都可以使用,剩余的500MB物理内存位于高于4GB边界的地址部分,我们可以看到Windows是如何使用这500MB物理内存的: 

到底是谁占据了4GB以下的内存地址?设备管理器可以回答这个问题。要访问该工具,可以运行“devmgmt.msc”,在“查看”菜单中选择“依连接排序资源”选项,然后展开“内存”节点。在笔者的这台笔记本上,最大的映射设备内存,果然是显卡产生的,共占据256MB内存,从E0000000-EFFFFFFF: 
 
其他设备占用其他大部分的地址空间,PCI总线会保留一部分地址范围,以供系统引导时某些设备固件所使用。
在带超级显卡的高端游戏计算机上,4GB以下的内存地址会减少很大一块。举个例子,笔者曾经购买过一台游戏计算机,带4GB内存和两块1GB的显卡。在采购时,笔者并没有指定操作系统版本,还以为他们会安装64位版本的Windows Vista,但是实际上安装的是32位版本,结果Windows只能访问2.2GB的内存。安装64位Windows后,我们可以在Meminfo的结果中看到从8FEF0000到FFFFFFFF存在如此大的内存空洞: 
 
设备管理器显示,在2GB的内存空洞中,有512MB是显卡所占用的(每块显卡占用256MB),看起来设备固件保留其他更多的动态映射内存: 
 
哪怕计算机只有2GB内存,在32位Windows中也无法使用所有的内存,因为芯片组会为设备强制保留一部分内存范围。我们的一台家庭公用计算机,几个月前从一家OEM厂商那里购买的,显示安装了2GB内存,但是只有1.97GB是可用的: 
 
其中7E700000到FFFFFFFF的物理地址范围是给PCI总线和设备所保留的,理论上还有最多7E700000字节(1.976GB)的物理地址空间,但是其中还有一些还要给设备内存所保留,这就是为什么Windows报告说1.97GB。 
 
因为设备厂商需要向微软硬件质量实验室(WHQL)同时递交32位和64位驱动程序,才能获得驱动程序签名认证,目前绝大多数设备驱动程序能够处理超过4GB边界的物理地址。但是,32位Windows会继续忽略超出4GB的内存空间,因为很难衡量这样做的风险,如果没有问题的话,OEM厂商应该转向64位Windows。
使用64位Windows,我们能够完全使用所有的系统内存(SKU的最大限制),而不管容量多大,如果我们要购买高端游戏计算机,则应该请OEM厂商预装64位Windows。
是否拥有足够的内存?
不管系统拥有多少内存,问题是内存是否足够?不幸的是,我们没有快又准的方法来确切地了解。这里只有一个大致的办法可以使用,该方法基于对系统“可用”内存的长期监控,特别是在运行内存密集型负载的时候。如果物理内存没有分配给进程、内核,或者驱动程序,则Windows会把这部分物理内存定义为可用内存。顾名思义,可用内存可以在需要时分配给某个进程或者系统。Windows当然会对这部分内存进行最大限度的利用,会将其用作文件缓存(备用列表),还有存放清零内存(清零页列表),另外,Windows Vista还会使用SuperFetch功能,把数据和代码预加载到备用列表中,确保今后会使用的代码和数据,得到优先处理。
如果可用内存变少了,这说明进程或者系统正在大量消耗内存,如果可用内存在相当长的时间内都接近0,则可以考虑添加内存,有助于增加性能。有很多方法可以追踪可用内存。在Windows Vista里,我们可以在任务管理器里查看“物理内存使用记录”,以便间接地追踪可用内存,确认其是否长期逼近100%。笔者的8GB桌面计算机的任务管理器如下图所示:

在所有版本的Windows中,我们可以使用性能监视器来查看可用内存,只需在Memory计数器组中添加Available Bytes计数器即可: 
 
我们可以在Process Explorer的“System Information”对话框里查看可用内存的即时值,也可以在Windows Vista之前的Windows系统的任务管理器的“性能”标签页里查看可用内存大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值