为什么 32 位操作系统不能寻址超过 3.2/3.2 GB 的内存?

7 memory operating-systems 64-bit 32-bit ubuntu

不知道这是否是问这个问题的正确地方。

我一直在读 32 位操作系统(如我现在正在运行的 Ubuntu)不能处理超过 3.2gb 或 3.3gb 的 RAM 内存。

我记得在我的旧计算机体系结构课程中,内存限制是 2^32 个“指针”(不记得正确的词)。我的意思是,内存被表示为一个数组,CPU 可以直接访问它,但要达到它的限制。如果 CPU 是 32 位,那么它可以寻址 2^32 个字,如果它是 64 位 2^64,等等。

所以,如果我之前说的是对的,那么我的操作系统应该能够解决 2^32 = 4294967296 = 4Gb。

我在想,可能会为内核、缓存、缓冲或交换的特定用途保留某种空间。但是没有正确答案。

你能给我一个提示吗?

小智 10

Windows 使用一些用于寻址内存的硬件地址,用于其他硬件(如 USB、SATA、磁盘控制器等)。因此,其中一些硬件地址不能用于您的内存。因此是极限。

据我所知,Unix/Linux CAN 地址比 Windows 的 3.2GB 限制多一点。这是因为 Linux 使用不同的寻址方案。

还有一个称为 PAE(物理地址扩展)的功能,它使 32 位操作系统使用超过 4GB。


Sys*_*138 5

这与 BIOS 必须为基本进程保留的内存有关,例如将数据传输到设备和视频内存。大约 3.2GB 以上的内存(它因系统而异,我见过 3.6GB 和 3.1GB)在需要 PAE 访问它的 4GB 边界上被重新映射。不同的系统以不同的方式处理这种情况。一些系统不会打扰访问它,只为进程提供 3.2 GB 的 RAM。其他人只是无缝地使用速度较慢的 PAE 来处理流程。