需要虚拟内存?

时间:2011-09-29 03:27:32

标签: operating-system paging virtual-memory memory-segmentation

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

答案 1 :(得分:0)

Virtual memory working

它可能不是你的整个问题。但它似乎和我一样

答案 2 :(得分:0)

我将抛​​弃我对此事的理解,绝对没有后台凭据来支持它。会被投票? :)

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

现在,据我所知,

随机存取存储器受地址空间的限制,地址空间是操作系统可以存储内容的地址.32位操作系统仅限于4gb of RAM,而64位操作系统(理论上)仅限于{ {3}},尽管Windows 7将其限制为2.3EXABYTES of RAM

当然,仍有多种因素,例如

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

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

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


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

但是,当然,理论上有2个RAM的理论,你永远不会用完?

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

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

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


显然需要做所有这些并做自己的研究。我正在将其转变为社区维基,以便其他人可以编辑它,或者只是删除它,如果它是完全错误的那样:)