为什么 x86(32 位)操作系统不能使用超过 3.25 GB 的 RAM 内存,而不是整个 4 GB?

为什么 x86(32 位)操作系统不能使用超过 3.25 GB 的 RAM 内存,而不是整个 4 GB?

我知道 32 位机器不能使用超过 4 GB 的 RAM,因为它们无法寻址这么多的内存地址。

但是我不明白为什么包括 Windows 7 在内的几乎所有 32 位操作系统都不能使用超过 3.25 GB

2^32 = 4294967296 位,即 4 GB 的 RAM。但是我的机器上显示只有 3.25 GB 可用。为什么不能使用其余的内存?

我不是在问如何做到这一点。我想知道为什么正好是 3.25 GB。这个值是如何计算出来的。它是从哪里来的?

答案1

32 位 Windows 客户端版本的物理地址空间为 4 GB。如果所有这些空间都可以用于 RAM,那就太好了,但事实并非如此。该地址空间的一部分用于内存映射硬件设备。CPU 可以通过读取或写入其地址空间与这些设备通信,就像它与 RAM 通信一样。还有其他方法可用,但内存映射硬件速度更快,这对于视频系统等高性能设备很重要。通常,内存映射设备消耗大约 0.5 到 1 GB,但在某些情况下可能会更多或更少。

您不能在同一个 4 GB 地址空间中同时拥有 4 GB RAM 和 0.5 到 1 GB 内存映射设备。这根本装不下。因此,用于硬件设备的任何空间都不能用于 RAM。如果您有 3 GB 或更少的 RAM,通常有多余的地址空间,并且不会丢失 RAM。

如果从 4 GB 中减去用于硬件设备的地址空间,则剩下大约 3 到 3.5 倍的空间可用于 RAM。3.25 GB 只是典型的数字,也是经常引用的数字。

我想所有这些都可以用不同的方式来实现,但这会使设计变得复杂,而且 4 GB 的地址空间在当时是巨大的。现在更改它会产生严重的兼容性问题。而我们在使用 64 位操作系统时已经有了更好的解决方案。64 位操作系统具有更大的地址空间,因此有足够的空间容纳所有内容。

人们经常建议使用 PAE 作为解决方案。这是一种特殊设置,允许使用更大的物理地址空间。冲突的 RAM 可以在 4 GB 以上寻址,然后可以解决。32 位服务器操作系统支持此选项。问题是许多设备驱动程序在这样的环境中表现非常糟糕,导致非常不幸的结果,例如崩溃或数据损坏。因此,客户端系统只是忽略 4 GB 以上的 RAM。这已成为许可限制并在内核中强制执行。

由于 PAE 在客户端系统中不起作用并且 32 位服务器实际上已经过时,因此它本质上是一个无效问题。

相关内容