我有一台安装了Redhat 32位SMP内核的Linux机器,机器的RAM大小为16 GB,处理器架构为64位。 请澄清我对这个设置的怀疑:
以下是红帽安装细节
[user@applicaton ~]$ uname -a Linux applicaton 2.6.18-164.el5PAE #1 SMP Tue Aug 18 15:59:11 EDT 2009 i686 i686 i386 GNU/Linux [user@applicaton ~]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.4 (Tikanga) [user@applicaton ~]$ lsb_release LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch [user@applicaton ~]$
我们可以在Linux中使用SMP和PAE吗?
既然有很多混乱,让我给你实际的事实。
32位进程从根本上限制为4GB的虚拟内存,因为32位进程在其虚拟内存空间中使用32位指针。 一些32位操作系统将这个限制减less到2GB或3GB,因为它们将一些空间用于内核内存。
一个32位的操作系统通常被限制在4GB的物理内存,因为操作系统在RAM中使用了32位的指针。 PAE允许操作系统使用更大的指针,从而解决超过4GB的物理 RAM。 它对虚拟内存的限制没有影响。
但是,在64位操作系统上运行的32位进程可以使用系统中的所有物理RAM。 一次只能以虚拟内存映射的forms使用超过4GB的内存。 但这远不是进程使用内存的唯一方式。 ( AWE是一种方式,RAM磁盘中文件的内存映射块是另一种方式,还有更多。)
请注意,即使您的RAMless于4GB,在64位操作系统上,进程也可以使用超过4GB的虚拟内存。 (例如,他们可以存储映射大文件或使用巨大的稀疏数组。
物理和虚拟内存限制经常被混淆。 他们是完全不同的东西的限制,几乎完全无关。 物理内存(RAM)与虚拟内存(地址空间)完全不同。
32位内核可以利用PAE( http://en.wikipedia.org/wiki/Physical_Address_Extension )来访问超过4GB的RAM,但有一个问题:单个进程仍然限制在4GB的内存,所以如果你需要应用程序使用更多的(例如,应用程序服务器,如tomcat),你唯一的select是去64位内核。
一般在32位系统上,你不能处理超过4Gb的内存。 这是因为内存位置被表示为32位二进制数(最大4294967296位)。 一个解决方法是使用PAE内核,但它是一个黑客,因为它推动寻址到36位,并在页面表中额外的映射。 它扩展了(在linux 2.3.23之后的w / cpu支持下)物理内存地址范围为64Gb,但正常的进程将继续使用32位的地址空间,仍然会被限制为4Gb的虚拟内存。 需要超过4Gb内存的应用程序,操作系统可以提供除PAE以外的特殊机制,例如Windows上的AWE 。
一个更好的解决scheme是切换到64位分布,单独的内核不足以成为64位,因为某些库和模块只有32位或64位,切换通常是混乱的。
SMP内核表示具有对称多处理扩展,这允许内核运行多个并发进程。 如果您拥有多核处理器,则必须能够一次使用多个核心。