中斷會打斷內核中進程的正常調度和運行,調用中斷處理函數。在大多數的系統中,當中斷到來時可能耗費大量的時間對它進行處理。若是在中斷處理函數中沒有禁止中斷,該中斷處理函數執行過程當中仍有可能被其餘中斷打斷。因此咱們固然但願中斷處理函數執行得越快越好。 函數
爲了在中斷執行時間儘量短的和中斷須要處理完大量的工做之間找一個平衡點,將中斷分爲上下兩部分。設計
頂半部完成儘量少比較緊急的任務,它每每是簡單的讀取寄存器中的中斷狀態並清除中斷標誌後就進行「登記中斷」的工做。登記中斷:也就是將底半部處理程序掛在底半部執行隊列中去。這樣上半部執行的速度就會很快,能夠服務更多的中斷請求。隊列
如今,中斷處理工做的重心就落在了底半部的頭上,它來完成中斷事件的絕大多數任務。底半部幾乎作了中斷處理程序全部的事情,並且能夠被新的中斷打斷,這也是底半部和頂半部的最大不一樣,由於頂半部每每被設計成不可中斷。底半部則相對來講並非很是緊急的,並且相對比較耗時,不在硬件中斷服務程序中執行。 進程
1.若是一個任務對時間很是敏感,感受告訴我仍是將其放在中斷處理程序中執行是個好的選擇。
2.若是一個任務和硬件相關,仍是將其放在中斷處理程序中執行吧。
3.若是一個任務要保證不被其餘中斷(特別是相同的中斷)打斷,那就將其放在中斷處理程序中吧。
4.其餘全部任務,除非你有更好的理由,不然所有丟到下半部執行。事件
儘管頂半部、底半部的結合可以改善系統的響應能力,可是,僵化地認爲 Linux設備驅動中的中斷處理必定要分兩個半部則是不對的。若是中斷要處理的工做自己不多,則徹底能夠直接在頂半部所有完成。 硬件