裝置中斷會打斷核心程序的正常執行,系統對更高吞吐率的追求勢必會要求中斷服務程式盡量短小精悍。但是在現實中,中斷服務程式往往要進行大量耗時操作。linux將中斷處理程式分解為兩個部分:頂半部和底半部。
頂半部用於完成盡量少的比較緊急的工作,往往只是簡單的讀取暫存器的中斷狀態,並清除中斷標誌後,就進行「登記中斷」的工作,登記中斷意味著將底半部處理程式掛到該裝置的底半部執行佇列中去,這樣,頂半部執行的速度就會很快,從而可以服務更多的中斷請求。
linuz底半部機制主要有tasklet、工作佇列、軟中斷、和線 程化irq。
tasklet 是基於軟中斷實現的,因此也執行於軟中斷上下文,tasklet和軟中斷都執行於軟中斷上下文,屬於原子上下文的一種,因此軟中斷和tasklet處理函式中不允許睡眠。
工作佇列執行於程序上下文,工作佇列處理函式中允許睡眠。
Linux 中斷處理的核心 頂半部和底半部
裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必要求中斷服務程式盡可能地短小精悍。但是,這個良好的願望往往與現實並不吻合。在大多數真實的系統中,當中斷到來時,要完成的工作往往並不會是短小的,它可能要進行較大量的耗時處理。為了在中斷執行時間盡可能短和中斷處理需完成大量工作之間找到...
Linux 中斷處理的核心 頂半部和底半部
linux中斷處理的核心 頂半部和底半部 裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必要求中斷服務程式盡可能地短小精悍。但是,這個良好的願望往往與現實並不吻合。在大多數真實的系統中,當中斷到來時,要完成的工作往往並不會是短小的,它可能要進行較大量的耗時處理。為了在中斷執行時...
Linux 底半部機制
每當有外部中斷到來時,cpu會停止當前任務的執行而去執行中斷程式,為了提高效率,中斷服務程式不宜太大。對於乙個較大的外部中斷服務程式,linux將其劃分成2個部分 1 頂半部,不可中斷,不可搶占,執行在 硬 中斷上下文,一般是讀取暫存器狀態,執行內容較少 2 底半部,可中斷,可搶占,執行在軟中斷上下...