32位的xp为什么不支持4G内存
最近在研究给xp内核打补丁,让其完全支持4G内存。但还没有试验成功,补丁发不出来先发个文出来吧……
随着计算机的不断发展。个人PC的内存不断更新换代,4G内存也将马上成为标配,然而对于一个32位操作系统而言,究竟能否完全使用这4G内存呢?
如果你有4G内存,然后又安装了32位的winxp系统,那么你会发现在系统属性里看到你的内存总数却不足4G,有的电脑能用到3.25G,有的电脑只能用到3G。这是为什么呢?
对于一个32位系统而言,他的物理寻址上限是4G,那么是说cpu最多可以对4G的物理内存操作吗?不!在这4G地址范围中,有很大一部分是保留给PCI设备的,为什么呢?因为cpu如果使用传统I/O端口与这些pci设备通讯,传输速率受到很大的限制。但是如果将这些设备映射出来,使用内存地址空间来工作,性能就大大地提高了。
因此这4G地址空间,有很大一部分被PCI设备占用了。4G内存中有一部分是不能被使用的,这部分被占用的地址空间叫MMIO空间。
由于MMIO占用的空间过于巨大——可以接近1GB左右,浪费了大量有限的内存。因此,芯片组厂商们如Intel就开始考虑采用一些技术来回收利用这部分丢失的MMIO内存空间(实际上,MMIO的存在可以说是PCI标准所规定的,而PCI标准,就是Intel制定并力推的,因此解决这个问题,Intel责无旁贷)。Intel在服务器/工作站芯片组上率先布署了Memory Remapping(内存重映射)技术,用以解决这个问题。这项技术不依赖于操作系统,可以将把MMIO占用的那些物理内存映射到系统地址空间更高的位置上去,比如超过4G的位置。
等等,刚才说,超过4G的位置?32位cpu不是只能寻址4G地址空间吗?映射到4G之外,cpu仍然不能对他们进行寻址啊?
其实。自从奔腾Pro开始IA32 CPU就有36条地址总线了,而不是32条,这项技术,叫做物理地址扩展(PAE)。PAE使32位cpu拥有36条地址总线最多可以寻址打到64G的地址范围。
这样一来,通过PAE+MemRemap技术,就可以使4G内存得以完全使用了。
但是内存重映射技术出现的较晚,对于Intel平台,965及以后的芯片组都支持这项技术。对于915或945这些不支持内存重映射技术的芯片组而言,即使打开了PAE功能,也不能完全识别4G内存。
但是有人想说了,那为什么我的P965主板插了4G内存,在xp里面仍然显示3.25G内存呢?是xp不支持吗?
不是这样的,XP内核完全支持PAE技术,理论上是可以支持4G以上内存的,可是微软为了赚钱,在内核里设置了一项许可检查——假如当前的许可不是Server版本,那么将阉割掉4G以上地址空间上的全部物理内存。因此,即使你开了PAE技术,即使你的主板支持内存重映射,使用32位的xp操作系统,仍然不能使用全部的4G内存。因为内核刻意地设置了最高地址上限为4G。
windows所有版本的内存限制可以参考MSDN Memory Limits for Windows Releases(注意微软这里指的内存限制,其实就是最高物理内存寻址上限)
细心读者可能发现,windows2000 advance server 支持8GB版本,windows2000 datacenter 支持32G内存。连win2000都支持,xp是没道理不支持的。这就能得出一个结论——XP阉割掉了多余的内存……
Leave a Reply