date: 2014-09-24 19:09函數
注:本文展現的代碼來自2.4.0版本的內核,入口函數do_page_fault定義在<arch/mm/fault.c>中。指針
整體處理流程:blog
備註:進程
讀取CR2寄存器獲取出錯地址? CPU在發出頁面異常時,會將對應的地址存到CR2寄存器中,在頁面異常的處理程序中就能夠從CR2中讀取到出錯地址。由於要讀取CR2寄存器,C語言沒法作到,只能經過嵌入式彙編實現。it
當前進程的用戶空間還沒有創建? 前面講過,每一個進程都對應一個mm_struct結構,該結構是對進程整個用戶空間的抽象。在每一個進程的進程控制塊即task_struct結構體中,有一個指針(mm)指向該進程的mm_struct結構。若是該指針爲NULL,即表示當前進程的用戶空間還沒有創建(在後面講進程調度與切換時,咱們還會看到另外一個狀況:內核進程的mm指針也爲NULL)。date