4GB进程如何仅在2 GB RAM上运行?

时间:2014-07-21 16:16:17

标签: memory-management operating-system out-of-memory virtual-memory

鉴于32位/ 64位处理器可以在2GB RAM上运行4GB进程。它会使用虚拟内存还是根本不运行?

3 个答案:

答案 0 :(得分:2)

这是高度依赖平台的。在许多32位操作系统中,无论安装了多少物理内存或分配了虚拟内存,任何单个进程都不能使用超过2GB的内存。

例如,我的工作计算机使用带有PAE(物理地址扩展)的32位Linux,以允许它安装16GB的RAM。但是,每个进程限制为2GB仍然适用。拥有额外的RAM只允许我运行更多的单个进程。 32位Windows是一样的。

64位操作系统更像是一个混合包。 64位Linux将允许单个进程映射内存超过32GB(但同样,从内核到内核不等)。您将受限于您拥有的Swap(Linux虚拟内存)数量。 64位Windows是一个完整的垃圾拍摄。某些版本每个进程只允许2GB,但大多数版本只允许> 32GB受限于用户分配的页面文件数量。

Microsoft提供了一个有用的table来分解各种操作系统版本/版本的各种内存限制。不幸的是,没有这样的表,我可以通过粗略搜索Linux找到它,因为它是如此分散。

答案 1 :(得分:1)

在64位操作系统上需要4GB的64位进程通常可以使用虚拟内存在2GB的物理RAM中运行,假设磁盘交换空间可用,但如果所有内存频繁,性能将受到严重影响访问。

32位进程实际上无法准确处理4GB内存(操作系统需要一些地址空间开销),因此无法运行。根据操作系统,它可能运行需要>的过程。 2GB和< 3-4GB。

答案 2 :(得分:1)

简短回答:取决于系统。

大多数32位系统每个进程的限制为2GB。如果您的系统允许每个进程大于2GB,那么我们可以继续讨论您问题的下一部分。

大多数现代系统都使用虚拟内存。然而,有一些受限制的(和各种旧的)系统会耗尽空间并让你哭泣。我相信uClinux支持MMU和MMU-less架构。 大多数 32位处理器都有一个MMU(少数不要参见ARM Cortex-M0),还有一些16位或8位处理器(参见{{ 3}}和Atmel ATtiny13A-MMU)。

任何需要更多内存而不是物理上可用的进程都需要一种内存交换形式(例如,分区或文件)。

虚拟内存分为页面。在某些时候,页面驻留在RAM或Swap中。任何访问未加载到RAM中的内存页面的尝试都会触发一个名为Atari MMU的中断,该中断由内核处理。