3

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

4

1 回答 1

4

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

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

一个页面的映射数量保存在struct page表示该页面的结构中的一个字段中。每次创建新映射时它都会增加,而当映射消失时它会减少。

如果您想更深入地了解这一点,可以访问Linux-MM。特别是,请阅读文档部分中链接的 Mel Gorman 的“了解 Linux 虚拟内存管理器”一书(非常技术性)(免费提供的 PDF)。

于 2012-04-21T12:46:08.157 回答