Swap
在沒有交換的情況下如何管理分頁?
在沒有交換的情況下如何管理分頁。如果是這種情況,將如何管理頁面錯誤?
我的意思是,如果沒有可用的交換,那麼如何管理分頁。我知道會有兩個頁面列表——free_pages 列表和allocated_pages 列表。當 free_pages 列表中的頁面變低時,它會將 LRU 頁面從allocated_pages 列表移動到交換分區。我只想知道如果沒有交換分區會發生什麼。
據我了解您的問題通常以這種方式發生:
如果分配記憶體:
- 將記憶體標記為已分配但不分配物理記憶體(因此在訪問時會出現頁面錯誤)。在 Linux 中它會在這個階段停止,但係統可能會立即分配物理空間 - 然後它在最後執行與頁面錯誤類似的算法,只是不會發生 OOM。
如果存在頁面錯誤(訪問未映射的頁面)
- 檢查是否分配了記憶體,如果沒有則返回錯誤。
- 檢查是否有空閒的物理頁面。如果有 goto 5
- 檢查是否有可以寫回磁碟的部分(如記憶體中的文件)或交換是否有可用空間(如果沒有交換,則將其視為大小為 0 的交換)。如果有將文件/塊寫回磁碟或將頁面寫入磁碟,則取消映射並轉到 5。如果兩者都可以,請選擇任何一個。
- 返回 OOM 條件。這取決於核心會發生什麼——它可能會向使用者顯示錯誤、核心恐慌/藍屏、找到一些要殺死的程序等。
- 將導致問題的頁面映射到已釋放頁面。如果頁面被交換,則從交換中讀取頁面並將其放入頁面中。如果頁面由文件讀取文件支持並將內容放在那裡。
一般來說,您可能會說沒有交換等同於完全交換。