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

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

不知道这里是不是问这个问题的合适地方。

我读到过 32 位操作系统(比如我现在正在运行的 Ubuntu)无法处理超过 3.2gb 或 3.3gb 的 RAM 内存。

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

因此,如果我之前说的是正确的,那么我的操作系统应该能够寻址 2^32 = 4294967296 = 4Gb。

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

你能给我一点提示吗?

答案1

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

据我所知,Unix/Linux 可以寻址比 Windows 3.2GB 的限制稍大一点的空间。这是因为 Linux 使用了不同的寻址方案。

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

答案2

这与 BIOS 必须为基本进程(例如将数据传输到设备和视频内存)保留的内存有关。超过 3.2GB 的内存(因系统而异,我见过 3.6GB 和 3.1GB)会被重新映射到 4GB 边界,此时需要 PAE 才能访问它。不同的系统对这种情况的处理方式不同。有些系统不会费心访问它,只为进程提供 3.2GB 左右的 RAM。其他系统则无缝地使用速度较慢的 PAE 来处理进程。

答案3

PAE 不是 Linux 2.6 内核的标准。但它在 2.3.23 内核以上受支持。

PAE 允许在 32 位系统上使用最多 64GB 的 RAM,但是将单个进程限制在 32 位空间内..并且会降低整体性能/而不仅仅是使用 4GB 以上..

我不得不将一些不断增长的数据库操作系统更改为 64 位,以便 MySQL 能够利用已安装的 RAM。速度差异很明显 :D

看看这里 http://en.wikipedia.org/wiki/Physical_Address_Extension#Linux

答案4

== 题外话 ==

这让我想起了 DOS 的旧时代,当时计算机只能看到 640k RAM,尽管可以安装更多。尽管从架构上讲 2^20 字节 (1024k) 是可访问的,但顶部 384k(上部内存区域)只能通过技巧来寻址。

相关内容