我对 32 位操作系统的理解是,地址以 32 位表示,因此操作系统最多可以使用 2 32 = 4G 内存空间——我假设单位是字节,所以是 4GB。
这是否意味着如果任何具有 32 位操作系统(Windows 或 Unix)的机器在硬盘上总共拥有超过 4GB 的 RAM + 页面文件,例如 8GB RAM 和 20GB 页面文件,那么它的内存就永远不会“用完”?
经过“用光”我的意思是增加 RAM 或页面文件不会提高性能;当然,应用程序总是有可能不断向操作系统请求内存但失败。
类似地,如果这台 32 位操作系统的机器有 2GB RAM 和 2GB 页面文件,增加页面文件大小不会提高性能。这是真的吗?
答案1
我对 32 位操作系统的理解是,地址以 32 位表示,因此操作系统最多可以使用 2^32 = 4GB 内存空间
最多的是过程能地址是 4GB。你可能会混淆记忆和地址空间。 一个进程可以拥有比地址空间更多的内存。那是完全合法和在视频处理和其他内存密集型应用中相当常见。 一个进程可以被分配数十 GB 的内存,并可以随意将其交换进或交换出地址空间。只有 2 GB 可以进入用户一次只处理一个地址空间。
如果您家有一个可容纳四辆车的车库,您仍然可以拥有五十辆汽车。你不能把它们都放在车库里。您必须在其他地方拥有辅助存储空间,至少可以存放 46 辆汽车;将哪些汽车放在车库中以及将哪些汽车放在街上的停车场中都由您决定。
这是否意味着任何 32 位操作系统,无论是 Windows 还是 Unix,如果机器的 RAM + 硬盘上的页面文件超过 4GB,例如 8GB RAM 和 20GB 页面文件,就永远不会出现“内存用完”的情况?
当然不是。单个进程可以使用比这更多的内存!再次进程使用的内存量几乎与进程使用的虚拟地址空间量完全无关。就像您车库中存放的汽车数量与您拥有的汽车数量完全无关。
而且,两个进程可以共享非私有内存页面。如果 20 个进程都加载同一个 DLL,则这些进程都共享该代码的内存页面。它们不共享虚拟内存地址空间,他们分享记忆。
我的观点是,如果不清楚的话,您应该停止将内存和地址空间视为同一事物,因为它们根本不是同一事物。
如果这台 32 位操作系统的机器有 2GB RAM 和 2GB 页面文件,增加页面文件大小不会提高性能。这是真的吗?
您有 50 辆汽车和一个 4 辆车的车库,街道尽头有一个 100 辆车的停车场。您将停车场的面积扩大到 200 个停车位。现在您有 150 个额外的停车位而不是 50 个额外的停车位,您的汽车速度会更快吗?
答案2
确实,CPU 最多只能寻址 4Gb 的 RAM。但是,当前的 CPU 使用 MMU(内存管理单元)将进程特定的内存地址转换为物理内存地址。
这个 MMU 用于各种不同的技巧,从内存隔离(进程 A 不能操作进程 B 的内存)到内存共享(进程 A 可以访问与进程 B 相同的物理内存区域并可以通过这种方式交换数据)。
虽然 32 位 CPU 每个进程仅支持 4Gb 内存,但使用以下方法时它可以寻址高达 64Gb 的 RAM:物理地址扩展。这样进程 A 就可以使用前 4Gb 内存,而进程 B 可以使用接下来的 4Gb。总共使用了超过 4Gb 的物理内存,但单个进程使用的总内存量仍然限制在 4Gb。
自内核版本 2.3.23 起,Linux 和某些 32 位版本的 Windows Server 都支持 PAE,但 32 位 Windows XP、Vista 或 7 则不支持。
如果您的 CPU 不支持 PAE,您的物理内存将被限制为 4GB(或更少,取决于其他因素)。
请注意,无论 CPU 是否支持 PAE,您的操作系统仍可以将部分物理内存移出到磁盘(页面文件)。这可确保您可以启动多个使用总内存超过 4GB 的进程。PAE 的唯一影响是您是否可以在运行进程 A 时将进程 B 的 4GB 保留在物理内存中。
答案3
具体来说,对于 32 位 Windows 版本,它们自 Windows 2003 版本以来就支持超过 4GB 的 RAM(你也可以获得Windows 7 内核破解以允许您在 32 位系统中使用所有 RAM)。但是,这需要付出代价,正如您在问题的第一部分中概述的那样。
在 32 位操作系统中,指针(内存地址)的大小与 CPU 的字长相同,为 32 位,这允许(如您所提到的)2^32 = 4GB 的内存空间。Windows 还对应用程序采用“虚拟内存”方法,因此每个应用程序都有自己的内存空间。
由于每个指针只有 32 位宽,每个应用程序的指针最多只能寻址 4GB 内存,即使系统可以支持超过 4GB 的 RAM。据我所知,这是在 32 位操作系统中使用超过 4GB RAM 的唯一警告。总的来说,您可以让许多应用程序使用超过 4GB 的 RAM,但任何一个特定进程最多只能分配/访问 4GB。
回到你的问题,假设你有一个程序使用 2GB 的 RAM。如果你有 10 个此程序实例,则为 20GB。所有 8GB 的 RAM 以及另外 12GB 的页面文件都将被用完。所以是的,在 32 位操作系统下,完全有可能用完这些内存。
如果这台 32 位操作系统机器有 2GB RAM 和 2GB 页面文件,增加页面文件大小不会有助于提高性能。这是真的吗?
增加页面文件大小将通常不会提高性能(除非您的 RAM 和页面文件设置为绝对最小值,或者设置得太低,导致您的计算机不断崩溃)。但是,它可以防止您的计算机耗尽(虚拟)内存。每当需要清除页面文件中的任何内容时,您就已经占用了巨大的性能受到影响(因为硬盘比 RAM 慢几个数量级)。