gpt4 book ai didi

kernel - 内核如何知道虚拟地址空间中的哪些页面对应于换出的物理页面框架?

转载 作者:行者123 更新时间:2023-12-03 09:12:28 26 4
gpt4 key购买 nike

考虑以下情况:内核已耗尽物理RAM,需要换出一个页面。它选择最近最少使用的页面框架,并希望将其内容交换到磁盘上,并将该框架分配给另一个进程。

令我困扰的是,该页面框架通常已经映射到多个进程的几个(相同)页面。内核必须以某种方式找到所有这些进程,并将页面标记为换出。它是如何实现的?

谢谢。

编辑:问题的插图:

在交换过程1和2具有共享的Page 1之前,它们位于物理内存帧1中:

现在,系统中的内存已用完,内核通过从帧1换出第1页并将其替换为第2页,来为进程3分配内存。
为了做到这一点,它必须

1)找到所有流程,请参阅第1页(在本例中为流程1和流程2)

2)修改其页表条目,将“Present”位设置为0并在“交换”中​​设置Page 1位置

因此,我不知道如何执行步骤1。内核不能只是迭代地查看每个进程的页表以找到指向表框1的页表项。从页框到页表项应该有某种反向映射。

答案是:

“对页表管理的最重要和最重要的变化是引入了反向映射(rmap)。将其称为“rmap”是有意的,因为它是“缩写”的常用用法,不应与-rmap混淆。由Rik van Riel开发的树,除了反向映射外,对股票VM的更改更多。

在一个句子中,rmap允许定位仅在struct页面的情况下定位映射特定页面的所有PTE。在2.4中,查找映射共享页面的所有PTE(例如内存映射的共享库)的唯一方法是线性搜索属于所有进程的所有页面表。这太昂贵了,Linux尝试通过使用交换缓存来避免该问题(请参阅第11.4节)。这意味着,在具有许多共享页面的情况下,Linux可能不得不换掉整个进程,而不考虑页面年龄和使用模式。相反,2.6具有与每个结构页面关联的PTE链,可以遍历该结构以从引用该结构的所有页面表中删除该页面。这样,LRU中的页面可以以一种智能的方式换出,而无需诉诸整个过程。”

来自Understanding the Linux Memory Management,“Linux2.6的新功能”

最佳答案

Linux:

使用交换文件时,页面表条目将更新为一个标记为无效的条目,并保存有关交换文件中保存位置的信息。即:swap_info数组的索引和swap_map内的偏移量。

x86上的页面表条目类型(pte_t)的示例(有点旧)。一些
这些位中的一部分被硬件用作标志:

Bit         Function
_PAGE_PRESENT Page is resident in memory and not swapped out
_PAGE_PROTNONE Page is resident but not accessable
_PAGE_RW Set if the page may be written to
_PAGE_USER Set if the page is accessible from user space
_PAGE_DIRTY Set if the page is written to
_PAGE_ACCESSED Set if the page is accessed

Table 3.1: Page Table Entry Protection and Status Bits

另请参见 another SO answer和x86-64页表格式的图表。当低位= 0时,硬件将忽略所有其他位,因此内核可以将它们用于任何事情。即使在“当前”条目中,也有一些保证被忽略的位不会保留供将来的硬件使用,因此内核可以将其用于自己的目的。

大概其他架构是相似的。

简而言之:流程指向页面,页面得到更新。因此,实际上,过程也被更新。当请求物理页面时,它将被交换,因此所有进程也将被交换。关键是换出内存后不会删除页面表项。

您可能会发现其中一些有用的内容:
  • Gustavo Duarte:How The Kernel Manages Your Memory

  • The kernel documentation included book of Mel Gorman(2007):
  • 11.2 Mapping Page Table Entries to Swap Entries
  • 3.2 Describing a Page Table Entry
  • VM的Life of a page上的Red Hat。
  • 关于kernel - 内核如何知道虚拟地址空间中的哪些页面对应于换出的物理页面框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16581490/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com