Linux 驅動學習筆記 - 中斷管理之上半部和下半部(十七)

Linux 驅動學習筆記 - 中斷管理之上半部和下半部(十六)

本系列均爲正點原子 Linux 驅動的學習筆記, 以便加深筆者記憶。如讀者想進一步學習,可以到正點原子官網中下載資料進行學習。

上半部與下半部

上半部與下半部也稱爲頂半部和低半部。

我們在使用 request_irq 申請中斷的時候註冊的中斷服務函數屬於中斷處理的上半部,只要中斷觸發,那麼中斷處理函數就會執行。

我們知道中斷處理函數一定要快點執行完畢,越短越好,但是現實往往是殘酷的,有些中斷處理就是比較費時間,我們必須要對其進行處理,縮小中斷的執行時間。

這個時候中斷處理過程就需要分成兩部分:

  • 上半部:上半部就是中斷處理函數,那些處理過程比較快,不會佔用很長時間的處理就可以放在上半部完成。

  • 下半部:如果中斷處理過程比較耗時,那麼就將這些比較耗時的代碼提出來,交給下半部去執行,這樣中斷處理函數就會快進快出

因此,Linux 內核將中斷分爲上半部和下半部的主要目的就是實現中斷處理函數的快進快出,那些對時間敏感、執行速度快的操作可以放到中斷處理函數中,也就是上半部。剩下的所有工作都可以放到下半部去執行,比如在上半部將數據拷貝到內存中,關於數據的具體處理就可以放到下半部去執行。至於哪些代碼屬於上半部,哪些代碼屬於下半部並沒有明確的規定,一切根據實際使用情況去判斷,這個就很考驗驅動編寫人員的功底了。這裏有一些可以借鑑的參考點:

  • 如果要處理的內容不希望被其他中斷打斷,那麼可以放到上半部

  • 如果要處理的任務對時間敏感,可以放到上半部

  • 如果要處理的任務與硬件有關,可以放到上半部

  • 除了上述三點以外的其他任務,優先考慮放到下半部

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章