32位OS机器可以用完所有8GB RAM + 20GB页面文件吗?


98

我对32位操作系统的了解是,地址以32位表示,因此操作系统最多可以使用2 32 = 4G内存空间-我假设单位是字节,所以是4GB。

这是否意味着如果任何具有32位操作系统的计算机(无论是Windows还是Unix)在硬盘上的RAM +页面文件总计超过4GB,例如8GB RAM和20GB页面文件,则其内存将永远不会“用完” “?

通过“用起来”我的意思是增加RAM或页面文件将不利于性能; 当然,应用程序总是有可能不断从OS请求内存,但是失败了。

同样,如果此32位OS计算机具有2GB RAM和2GB页面文件,则增加页面文件大小将无济于事。这是真的?


2
附带说明一下,如果您碰巧拥有4GB以上的RAM,并且只有32位操作系统,则可以制作RAM磁盘。这是您的RAM硬盘驱动器,并且可以使用未使用/未解决的RAM放置进去。
西蒙·韦贝克

10
你不能 仍然需要在整个操作系统中创建一个虚拟磁盘,如果操作系统无法使用内存,那么您也无法在其中创建虚拟磁盘。(除非您的BIOS可以创建一个虚拟磁盘,这很少见)。
AVee

1
简短的回答是“是”。尽管通常会为进程提供32位地址空间供使用,但操作系统本身可以使用的空间更多(通过像80年代那样的银行切换或作为英特尔PAE的地址扩展技巧学校学习。此外,请记住,您运行的地址比一次一个程序,可能包含多个进程(Chrome将标签放在不同的进程中)。操作系统本身将使用内存来存储本地固定磁盘中的数据,例如,以便更快地访问已经存在的数据使用。
rbanffy

Answers:


145

我对32位操作系统的了解是,地址以32位表示,因此操作系统最多只能使用2 ^ 32 = 4GB内存空间

进程最多可以处理 4GB。您可能会使内存地址空间混淆。 一个进程可以拥有比地址空间更多的内存。这是完全合法的,并且在视频处理和其他内存密集型应用程序中很常见。 可以为一个进程分配数十GB的内存,并随意将其交换进出地址空间。一次只能有2 GB可以进入用户地址空间。

如果您家有一个四车位的车库,您仍然可以拥有五十辆车。您只是不能将它们全部保留在车库中。您必须在其他地方有辅助存储才能存储至少46个辅助存储;您在车库中保留哪些汽车,在街上停车场保留哪些汽车由您决定。

这是否意味着任何32位操作系统,无论是Windows还是UNIX,如果计算机在硬盘上具有大于4GB的RAM +页面文件,例如8GB RAM和20GB页面文件,将永远不会“耗尽内存”?

绝对不是那个意思。一个进程可能会使用更多的内存!同样,进程使用的内存量几乎完全与进程使用的虚拟地址空间无关。就像您存放在车库中的汽车数量与您拥有的汽车数量完全无关。

此外,两个进程可以共享非私有内存页。如果二十个进程全部加载相同的DLL,则所有进程共享该代码的内存页。他们不共享虚拟内存地址空间,他们共享内存

如果不清楚,我的意思是您应该停止将内存和地址空间视为同一件事,因为它们根本不是同一件事。

如果此32位OS计算机具有2GB RAM和2GB页面文件,则增加页面文件大小将无济于事。这是真的?

您有50辆车和4辆车的车库,以及街上100个车位的停车场。您将停车场的大小增加到200个点。您现在拥有150个额外的停车位,而不是50个额外的停车位,您的汽车会更快吗?


26
我发现这个答案没有解决眼前的问题,并且在某些方面几乎具有欺骗性。
钻机

48
@Rig:太好了,很高兴听到您的建设性批评。现在,您有机会撰写更好的答案,并向我们​​展示您认为欺骗性和针对性更强的某种答案。
埃里克·利珀特

4
@BlueRaja:我怀疑您将物理内存内存混淆了。物理内存只是一种优化,可以更快地访问内存。正如处理器高速缓存是一项优化,可以更快地访问内存一样。 内存用于页面文件中保留的所有意图和目的空间。页面文件中的给定页面是(1)映射到虚拟内存地址还是(2)从磁盘复制到物理内存,与是否分配该页面无关。
埃里克·利珀特

4
@BlueRaja:Raymond Chen关于该主题的文章可能会有所帮助。他展示了如何从页面文件中分配4GB。那是进程拥有的内存。该过程当然不能一次解决整个问题,但是它可以通过将页面映射到未使用的VM页面,使用一段时间,然后丢弃它来解决任何页面blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert

3
埃里克(Eric),如果您明确指出Windows(和其他操作系统)允许您“保留”内存而不实际将其保存在虚拟地址空间中,那么这个答案就更清楚了,然后回答一个显而易见的问题:“那您怎么办?解决吗?”。我认为答案是“您使用某种页面ID来引用它,以便将其分页到虚拟地址空间,然后可以在其中寻址”,但是我不知道,并且您的答案没有说:)
Timwi

67

的确,CPU只能寻址最大4Gb的RAM。但是,当前的CPU使用MMU(内存管理单元)将特定于进程的内存地址转换为物理内存地址。

从内存隔离(进程A无法操纵进程B的内存)到内存共享(进程A可以访问与进程B相同的物理内存区域并可以交换数据),此MMU用于各种不同的技巧。

尽管32位CPU的每个进程仅支持4Gb内存,但是使用Physical Address Extension时,它最多可以寻址64Gb RAM 。这允许进程A使用第一个4Gb的内存,而进程B使用下一个4Gb的内存。总共使用了超过4Gb的物理内存,但是单个进程使用的内存总量仍然限制为4Gb

从内核版本2.3.23开始在Linux上支持PAE,在Windows Server的某些32位版本上也支持PAE,但在32位Windows XP,Vista或7上不支持PAE。

如果您的CPU不支持PAE,您将只能使用4GB的物理内存(或更少,取决于其他因素)。

请注意,无论支持PAE的CPU是什么,您的操作系统仍然可以将部分物理内存移出磁盘(页面文件)。这样可以确保您可以启动多个使用4Gb以上组合的进程。PAE的唯一影响是您在运行进程A时是否可以将进程B的4Gb保留在物理内存中。


这是否意味着它不支持,那么我上面所说的正确吗?

10
Windows XP确实支持PAE(我认为从SP2开始),但是即使计算机支持PAE,也会忽略超过4GB的RAM。看这里。它用于基于硬件的数据执行保护-NX / XD位仅在PAE页表条目中可用,而在“常规”页表条目中不可用。
Wyzard '12

芯片组也可能是支持/使用多少内存的限制因素,无论您选择哪种操作系统或黑客。
摩押

5
我要补充一点,为什么32位Windows的消费者版本不支持大于4GB的ram,是因为发现大量的硬件驱动器无法在如此大的内存下正常工作。并且由于在服务器/超高端工作站之外,RAM超过4GB的情况极为罕见,因此大多数维护驱动程序的公司对花钱更新只会被其客户群的0.1%使用的驱动程序不感兴趣。
Dan Neely

6
@DanNeely 操作系统确实支持内存,但由于许可问题而受到限制。尽管我同意这是第三方黑客,但仅适用于Windows的消费者版本。从Windows 2000开始,基于服务器的Windows发行版已支持超过4GB的内存(请参阅第一个链接)。
突破

15

专门讲32位Windows变体,自Windows 2003变体以来,它们已经支持超过4GB的RAM(并且您还可以获得Windows 7内核破解,使您可以在32位中使用所有RAM)。但是,这是有代价的,正如您在问题的第一部分中概述的那样。

在32位操作系统中,指针的大小(内存地址)与CPU的字长相同,即32位,这允许(如您所述)2 ^ 32 = 4GB的存储空间。Windows还为应用程序采用“虚拟内存”方法,因此每个应用程序都有自己的内存空间。

由于每个指针只有32位宽,因此即使系统可以支持大于4GB的RAM ,每个应用程序的指针也只能寻址4GB的内存。据我所知,这是在32位操作系统中使用超过4GB RAM的唯一警告。总的来说,您可以使许多应用程序使用超过4GB的RAM,但是任何一个特定进程最多只能分配/访问4GB。


回到您的问题,假设您有一个使用2GB RAM的程序。如果您有10个此程序实例,则为20GB。您的所有8GB RAM以及另外12GB的页面文件都将用完。因此,是的,在32位操作系统下,耗尽此内存的可能性更大。

如果此32位OS计算机具有2GB RAM和2GB页面文件,则增加页面文件大小将无济于事。这是真的?

增加页面文件的大小通常不会提高性能(除非将RAM和页面文件设置为绝对最小值,或者将其设置为太低,则计算机会不断崩溃)。但是,它将防止计算机(虚拟)内存不足。每当需要将任何内容清除到页面文件时,您就已经遭受了巨大的性能损失(因为硬盘驱动器的速度要比RAM慢几个数量级)。


每个进程获得的4GB地址空间中,实际上只有2GB可供程序使用。其余2GB保留供内核使用。将/ 3GB启动选项可以允许一些程序使用更多的内存。
Wyzard '12

1
@突破:“增加页面文件大小将永远不会提高性能”我认为这不是真的。例如,如果交换更多,则OS可以更积极地交换出未使用的程序数据,并使用可用RAM进行磁盘缓存。在某些配置中,这可能会产生更好的性能。有上ServerFault一个很好的答案,为什么一个页面文件是很重要的,它触及了这些问题:serverfault.com/questions/23621/...
sleske

2
注意诸如“增加页面文件的大小将永远不会提高性能”之类的笼统声明,因为页面文件太小而导致的磁盘抖动比拥有更大的页面文件要大得多,这完全有可能!查看此问题的答案和评论。
Mark Booth,

1
@sleske好点了,我将其更新为“通常不是”类型的东西。虽然我同意这可能会对服务器产生巨大的影响,但对于大多数人来说,我想了解的一点是,获得更多的RAM会更好(因为当您进行分页时,性能会相当慢尽其所能)。
突破

-1

当处理器被称为32位时,这意味着它可以使用一条指令以32位数字进行操作。这与其地址总线的宽度无关,自1995年Pentium Pro发布以来,该地址总线在Intel体系结构上为36位。

著名的4GB限制来自以下事实:大多数PC软件都使用平面内存模型,其中每个字节的内存都可以通过指针寻址。由于指针应该适合要使用的寄存器,并且寄存器为32位宽,因此限制为4GB。


如上面其他早期答案中所指出的,这是不正确的。
ChrisInEdmonton 2015年

你能指出我错了的一个特殊事实吗?
德米特里·格里戈里耶夫

1
一个进程可以使用4 GB以上的内存。具体来说,以前的答案指出“一个进程可以比地址空间拥有更多的内存”。
ChrisInEdmonton

2
例如,请参阅blog.superuser.com/2011/04/23/…现在,当然不能同时使用超过4 GB的内存,但是一个进程可以取消映射和重新映射内存,因此可以使用更多的内存。一个过程中只有4 GB,只有一点簿记。该博客文章是特定于Windows的。在32位Linux安装中,我已经运行了分配了大于4 GB内存的数据库服务器。当然,这些天,您只需要运行64位Linux。
ChrisInEdmonton 2015年

1
好,我道歉。我没有考虑过mmap额外内存的可能性。
德米特里·格里戈里耶夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.