现在内存条都是白菜价的时代,很多人手中都是4G大内存了。但是普通的32位操作系统只能认3G多的内存,有很多都是给白白的浪费掉了。近来很多人说使用补丁,能使32位的系统支持4G大容量内存。事实果真如此吗?
一,cpu的寻址能力
一般的cpu厂商标示的多少位cpu,其实说cpu的运算位宽。而CPU的位宽一般是以 min{ALU位宽、通用寄存器位宽、数据总线位宽}决定的!也就是说CPU由ALU、通用寄存器、数据总线三者之中最少的位宽决定!所以cpu的寻址能力和位宽是不能挂钩的。
在AMD K8时代引入64位后,AMD的U寻址位就达到物理寻址40多位,而INTEL在p4 6系列之后物理寻址寻址能力亦达到40位,这大概是1TB,而如果是64位寻址应该是16EB,所以,以CPU位宽衡量CPU寻址能力是一个典型的错误!所以说,cpu是32位,所以支持内存为2^32=4G是错误的,传媒中说64位cpu的最大好处是支持更大的内存也是错误的。
事实上CPU寻址能力因每种CPU设计不同而不同!就正如说32位的X86CPU,其实就在PentiumII是引入了36位的扩展PAE机制(Physical Address Extention)地址位来支持64G内存(源于当时服务器的问题),正常情况下也是用32位寻址,但通过设置相应的寄存器(没记错是cr4)的相应位激活PAE就可以支持64位寻址了!
二、大内存需要主板的支持
大家知道,Intel x86平台中使用了名为内存映射I/O(MMIO)的技术。它是PCI规范的一部分,I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的帧缓存,BIOS,PCI设备就可以使用读写内存一样的汇编指令完成,简化了程序设计的难度和接口的复杂性。
就像是一个大水缸,里面要装一些泥沙,一些油,还要装一些水。泥沙就是DOS兼容区,水就是系统各I/O设备,最上面的油就是可用的内存了。当配置一定的情况下,泥沙和水的比例也就一定了。那能加多少水呢?这个就要问问你的水缸有多大了。那怎么来看这个水缸的大小呢,就奥看主板芯片组的地址总线位数。例如 i945P芯片组只有32位地址总线,因此它对应的地址空间为4GB。表面上看似乎能够支持4GB容纳量的内存。但这4GB地址空间中,有1MB分配给了 DOS兼容存储区,1MB-2GB分配给了内存访问,而2GB-4GB的部分地址空间则优先分配给了显卡帧缓存,PCI/PCI-E设备和BIOS区域,而这一区域也被Intel称作内存映射I/O(MMIO)区域。
由于4GB芯片组地址空间的限制(32条地址线的限制),Intel 945系列及以前的芯片组、NVIDIA nForce Go C6100/C6510,ATI Xpress 1150M,这些芯片组无论如何都不能完全支持4GB内存。具体原因有三方面:其一是芯片组没有设计剩余地址总线来供操作系统来调配;其二是不支持Memory Remap技术,而物理内存的编址必须是连续的,不能被割断;其三是系统开机时必需先从4GB的顶端地址(FFFF_FFFFh)读取BIOS数据, 这是IA32架构和4GB地址空间的局限。
三、操作系统的支持
除了芯片组方面的原因外,不同版本的操作系统对内存容量的支持也不尽相同,这就是我们所提到的造成4GB内存缩水的软件原因。虽然Windows XP系统号称最大可支持4GB容量的内存,但实际上即使在主板打开内存重映射技术的前提下,Windows XP系统仍然不能完全识别4GB容量的内存。
很多方法可以打开Windows操作系统的PAE功能,但是微软为什么没有主动开启呢?
这个是有副作用的!通过PAE利用大内存32位服务器早做到了。但是如果某驱动程序无法正确处理4gb地址以上的内存,就会发生问题. 这也就是为什么ms要禁用pae的最初原因,因为桌面系统上确实存在不少有问题的驱动程序.
总上所述,32操作系统支持4G大容量内存是可行的,但是它受主板芯片组的制约,同时,开启PAE,会影响稳定性
一,cpu的寻址能力
一般的cpu厂商标示的多少位cpu,其实说cpu的运算位宽。而CPU的位宽一般是以 min{ALU位宽、通用寄存器位宽、数据总线位宽}决定的!也就是说CPU由ALU、通用寄存器、数据总线三者之中最少的位宽决定!所以cpu的寻址能力和位宽是不能挂钩的。
在AMD K8时代引入64位后,AMD的U寻址位就达到物理寻址40多位,而INTEL在p4 6系列之后物理寻址寻址能力亦达到40位,这大概是1TB,而如果是64位寻址应该是16EB,所以,以CPU位宽衡量CPU寻址能力是一个典型的错误!所以说,cpu是32位,所以支持内存为2^32=4G是错误的,传媒中说64位cpu的最大好处是支持更大的内存也是错误的。
事实上CPU寻址能力因每种CPU设计不同而不同!就正如说32位的X86CPU,其实就在PentiumII是引入了36位的扩展PAE机制(Physical Address Extention)地址位来支持64G内存(源于当时服务器的问题),正常情况下也是用32位寻址,但通过设置相应的寄存器(没记错是cr4)的相应位激活PAE就可以支持64位寻址了!
二、大内存需要主板的支持
大家知道,Intel x86平台中使用了名为内存映射I/O(MMIO)的技术。它是PCI规范的一部分,I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的帧缓存,BIOS,PCI设备就可以使用读写内存一样的汇编指令完成,简化了程序设计的难度和接口的复杂性。
就像是一个大水缸,里面要装一些泥沙,一些油,还要装一些水。泥沙就是DOS兼容区,水就是系统各I/O设备,最上面的油就是可用的内存了。当配置一定的情况下,泥沙和水的比例也就一定了。那能加多少水呢?这个就要问问你的水缸有多大了。那怎么来看这个水缸的大小呢,就奥看主板芯片组的地址总线位数。例如 i945P芯片组只有32位地址总线,因此它对应的地址空间为4GB。表面上看似乎能够支持4GB容纳量的内存。但这4GB地址空间中,有1MB分配给了 DOS兼容存储区,1MB-2GB分配给了内存访问,而2GB-4GB的部分地址空间则优先分配给了显卡帧缓存,PCI/PCI-E设备和BIOS区域,而这一区域也被Intel称作内存映射I/O(MMIO)区域。
由于4GB芯片组地址空间的限制(32条地址线的限制),Intel 945系列及以前的芯片组、NVIDIA nForce Go C6100/C6510,ATI Xpress 1150M,这些芯片组无论如何都不能完全支持4GB内存。具体原因有三方面:其一是芯片组没有设计剩余地址总线来供操作系统来调配;其二是不支持Memory Remap技术,而物理内存的编址必须是连续的,不能被割断;其三是系统开机时必需先从4GB的顶端地址(FFFF_FFFFh)读取BIOS数据, 这是IA32架构和4GB地址空间的局限。
三、操作系统的支持
除了芯片组方面的原因外,不同版本的操作系统对内存容量的支持也不尽相同,这就是我们所提到的造成4GB内存缩水的软件原因。虽然Windows XP系统号称最大可支持4GB容量的内存,但实际上即使在主板打开内存重映射技术的前提下,Windows XP系统仍然不能完全识别4GB容量的内存。
很多方法可以打开Windows操作系统的PAE功能,但是微软为什么没有主动开启呢?
这个是有副作用的!通过PAE利用大内存32位服务器早做到了。但是如果某驱动程序无法正确处理4gb地址以上的内存,就会发生问题. 这也就是为什么ms要禁用pae的最初原因,因为桌面系统上确实存在不少有问题的驱动程序.
总上所述,32操作系统支持4G大容量内存是可行的,但是它受主板芯片组的制约,同时,开启PAE,会影响稳定性