内核如何知道物理页面是由两个不同的进程共享的?

时间:2012-04-21 12:36:34

标签: c linux x86-64

我们知道页表用于从虚拟内存页面地址获取物理内存页面地址。但是,内核如何知道物理内存页是否由不同的进程共享(例如在分叉进程及其父进程的情况下)。这样的名单在哪里保存?

1 个答案:

答案 0 :(得分:4)

内核是创建所有虚拟映射的实体。所以它确切地知道什么是共享的,什么不是。没有内核的帮助,用户空间进程无法创建共享映射。

当进程请求fork时,内核还负责复制映射。它具有所需的所有信息。

页面的映射数保存在代表该页面的struct page结构的字段中。每次创建新映射时它都会递增,而映射消失时会递减。

如果您想深入了解这一点,可以访问Linux-MM。特别是,在文档部分阅读Mel Gorman的 Understanding the Linux Virtual Memory Manager 书(非常技术性)书(免费提供PDF)。