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

Posted

技术标签:

【中文标题】如果我们有无限的内存,那么我们还需要分页吗?【英文标题】:If we have infinite memory, then do we still be needing paging? 【发布时间】:2012-12-22 06:21:06 【问题描述】:

分页通过将页面移入和移出磁盘来制造每个进程都有无限 RAM 的错觉。所以如果我们有无限的内存(在某些假设的情况下),我们还需要分页吗?如果是,那为什么?我在一次采访中遇到了这个问题。

【问题讨论】:

IMO 我们仍然需要分页来进行交换。通过说infinite memory 你是否也包括RAM? 【参考方案1】:

假设“无限内存”意味着无限的随机可访问内存或 RAM,我们仍然需要分页。虽然分页通常与将页面进出 RAM 的页面交换到硬盘以节省内存的能力相关联,但这只是分页的一个方面。以下是需要分页的其他一些原因:

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

诚然,尽管如此,如果一个人有无限的 RAM,后者就不是完全必要的;即使我们不受资源限制,保持高效始终是一种好习惯。它还演示了有时不考虑分页的用途。

【讨论】:

【参考方案2】:

这是一个哲学问题,所以这是一个哲学答案:)

这个问题的诀窍是你对无限内存做出假设。可以说“不,不需要使用分页,但是”。并跟随:

必须在可接受的内存访问时间限制内访问无限内存。如果不是(因为无穷大占用大量空间,并且内存离处理单元更远),它和磁盘之间没有区别,两者都不能满足随时可用的内存要求,这就是通过页面缓存尝试的解决。

以亚马逊的 S3 为例,它实际上是无限的。如果您可以依靠 S3 来满足您的所有内存需求,即当您需要在时间 x 内获取某些内容时,您可以从 S3 获取它,则无需分页任何内容,甚至无需将其保存在“本地”内存中。只需在需要时从 S3 获取它,根据需要多次获取。 (显然这会产生其他影响,如成本和网络,但我们现在先忽略它)。

当然,您总是可以说您希望内存访问尽可能快,并且“足够快”可能比“最快”慢,因此本地内存访问会给您带来更好的性能等。

最后,如果我必须设想一个无限的内存并且无论内存单元离获取单元有多“远”都具有相同的访问时间,我将不得不设想一个处理单元所在的球体中间,所以你不能因为距离而争论一个内存单元比另一个慢。否则,您可以说分页将在内存内部完成,以便更快地访问最常用的内存单元(或您选择使用的任何算法)。

【讨论】:

以上是关于如果我们有无限的内存,那么我们还需要分页吗?的主要内容,如果未能解决你的问题,请参考以下文章

FTP支持分页吗?

DRF的分页

DRF的分页

DRF 分页组件

thinkphp5如果不用Db类还可以用paginate分页吗

DRF 分页