内核如何跟踪被映射到其他进程的帧?

时间:2019-07-06 00:53:33

标签: linux-kernel shared-memory virtual-memory

关于minor page faults,维基百科说:

  

操作系统中的页面错误处理程序仅需要使内存管理单元中该页面的条目指向内存中的页面,并指示该页面已加载到内存中;它不需要将页面读入内存。 如果内存由其他程序共享并且页面已被其他程序带入内存,则可能会发生这种情况。

内核如何知道某个页面已经被另一个进程带入内存?据我了解,对于任何给定的执行进程,内核仅与该进程的页表有关,因此,如果某个帧已被另一个进程映射,则内核如何确定这一点?

如果您还指出执行此操作的相关代码,那也将很棒,因为我正在浏览here(与this链接)并且找不到与之相关的部分实施。

1 个答案:

答案 0 :(得分:1)

在虚拟内存系统中,操作系统必须维护辅助存储中进程地址空间的表示。那是虚拟内存的“虚拟”部分。

虚拟表示通常分为几部分。每个部分包含具有相同属性(r / w / rw / rx)的页面,并连续存储。

通常,如果进程共享内存,则它们共享整个部分。

操作系统必须在某些地方存储描述此部分的标头。该标头将指示该节是否以及在物理内存中的加载位置。每个进程都必须具有一个数据结构,该数据结构指示该节在何处映射到逻辑地址空间。

请记住,此机制可用于所有进程共享的操作系统可分页区域。

当发生页面错误时,页面错误处理程序必须识别哪个部分包含导致错误的页面。然后,它可以从节的标题中识别它是否驻留在物理内存中。

您提到的文章是指VMS操作系统,在该操作系统中更可能发生这种软故障。在VMS中,操作系统安装了库,因此所有进程都必须共享同一代码。