我有一台安装了 Redhat 32 位 SMP 内核的 Linux 机器,机器的 RAM 大小为 16 GB,处理器架构为 64 位。请解答我对此设置的疑惑:
- 操作系统可以完全使用 16GB 内存吗?(我听说在 Windows 操作系统中如果我们使用 32 位,则最大 RAM 容量小于 4 GB)
- SMP 内核与普通内核相比有什么特点
以下是 redhat 安装详细信息
[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 一起使用吗?
答案1
由于存在很多混淆,所以我来告诉你实际情况。
32 位进程的虚拟内存基本上被限制为 4GB,因为 32 位进程使用 32 位指针指向其虚拟内存空间。某些 32 位操作系统将此限制降低到 2GB 或 3GB,因为它们将部分空间用作内核内存。
32 位操作系统通常限制为 4GB 物理内存,因为操作系统使用 32 位指针指向 RAM。PAE 允许操作系统使用更大的指针,从而寻址超过 4GB 的身体的RAM。它对虚拟内存限制没有影响。
但是,在 64 位操作系统上运行的 32 位进程可以使用系统中的所有物理 RAM。它们一次不能以虚拟内存映射的形式使用超过 4GB 的内存。但这远非进程使用内存的唯一方式。(异戊烯醇是一种方式。将文件块的内存映射到 RAM 磁盘是另一种方式。还有很多其他方式。)
请注意,即使您的 RAM 少于 4GB,在 64 位操作系统上,进程也可以使用超过 4GB 的虚拟内存。(例如,它们可以内存映射大型文件或使用巨大的稀疏数组。)
这身体的和虚拟的内存限制经常被混淆。它们是对完全不同事物的限制,几乎完全不相关。物理内存 (RAM) 与虚拟内存 (地址空间) 完全不同。
答案2
32 位内核可以利用 PAE(http://en.wikipedia.org/wiki/Physical_Address_Extension) 来访问超过 4GB 的 RAM,但有一个问题:单个进程仍然限制为 4GB 内存,因此如果您需要应用程序使用超过该内存(例如,像 tomcat 这样的应用程序服务器),您唯一的选择是使用 64 位内核。
答案3
一般来说,在 32 位系统上,您无法寻址超过 4Gb 的 RAM。这是因为内存位置表示为 32 位二进制数(最大 4294967296 位)。一种解决方法是使用聚丙烯酰胺凝胶电泳内核,但它是一种 hack,因为它将寻址推到 36 位并在页表中进行额外映射。它将物理内存地址范围扩展至 64Gb(在 2.3.23 之后的 Linux 上,带 CPU 支持),但正常进程将继续使用 32 位地址空间,并且仍然限制为 4Gb 虚拟内存。对于需要超过 4Gb 内存的应用程序,操作系统可以提供除 PAE 之外的特殊机制,例如异戊烯醇在 Windows 上。
一个更好的解决方案是切换到 64 位发行版,仅靠内核不足以实现 64 位,因为某些库和模块要么只有 32 位,要么只有 64 位,而且切换通常很混乱。
SMP 内核意味着对称多处理扩展,这允许内核运行多个并发进程。如果您有多核处理器,则必须能够同时使用多个内核。