Linux

Linux 如何將一個物理地址轉換為(可能是多個)虛擬地址?

  • December 10, 2019

據我了解,當 Linux 將物理頁框換入/換出 RAM 時,它需要為映射到該物理頁的所有虛擬頁設置有效位。將虛擬頁映射到物理頁框似乎在教科書上有很好的解釋,但是核心是如何從一個物理頁框中找到所有虛擬頁的呢?Linux 原始碼中的實際實現將不勝感激。

使用struct page在核心中跟踪記憶體的每個物理頁。這允許核心​​描述每個頁面是如何使用的;特別是,對於匿名和文件支持的映射,映射欄位指向address_space用於描述映射對象的結構。

對於需要使用給定物理頁面查找虛擬映射的程式碼,核心提供了一組反向映射函式。這些允許遍歷匿名映射和文件支持的映射的反向映射。例如,try_to_unmap遍歷映射以查找給定物理頁面的任何使用情況,以便它可以取消映射它。當它決定需要取消映射映射到程序的頁面時shrink_page_list 呼叫。try_to_unmap

引用自:https://unix.stackexchange.com/questions/556482