情景分析之越界通路
注:本文展示的代碼來自2.4.0版本的核心,入口函數do_page_fault定義在<arch/mm/fault.c>中。
總體處理流程:

備注:
①讀取CR2寄存器擷取出錯位址
CPU在發出頁面異常時,會将對應的位址存到CR2寄存器中,在頁面異常的處理程式中就可以從CR2中讀取到出錯位址。因為要讀取CR2寄存器,C語言無法做到,隻能通過嵌入式彙編實作。
②目前程序的使用者空間尚未建立
前面講過,每個程序都對應一個mm_struct結構,該結構是對程序整個使用者空間的抽象。在每個程序的程序控制塊即task_struct結構體中,有一個指針(mm)指向該程序的mm_struct結構。如果該指針為NULL,即表示目前程序的使用者空間尚未建立(在後面講程序排程與切換時,我們還會看到另一個情況:核心程序的mm指針也為NULL)。