在没有交换的情况下如何管理分页?

Sen*_*Sen 5 swap virtual-memory

在没有交换的情况下如何管理分页。如果是这种情况,如何管理页面错误?

我的意思是,如果没有可用的交换,那么如何管理分页。我知道会有两个页面列表 - free_pages 列表和located_pa​​ges 列表。当 free_pages 列表中的页面变低时,它会将 LRU 页面从分配的_pages 列表移动到交换分区。我只想知道如果没有交换分区会发生什么。

Mac*_*tka 7

据我了解您的问题,它通常以这种方式发生:

如果分配内存:

  • 将内存标记为已分配但不分配物理内存(因此在访问时会出现页面错误)。在 Linux 中,它在这个阶段停止,但系统可能会立即分配物理空间 - 然后它在最后执行与页面错误类似的算法,只是不会发生 OOM。

如果有页面错误(访问未映射的页面)

  1. 检查是否分配了内存,如果没有则返回错误。
  2. 检查是否有免费的物理页面。如果有转到 5
  3. 检查是否有部分可以写回磁盘(如缓存中的文件)或交换上是否有可用空间(如果没有交换,则将其视为大小为 0 的交换)。如果有将文件/块写回磁盘或将页面写入磁盘,则取消映射并转到 5。如果两者都可能,请选择任何一个。
  4. 返回 OOM 条件。这取决于内核会发生什么——它可能会向用户显示错误、内核恐慌/蓝屏、找到一些要杀死的进程等。
  5. 将导致问题的页面映射到释放页面。如果页面已交换,则从交换中读取页面并将其放入页面。如果页面由文件读取文件支持并将内容放在那里。

一般来说,您可能会说没有交换就等于完全交换。