缺頁異常處理 do page fault

2021-06-05 16:13:34 字數 699 閱讀 6158

//regs 發生異常時暫存器的值

//error_code 5位的值,第3位標誌異常發生在核心態還是使用者態

do_page_fault函式:

//獲得產生缺頁異常的位址,該位址儲存在cr2暫存器

address = read_cr2();

//檢查線性位址是否屬於第4個g

//如果核心訪問不存在的記憶體頁框,則執行vmalloc_fault

//該部分**處理可能由於在核心態訪問非連續記憶體區而引起的缺頁

跨過一部分檢測

//接下來,檢查異常發生時,是否正在執行一些關鍵例程或正在執行核心執行緒

//假設缺頁沒有發生在中斷處理,可延遲函式,臨界區或者核心執行緒中

//檢查程序的線性區以決定引起缺頁的線性位址是否包含在程序的位址空間中

//獲得mmap_sem訊號量

//查詢發生異常的位址所屬的vma

//如果vma為空,說明address這後沒有線性區,因此這個位址肯定是無效的

//如果address之後的第乙個線性區包含address,則跳到good area處理

//以上兩者都不成立,則可能是使用者態棧上的push或pusha操作引起的

//棧映身到線性區上的話,該vma被標誌為vm_growsdown

//expand_stack擴充套件程序位址空間的棧

//接著執行handle_mm_fault處理缺頁異常

linux缺頁異常處理 核心空間

缺頁異常被觸發通常有兩種情況 程式設計的不當導致訪問了非法的位址 訪問的位址是合法的,但是該位址還未分配物理頁框.下面解釋一下第二種情況,這是虛擬記憶體管理的乙個特性。儘管每個程序獨立擁有3gb的可訪問位址空間,但是這些資源都是核心開出的空頭支票,也就是說程序手握著和自己相關的乙個個虛擬記憶體區域 ...

缺頁異常總結

產生頁面異常的原因 1 目標頁面不存在 頁表項全0,即該線性位址與實體地址尚未建立對映或者已經撤銷 2 相應的物理頁面不在記憶體中 頁表項非空,但p標誌 0,比如在swap分割槽或磁碟檔案上 3 訪問許可權不符合 此時頁表項p標誌 1,比如企圖寫唯讀頁面 當出現上面情況之一,那麼就會產生頁面page...

詳解缺頁中斷 缺頁中斷處理(核心 使用者)

一 什麼是缺頁中斷?程序線性位址空間裡的頁面不必常駐記憶體,在執行一條指令時,如果發現他要訪問的頁沒有在記憶體中 即存在位為0 那麼停止該指令的執行,並產生乙個頁不存在的異常,對應的故障處理程式可通過從外存載入該頁的方法來排除故障,之後,原先引起的異常的指令就可以繼續執行,而不再產生異常。二 頁面排...