Linux
程序記憶體的哪些部分可以交換?
我正在嘗試了解有關 linux 核心交換系統的更多資訊。
我發現如果記憶體中的 ar/o 或二進製文件的程式碼部分需要交換,則不應將其移動到交換文件/分區,因為它已經由磁碟中的文件支持。
它真的是這樣工作的嗎?文件支持的 r/o 或 rx 分配中的頁面被交換到專用文件?如果是這樣,有人可以指點我處理這個的程式碼嗎?我好像找不到
是的,它就是這樣工作的。內容在磁碟上可用的頁面將被丟棄,它們甚至不需要交換到“專用文件”。具有非交換備份儲存(例如,記憶體映射文件)的髒頁被寫出到該備份儲存。交換僅用於沒有備份儲存的可驅逐頁面。
大多數情況下,這是由 處理的
kswapd
,執行所謂的回收:它將非同步掃描記憶體頁面,如果它們包含的數據在其他地方可用,則釋放它們,或者驅逐到備份儲存設備(還記得那些臟頁面嗎?)。
參見
mm/vmscan.c
實施。