內核在start_kernel函數(源碼在init/main.c中)中調用trap_init、init_IRQ兩個函數來設置異常的處理函數。
1.trap_init函數用來設置各種異常處理向量,包括中斷向量。所謂向量就是壹些被安放在固定位置的代碼,當發生異常時,CPU會自動執行這些固定 位置上的指令。異常向量的代碼很簡單,它們只是壹些跳轉指令。發生異常時,CPU自動執行這些指令,跳轉去執行更復雜的代碼,比如保存被中斷程序的執行環 境,調用異常處理函數,恢復被中斷程序的執行環境並重新運行。
2.init_IRQ函數用來初始化中斷的處理函數,設置各種中斷的默認處理函數。當發生中斷時,中斷總入口函數asm_do_IRQ就可以調用這些函數作進壹步處理。
<壹>中斷處理體系結構
Linux內核將所有中斷統壹編號,使用壹個irq_desc結構數組來描述這些中斷,每個數組項對應壹個中斷(也可能是壹組中斷,它們公用相同的中斷 號),裏面記錄了中斷的名稱、中斷狀態、中斷標記(比如中斷類型、是否***享中斷),並提供了中斷的底層硬件訪問函數(清除、屏蔽、使能中斷),提供了這個 中斷的處理函數入口,通過它可以調用用戶註冊的中斷函數。