繁体   English   中英

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

[英]How does kernel know about physical pages are shared by two different processes?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM