32位Linux内核的最大内存分配

我正在读这篇文章,讨论如何在32位窗口内核使用的最大内存量为2GB,即使RAM的总量大于4GB。

http://www.brianmadden.com/blogs/brianmadden/archive/2004/02/19/the-4gb-windows-memory-limit-what-does-it-really-mean.aspx \

  1. 这是32位的Linux环境,如32位的Ubuntu 10.04相同吗? IE是最大的内核分配2GB RAM即使总主内存> 4GB?

  2. 如果通过在启用PAE选项的情况下重新编译内核来将内存总量增加到64GB,那么可以为内核使用专门设置的最大内存量是多less? 还是2GB? 或者你可以增加它?

两个内核都将虚拟地址空间分割成用户部分和内核部分。 内核部分在系统中的所有进程之间共享,所以内核被限制在那个可直接寻址的内存中。 系统中的每个用户进程都有自己的地址空间的用户部分。 经典的分裂是在中间完成的,每半个2gb。 使用/ 3gb boot.ini开关,可以指示Windows将分割移动到用户的3gb和内核的1gb。 linux内核在构build时是相当可configuration的,最后我检查了Ubuntu内核是用3:1分割构build的。

PAE允许处理64 GB的物理内存,但是任何给定的页表仍然限制为4 GB。 由于系统上所有进程之间只共享该地址空间的一个内核部分,所以无论如何都将其限制为1或2 GB的可直接寻址的RAM。 可以使用额外的物理内存,但在任何给定的时间内都必须部分映射到虚拟地址空间,并且在需要时更改映射。 因为每个进程都有一个单独的用户地址空间,所以可以有5个不同的进程,每个进程都有2GB自己的内存,映射到您安装的16gb物理内存的不同部分,内核使用另外2GB内存。

请注意,文件系统caching不必始终保持页面映射,因此它可以使用更多的物理内存,内核会在需要时自动映射它的位,然后取消映射,以便映射其他页面。 这个技巧允许内核为caching使用大量的内存,在内核只有1GB的虚拟地址空间的情况下使用几百MB的内存。

另外值得注意的是,在最近的Windows版本中,微软已经制定了各种人为的产品许可限制。 在我工作的个人电脑上卡住的Windows 7 Pro拒绝使用大于4GB的物理内存地址,即使启用了PAE,导致它只能使用安装的4.0 GB RAM中的3.4,因为大块的公羊被重新安置在4GB的标记上,以留下像videoRAM位于4GB以下的空间。

通常情况下,Windows无法分配所有内存的原因是因为某些内存空间用于“videoRam”。

至于你关于PAE的问题,我不确定。 如果你有64GB RAM和PAE,你可能总共使用4个以上的演出,但我认为每个单独的节目将被限制在4个演出公羊。

这个问题来自32位整数提供的地址空间。 2 ^ 32提供了4294967295个值,因此4个ram限制。

根据这个文本 ,Linux在3G上分裂,所以你应该可以一次访问内存的3G,就像你在Windows上使用/ 3GB交换机一样应用到boot.ini 。

至less在理论上。 由于某些原因我不明白,一个testing刚刚certificate,我只能使用这部分内存:

08048000-0804b000 data? 0804b000-081ce000 heap 65e00000-b7395000 mmap-ed heap b7395000-b73ac000 mmap-ed code bf93f000-bf960000 stack 

为什么我不能malloc()的范围从081ce000-65e00000 ,我不知道。