我们知道页表用于从虚拟内存页面地址获取物理内存页面地址。但是,内核如何知道物理内存页是否由不同的进程共享(例如在分叉进程及其父进程的情况下)。这样的名单在哪里保存?
答案 0 :(得分:4)
内核是创建所有虚拟映射的实体。所以它确切地知道什么是共享的,什么不是。没有内核的帮助,用户空间进程无法创建共享映射。
当进程请求fork时,内核还负责复制映射。它具有所需的所有信息。
页面的映射数保存在代表该页面的struct page
结构的字段中。每次创建新映射时它都会递增,而映射消失时会递减。
如果您想深入了解这一点,可以访问Linux-MM。特别是,在文档部分阅读Mel Gorman的 Understanding the Linux Virtual Memory Manager 书(非常技术性)书(免费提供PDF)。