簡體   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