1. 程式人生 > >linux記憶體管理2:記憶體對映和需求分頁(英文名字:demand Paging,又叫:缺頁中斷)

linux記憶體管理2:記憶體對映和需求分頁(英文名字:demand Paging,又叫:缺頁中斷)



        圖 10-5 vm_area_struct 資料結構示意圖
當可執行映象對映到程序的虛擬地址空間時,將產生一組 vm_area_struct 結構來描述虛擬記憶體區域的起始點和終止點,每個 vm_struct 結構代表可執行映象的一部分,可能是可執行程式碼,也可能是初始化的變數或未初始化的資料。隨著 vm_area_struct 結構的生成,這些結構所描述的虛擬記憶體區域上的標準操作函式也由 Linux 初始化。
某個可執行映象對映到程序虛擬記憶體中並開始執行時,因為只有很少一部分裝入了實體記憶體,因此很快就會訪問尚未裝入實體記憶體的虛擬記憶體區域。這時,處理器將向 Linux 報告一個頁故障及其對應的故障原因。
這種頁故障的出現原因有兩種,一是程式出現錯誤,例如向隨機實體記憶體中寫入資料,這種情況下,虛擬記憶體是無效的,Linux 將向程式傳送 SIGSEGV 訊號並終止程式的執行;另一種情況是,虛擬地址有效,但其所對應的頁當前不在實體記憶體中,這時,作業系統必須從磁碟映象或交換檔案中將記憶體裝入實體記憶體。

那麼,Linux 如何判斷頁故障發生時,虛擬記憶體地址是否是有效的呢?如前所述,Linux 利用 vm_area_struct 資料結構描述程序的虛擬記憶體空間,為了查找出現頁故障虛擬記憶體相應的 vm_area_struct 結構的位置,Linux 核心同時維護一個由 vm_area_struct 結構形成的 AVL(Adelson-Velskii and Landis)樹。