2个月前写过“找回我的4G内存——是谁吞噬了内存(一)”后来有事一直没空写完。现在终于有空了,虽然托了久了点,还是有始有终吧。
上一篇说道因为Intel x86平台中使用了名为内存映射I/O(MMIO)的技术,所以4G内存地址空间是系统中所有存储器的编码范围,这里面既包括有内存编码,也包括了主板BIOS、显卡BIOS、显存以及其他PCI设备的存储器编码。这么看来,32位的系统不能用满4gb的内存似乎是天经地义了。似乎要使用4g的内存就只能投靠64位的系统了。但其实“32位”的系统并非真的就是32位。
首先,我们来看看硬件方面。从主板来看,pm965的芯片组其实是36位地址总线,也就是说支持64g的最大地址空间。(以下图截至于官方说明文件Mobile Intel® 965 Express Chipset Family Datasheet)
而cpu方面,从奔腾4开始就以具有40位的寻址能力。以上两个数据均来自官方。可见我的本本在pm965的主板加载t7250的情况下,实际的物理地址不是32位(4G)而是36位(64G)。
另一方面,由于内存映射I/O(MMIO)的技术使得在开始4G内存地址空间中必有一部份内存地址与其它存储器编码重叠(重叠的部分称之为Memory Hole)。这是由主板设计所决定的,与装64位系统和装32位系统无关。但是我们可以清楚地看到在64位系统下只要硬件支持,就可以完全利用4g甚至超过4g的内存。这除了64位系统的地址搜寻能力超过4g,还有一个重要原因就是,现在的芯片组和内存控制其有一种叫做Main Memory Reclaim AddressRange。通过这个技术可将重叠得部分的内存地址印射到4g以上的地址上去,这个功能同样是由硬件决定的与系统无关。可见64位系统可以真正能用满4g以上的内存很大一部应归功于Memory Reclaim这种能将落在Memory Hole内存回收的技术。
那么是不是32位系统就只具有32位的寻址的能力呢,其实也不然。在现在的系统中有种叫做物理地址扩展(PAE)的系统。通过这种技术32位的系统同样可以识别到4G以上的地址空间。这也是为什么32位的服务器系统可以完整识别4G以上的内存的原因了。这么看来似乎只要开启PAE似乎vista也可以应用4G的内存。于是很多人就企图通过开启PAE来实现,可最终都失败了。其实在vista下PAE是默认开始的有图为证:

可见,vista和服务器版系统同样都是默认开启PAE的。综上所诉,可见在现在的通常配置下硬件都是支持4G以上的内存。而系统方面本应也都可以支持的,但是恐怕微软可能出于对系统稳定方面的考虑,限制了最高的内存容量。
原因已明了,其实无论是硬件还是软件,现在32位的系统都是可以支持4G以上的内存的,不行的原因是由于微软的限制。那么有什么方法可以打破这种限制呢?
0 回复
如果关注本文发展,欢迎订阅本文评论 RSS feed.