据我了解,当 Linux 将物理页框换入/换出 RAM 时,它需要为映射到该物理页的所有虚拟页设置有效位。将虚拟页映射到物理页框似乎在教科书上有很好的解释,但是内核是如何从一个物理页框中找到所有虚拟页的呢?Linux 源代码中的实际实现将不胜感激。
据我了解,当 Linux 将物理页框换入/换出 RAM 时,它需要为映射到该物理页的所有虚拟页设置有效位。将虚拟页映射到物理页框似乎在教科书上有很好的解释,但是内核是如何从一个物理页框中找到所有虚拟页的呢?Linux 源代码中的实际实现将不胜感激。
使用struct page在内核中跟踪内存的每个物理页。这允许内核描述每个页面是如何使用的;特别是,对于匿名和文件支持的映射,映射字段指向
address_space
用于描述映射对象的结构。对于需要使用给定物理页面查找虚拟映射的代码,内核提供了一组反向映射函数。这些允许遍历匿名映射和文件支持的映射的反向映射。例如,
try_to_unmap
遍历映射以查找给定物理页面的任何使用情况,以便它可以取消映射它。当它决定需要取消映射映射到进程的页面时shrink_page_list
调用。try_to_unmap