1

我在基于 AMD64 的硬件上使用 32 位 RHEL 4.4。这是 uname -a 的输出

$ uname -a
Linux zulu 2.6.9-42.0.10.ELsmp #1 SMP Fri Feb 16 17:17:21 EST 2007 i686 athlon i386 GNU/Linux

我在这个系统上安装了 8G 内存,操作系统是 32 位,我认为我的系统将无法使用完整的 8GB 内存。但是当我运行top时,我看到以下内容 -

Mem:   8309168k total,  8292028k used,    17140k free,     7096k buffers

因此,top 能够查看所有 8GB 内存。

如果我在同一台机器上安装 32 位 WinXP,任务管理器只会显示 3 GB 可用。

我的问题是 - 32 位操作系统如何能够看到 8GB 内存?这是否意味着我的应用程序将能够使用更大的地址空间?为什么 32 位 Linux 和 32 位 WinXP 之间有区别?

谢谢!

4

4 回答 4

3

您的 Linux 系统支持物理地址扩展

于 2009-05-28T11:03:53.990 回答
2

内存有不同的“级别”。无论操作系统如何,在一个进程中处理超过 4Gb 的地址都是不可能的,因为您的指针太小而不能超过 - 这是 32 位内存的基本限制。在 linux 和 windows 以及大多数“传统”操作系统上,我猜想,32 位虚拟地址空间被分成内核的一部分和进程的一部分,因此每个进程的可寻址内容少于 4 Gb。

但是,操作系统仍然可以使用超过 4 Gb - 例如,有 2-3 个进程,每个进程消耗 2 Gb 的内存。即使是 32 位 CPU 也可以寻址超过 4 Gb 的内存(在硬件级别),但是在虚拟地址空间中,您总是受到 32 位指针的限制。

老新东西对物理地址空间、虚拟地址空间和co的区别有很好的解释:http: //blogs.msdn.com/oldnewthing/archive/2004/08/18/216492.aspx

于 2009-05-28T11:06:13.017 回答
1

启用此功能的方法称为“PAE”(物理地址扩展)。您的 CPU 能够在内部使用 36 位地址,并且您的操作系统支持它。不幸的是,Windows XP 仅使用 PAE 来支持 NX 位(无执行位,当处理器尝试从标有该位的页面执行代码时会导致异常发生)。32 位 Linux 内核支持 PAE。

于 2009-05-28T11:04:34.253 回答
1

较新的 i386 兼容 CPU 可以使用 PAE 模式寻址超过 4 GB。Windows XP 人为地将地址空间限制为 4GB,因为有太多编写不佳的硬件驱动程序假设所有 DMA 都将在 4 GB 以下的内存中完成。因此,4 GB 地址空间中的大约 1 GB 映射到硬件,其余映射到物理 RAM。Windows 服务器版本没有此限制。支持 PAE 的 Linux 内核也不限制内存。如果我没记错的话,这两个都支持高达 32GB。

您的应用程序的地址空间限制在 2-3 GB 之间,具体取决于操作系统选项。例如,一个应用程序可以有效地使用更多的物理 RAM,而不是通过在地址空间内外开窗部分内存、使用地址开窗扩展或内存映射文件。

于 2009-05-28T11:11:42.523 回答