我已经安装了一个32位 RHEL操作系统在一个64位系统。
从维基页面PAE:
Linux 内核从 2.3.23 版本开始包含完整的 PAE 模式支持,Linus Torvalds 在 1.3.15 中提到了 PAE 的 4 MB 页面支持,[18] 允许在 32 位计算机上访问高达 64 GB 的内存。
其中一台服务器的当前内核版本是:
2.6.32-431.17.1.el6.i686
问题1
内核版本是否意味着如果我添加另一个24GB RAM 到我已有的8GB RAM,整个32GB物理内存将变得可用吗?
目前系统显示8GB RAM 可用(我使用free
命令来检查它)。
问题2
我仍然对虚拟内存概念感到困惑。
32位系统如何使用虚拟内存?
我读到了32位RHEL 将按块使用内存3GB。
这是否意味着,在任何时间点,只能有最大的3主存GB?
我想自从我有了32GB内存随时可用32GB 数据可以驻留在主存储器中。特别是,我试图理解来自的答案这里:
每个进程都在自己的地址空间中运行,并且 32 位将每个进程的地址空间限制为大约 3GB。 32 位应用程序使用的内存总和完全无关。没有什么可以绕过的。
答案1
好吧,我不希望得到比以下提供的更简洁的答案这里。
我对32位操作系统的理解是,地址以32位表示,因此操作系统最多可以使用2^32 = 4GB内存空间
最那个的是过程能地址是4GB。你可能会感到困惑记忆和地址空间。 进程可以拥有比地址空间更多的内存。那是完全合法和在视频处理和其他内存密集型应用程序中很常见。 一个进程可以分配几十GB的内存,并随意将其换入或换出地址空间。只有 2 GB 可以进入用户一次的地址空间。
如果您家里有一个可停放四辆车的车库,您仍然可以拥有五十辆车。你只是不能把它们全部放在你的车库里。你必须在其他地方有辅助存储来存储至少 46 个;您将哪些汽车停在车库中以及将哪些汽车停在街边的停车场中,这一切都取决于您。
这是否意味着任何32位操作系统,无论是Windows还是Unix,如果机器的RAM +硬盘上的页面文件超过4GB,例如8GB RAM和20GB页面文件,永远不会“内存用完”?
绝对不是这个意思。单个进程可能使用比这更多的内存!再次进程使用的内存量几乎与进程使用的虚拟地址空间量完全无关。就像你车库里的汽车数量与你拥有的汽车数量完全无关一样。
而且,两个进程可以共享非私有内存页。如果二十个进程都加载相同的 DLL,则这些进程都共享该代码的内存页。他们不分享虚拟内存地址空间,他们分享记忆。
如果还不清楚的话,我的观点是您应该停止将内存和地址空间视为同一件事,因为它们根本不是同一件事。
如果此 32 位操作系统计算机具有 2GB RAM 和 2GB 页面文件,则增加页面文件大小不会对性能有所帮助。这是真的?
您有 50 辆汽车和一个可容纳 4 辆车的车库,街边还有一个可容纳 100 辆车的停车场。您将停车场的大小增加到 200 个停车位。由于您现在拥有 150 个额外停车位(而不是 50 个额外停车位),您的汽车是否会变得更快?
答案2
拉梅什的回答是完全错误的。一个进程不能拥有比地址空间更多的内存,仅仅是因为它无法寻址!要使用超过 4GB 的内存,进程需要通过地址来访问它,就像在 C/C++ 中使用 ponters 一样。例如,如果您可以拥有 10GB RAM,那么如果您的 32 位指针最多可以达到 4GB,那么您如何告诉进程访问位于 5GB 的数据呢?不可能。他的所有解释都与操作系统有关。它最多可以从 64GB 池中激活某些 4GB 的块。因此总有 4GB 最大并发数,并且任何进程最多可以访问 4GB。然后,对于不同的进程,SO 可以从池中激活不同的 4GB 块,但该进程将再次被限制为 4GB。实际上,尽管 32 位指针最多可以寻址 4GB,但 32 位进程的限制是 3GB。