Linux

程序記憶體的哪些部分可以交換?

  • August 5, 2021

我正在嘗試了解有關 linux 核心交換系統的更多資訊。

我發現如果記憶體中的 ar/o 或二進製文件的程式碼部分需要交換,則不應將其移動到交換文件/分區,因為它已經由磁碟中的文件支持。

它真的是這樣工作的嗎?文件支持的 r/o 或 rx 分配中的頁面被交換到專用文件?如果是這樣,有人可以指點我處理這個的程式碼嗎?我好像找不到

是的,它就是這樣工作的。內容在磁碟上可用的頁面將被丟棄,它們甚至不需要交換到“專用文件”。具有非交換備份儲存(例如,記憶體映射文件)的髒頁被寫出到該備份儲存。交換僅用於沒有備份儲存的可驅逐頁面。

大多數情況下,這是由 處理的kswapd,執行所謂的回收

它將非同步掃描記憶體頁面,如果它們包含的數據在其他地方可用,則釋放它們,或者驅逐到備份儲存設備(還記得那些臟頁面嗎?)。

參見mm/vmscan.c實施。

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