在32位RHEL机器上使用内存

时间:2009-05-28 10:50:48

标签: linux memory 32-bit

我在基于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

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

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

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:3)

您的Linux系统支持Physical Address Extension

答案 1 :(得分:2)

存在不同的“级别”记忆。无论操作系统如何,在一个进程中解决超过4Gb的问题是不可能的,因为你的指针太小而不能超过这一点 - 这是32位w.r.t内存的基本限制。在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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

您的应用程序仅限于2-3 GB的地址空间,具体取决于操作系统选项。例如,使用地址窗口扩展或内存映射文件,一个应用程序可以有效地使用更多的物理RAM,而不是使用地址窗口扩展或内存映射文件将内存部分放入和放出该地址空间。