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

Linux kernel 内核如何跟踪映射到其他进程的帧?,linux-kernel,shared-memory,virtual-memory,Linux Kernel,Shared Memory,Virtual Memory,关于这个问题,维基百科说: 操作系统中的页面错误处理程序只需使内存管理单元中该页面的条目指向内存中的页面,并指示该页面已加载到内存中;它不需要将页面读入内存如果内存由不同的程序共享,并且页面已被其他程序带入内存,则可能发生这种情况。 内核如何知道一个页面已经被另一个进程带入内存?根据我的理解,对于任何给定的执行进程,内核只关心该进程的页表,因此,如果某个帧已经被另一个进程映射,那么内核如何确定这一点 如果您还可以指出执行此操作的相关代码,那也太棒了,因为我正在四处浏览(链接自文章),找不到实现的

关于这个问题,维基百科说:

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

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


如果您还可以指出执行此操作的相关代码,那也太棒了,因为我正在四处浏览(链接自文章),找不到实现的相关部分。

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

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

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

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

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

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


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

谢谢你的回复!因此,当您说“那么它可以从节头中识别它是否驻留在物理内存中”时,该节头是否在所有进程之间共享,这意味着操作系统不必通过每个进程来查看它是否映射了该节?此外,节标题是否包含当前映射该节的进程?它必须由所有进程共享。