0

最近有人问我一个问题,在计算机系统中,如果主内存 (RAM) 与辅助内存 (HDD) 相当,那么在这样的计算机系统中是否需要实现虚拟内存?由于分页和分段需要上下文切换,这纯粹是处理开销,虚拟内存的好处会超过它所需的处理开销吗?有人可以帮我解决这个问题吗?感谢你

4

3 回答 3

3

确实,使用虚拟内存,您可以让您的程序提交(即分配)总共更多物理可用的内存。但是,如果拥有虚拟内存,这只是众多好处之一,甚至不是最重要的。就个人而言,当我使用 PC 时,我会定期检查任务管理器,看看我离使用实际 RAM 有多近。如果我经常过去,我会去买更多的内存。

所有使用虚拟内存的操作系统的关键属性是每个进程都有自己独立的地址空间。这意味着您可以拥有一台具有 1GB RAM 的机器并运行 50 个进程,但每个进程仍将具有 4GB 的可寻址内存空间(假设为 32 位操作系统)。它为什么如此重要?这并不是说您可以“伪造”并使用不存在的 RAM。一旦您过去并开始交换,您的虚拟内存管理器将开始颠簸并且性能将停止。一个更重要的含义是,如果每个程序都有自己的地址空间,那么它就无法写入任何随机内存位置并影响另一个程序。

这是主要优势:稳定性/可靠性。在 Windows 95 中,您可以编写一个会使整个操作系统崩溃的应用程序。在 W2K+ 中,根本不可能编写一个程序来铺满自己的地址空间并崩溃除 self 之外的任何东西。

其他优点也很少。当可执行文件和 DLL 加载到 RAM 中时,虚拟内存管理器可以检测何时多次加载相同的二进制文件,这将使多个进程共享相同的物理 RAM。在虚拟内存级别,似乎每个进程都有自己的副本,但在较低级别,它们都映射到一个位置。这加快了程序启动并优化了内存使用,因为每个 DLL 只加载一次。

虚拟内存管理器还允许您通过简单地将文件映射到虚拟地址空间中的页面来执行文件 I/O。除了引入有趣的文件处理替代方案之外,这还允许实现共享内存段,即在进程之间有意共享具有读/写页面的物理 RAM 以实现极其高效的进程间通信 (IPC)。

有了所有这些好处,如果我们考虑到大多数时候你仍然希望拥有比总提交大小更多的物理 RAM,并且考虑到现代 CPU 支持直接内置到硬件中的虚拟地址映射,那么拥有虚拟内存的开销经理实际上非常少。另一方面,在来自许多不同供应商的许多应用程序同时运行的环境中,进程地址空间是无价的。

于 2011-09-29T04:17:38.763 回答
0

虚拟内存工作

它可能不是你的全部问题。但对我来说似乎是答案

于 2011-09-29T03:51:41.173 回答
0

我将放弃我对此事的理解,绝对没有背景凭据来支持它。会被否决吗?:)

首先,通过说主内存与辅助内存相当,我假设您的意思是空间。(毕竟,访问 RAM 比访问存储要快)。

现在,据我了解,

随机存取存储器受地址空间的限制,地址空间是操作系统可以存储内容的地址。32 位操作系统限制为大约4gb 的 RAM,而 64 位操作系统(理论上)限制为2.3EXABYTES 的 RAM,尽管Windows 7 将Ultimate 版本限制为 200gb,Server 2008限制为 2tb 。

当然,还有很多因素,比如

  • 制造 RAM 的成本。(单个 ram thingie 上的 8gb(?)仍在数百个中)

  • 主板上的 dimm 插槽(我见过有 4 个插槽的主板)

但是为了讨论的目的,让我们忽略这些限制,只讨论空间。


让我们谈谈当今的应用程序如何处理内存。应用程序不知道存在多少内存——在大多数情况下,它只是从操作系统中请求它。操作系统负责管理已为每个正在运行的应用程序分配了哪些地址空间。如果它没有足够的,那么,坏事就会发生。

但是,理论上 2EXABYTES 的 RAM 肯定不会用完吗?

好吧,很久以前一位名人曾经说过,我们永远不需要超过 64kB 的 RAM。

因为现在的大多数应用程序都是贪婪的(它们需要操作系统愿意提供的量),如果你在足够强大的计算机上运行足够多的应用程序,理论上你可能会超过物理内存的存储限制。在这种情况下,将需要虚拟内存来弥补额外所需的内存。

因此,要回答您的问题:(以我对此事的有限知识形成的拙见,)是的,您仍然需要实现虚拟内存。


显然,把这一切都做你自己的研究。我正在把它变成一个社区维基,这样其他人就可以编辑它,或者如果它完全错误就删除它:)

于 2011-09-29T04:17:34.160 回答