如果我们拥有无限的内存,那么我们还需要分页吗?

7
分页技术通过将页面从磁盘中移动到内存中,创造了每个进程都拥有无限内存的假象。那么,如果我们有无限的内存(在某些假设的情况下),我们仍然需要分页吗?如果是,为什么?我在面试中遇到了这个问题。

在我看来,为了交换的目的,我们仍需要分页。并且,当你说“无限内存”时,是否也包括RAM? - exexzian
2个回答

10

假设“无限内存”指的是无限的随机访问内存,或RAM,我们仍需要分页。尽管分页经常与将页面从RAM交换到硬盘以节省内存的能力相关联,但这只是分页的一个方面。以下是使用分页的其他原因:

  • 安全性。分页是一种通过确保进程无法访问另一个进程的内存并且无法修改驻留内核来强制操作系统安全和内存保护的方法。
  • 多任务处理。分页通过虚拟化内存空间来帮助多任务处理,即进程A中地址0xFOO可能完全不同于进程B中的0xFOO
  • 内存分配。分页通过减少碎片和仅在访问时分配RAM来帮助内存分配。这意味着,虽然一个进程需要100MB的连续RAM空间,但这不必在物理上连续。此外,当程序请求100MB的空间时,操作系统将告诉程序可以安全使用该100MB的空间,但只有在程序充分利用该空间时才会实际分配。

诚然,如果拥有无限RAM,则后者并非完全必要;然而,在资源受限时保持高效总是明智的做法。这也展示了分页的一种未经考虑的用途。


4
这是一个哲学问题,所以这里有一个哲学答案 :)
这个问题的关键在于你对无限内存做出了一些假设。可以说“不,不需要使用分页,但是……”。然后接着说:
无限内存必须在可接受的内存访问时间限制内可访问。如果不行(因为无限需要大量空间,而且内存与处理单元的距离较远),则它与磁盘没有区别,两者都不能满足即时可用的内存要求,这就是通���页面缓存解决的问题。
以亚马逊的S3为例,对于所有实际目的而言,它都是无限的。如果您可以依赖S3来满足您的所有内存需求,以便在时间x内需要获取某些内容时,您可以从S3获取它,那么就没有必要分页或甚至将其保存在“本地”内存中。每当您需要它时,只需从S3获取,任意次数。(显然,这会产生其他影响,比如成本和网络,但现在先忽略这个问题)。
当然,您总是可以说最理想的情况是希望内存访问尽可能快,而“快速”的概念可能比“最快”更慢,因此本地内存访问会给您带来更好的性能等。
最后,如果我必须设想一个内存是无限的,并且无论内存单元与获取单元之间的距离有多远,都具有相同的访问时间,那么我必须设想一个球形,其中处理单元位于中心,以便您无法因为距离而认为一种内存单元比另一种慢。否则,您可以说分页将在内存内部完成,以使对最常用的内存单元的访问更快(或者使用任何您选择使用的算法)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接