为什么32位的系统不支持超过4GB的内存? | Kevin's Blog

我回来了……

最近在研究这些自己不懂的东西,分享一下研究结果,大部分文字摘自网络的各个角落。

1.为什么我的32位的系统不支持超过4GB的内存?

首先大概了解一下CPU的寻址能力。CPU{zd0}能查找多大范围的地址叫做寻址能力,CPU在运算的时候需要把数据提取出来就需要知道数据在那里,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。

例如32位CPU的寻址{zd0}范围为2的32次方 2^32 = 4G(,这也是为什么32位的CPU{zd0}能搭配4G内存的原因,再多的话CPU就找不到了。64位系统和64位处理器,{zd0}能上2的64位方的内存,也就是16TB。

2.为什么主板支持4GB内存,并且已经安装上4GB内存,但32位Windows只能使用3.1GB?

原因有两个:
a.受限于Windows 的许可证限制。 Windows内核会在系统启动时检查当前操作系统的许可,从中确定当前允许使用的物理内存{zd0}值。例如Windows XP/Vista许可的上限为4GB。

b.主板,及其上面的各种PCI设备的资源的限制。主板必须支持超过4GB以上内存,并且必须支持内存重影射功能。 主板在不支持内存重影射功能时,所有PCI设备的内存地址范围都落在4GB空间内,占用大约750MB的物理地址空间(与冯·诺依曼结构有关)。因此与此相同地址空间的物理内存将不可用。

当主板打开内存重影射功能时,PCI设备的内存地址将被BIOS影射到4GB以上的空间,所以PCI设备此前所占用的地址空间可以空出来而为物理内存使用。此时系统可用的物理内存可以达到接近4GB。

3.为什么32位的系统可以使用超过4GB的内存?

只要CPU、主板、操作系统都支持并启用PAE(物理地址扩展),那么此时的物理内存地址总线就是36位。 2^36 = 68719476736 = 64 GB 。

另外,当前的x64并非真正使用64位的地址总线,而是48位,所以内存上限是 2^48。所以,现在的32位系统并非纯正的“32位”;x64并非纯正的”64位”。

4.为什么有些设备的驱动程序在4GB内存时无法正常工作?这个问题要联系上面几点来理解,设备的寻址地址超出4GB,这些旧的驱动无法接收正确的地址。

郑重声明:资讯 【为什么32位的系统不支持超过4GB的内存? | Kevin's Blog】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——