分页通过将页面移入和移出磁盘来创建每个进程都有无限 RAM 的错觉。所以如果我们有无限的内存(在某些假设的情况下),我们还需要分页吗?如果是,那为什么?我在一次采访中遇到了这个问题。
2 回答
假设“无限内存”意味着无限的随机可访问内存或 RAM,我们仍然需要分页。虽然分页通常与将页面进出 RAM 的页面交换到硬盘以节省内存的能力相关联,但这只是分页的一个方面。以下是需要分页的其他一些原因:
- 安全。分页是一种通过确保一个进程不能访问另一个进程的内存并且它不能修改驻留内核来强制执行操作系统安全和内存保护的方法。
- 多任务处理。分页通过虚拟化内存空间来帮助多任务处理,也就是说,进程 A 中的地址 0xFOO 可以与进程 B 中的 0xFOO 完全不同
- 内存分配。分页通过减少碎片和确保仅在访问时分配 RAM 来帮助内存分配。这意味着虽然一个进程需要 100MB 的连续 RAM 空间,但这在物理上不需要是连续的。此外,当程序请求 100MB 空间时,操作系统会告诉程序使用 100MB 空间是安全的,但在程序充分使用该空间之前不会实际分配。
诚然,如果一个人有无限的 RAM,后者就不是完全必要的。即使我们不受资源限制,保持高效始终是一种好习惯。它还演示了有时不考虑分页的用途。
这是一个哲学问题,所以这是一个哲学答案:)
这个问题的诀窍是你对无限记忆做出假设。可以说“不,不需要使用分页,但是”。并遵循:
无限内存必须在内存访问的可接受时间限制内可访问。如果不是(因为无穷大占用大量空间,并且内存离处理单元更远),它和磁盘之间没有区别,两者都不能满足随时可用的内存要求,这就是通过页面缓存尝试的解决。
以亚马逊的 S3 为例,它实际上是无限的。如果您可以依靠 S3 来满足您的所有内存需求,即当您需要在时间 x 内获取某些内容时,您可以从 S3 获取它,则无需分页任何内容,甚至无需将其保存在“本地”内存中。只需在需要时从 S3 获取它,根据需要多次获取。(显然这会产生其他影响,如成本和网络,但我们现在先忽略它)。
当然,您总是可以说您希望内存访问尽可能快,并且“足够快”可能比“最快”慢,因此本地内存访问将为您提供更好的性能等。
最后,如果我必须设想一个无限的内存并且无论内存单元离获取单元有多“远”都具有相同的访问时间,我将不得不设想一个处理单元位于中间的球体,所以你不能争辩说一个内存单元因为距离而比另一个慢。否则,您可以说分页将在内存内部完成,以便更快地访问最常用的内存单元(或您选择使用的任何算法)。