[英]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.