linux中斷處理的上半部和下半部

2021-06-16 19:08:56 字數 1098 閱讀 9257

**:

裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必

要求中斷服務程式盡可能地短小精悍。但是,這個良好的願望往往與現實並不吻合。

在大多數真實的系統中,當中斷到來時,要完成的工作往往並不會是短小的,它可能

要進行較大量的耗時處理。 

為了在中斷執行時間盡可能短和中斷處理需完成大量工作之間找到乙個平衡點,linux 將中斷

處理程式分解為兩個半部:頂半部(top  half)和底半部(bottom half)。 

頂半部完成盡可能少的比較緊急的功能,它往往只是簡單地讀取暫存器中的中斷狀態並清除

中斷標誌後就進行「登記中斷」的工作。「登記中斷」意味著將底半部處理程式掛到該裝置的底半

部執行佇列中去。這樣,頂半部執行的速度就會很快,可以服務更多的中斷請求。

現在,中斷處理工作的重心就落在了底半部的頭上,它來完成中斷事件的絕大多數任務。底半部

幾乎做了中斷處理程式所有的事情,而且可以被新的中斷打斷,這也是底半部和頂半部的最大不同,

因為頂半部往往被設計成不可中斷。底半部則相對來說並不是非常緊急的,而且相對比較耗時,不在

硬體中斷服務程式中執行。 

儘管頂半部、底半部的結合能夠改善系統的響應能力,但是,僵化地認為 linux

裝置驅動中的中斷處理一定要分兩個半部則是不對的。如果中斷要處理的工作本身很

少,則完全可以直接在頂半部全部完成。 

其他作業系統中對中斷的處理也採用了類似於linux系統的方法,真正的硬體中斷服務程式都應該盡可能短。

因此,許多作業系統都提供了中斷上下文和非中斷上下文相結合的機制,將中斷的耗時工作保留到非中斷上下文去執行。

linux 系統實現底半部的機制主要有tasklet,工作佇列和軟中斷。 

linux 的中斷處理分為兩個半部,頂半部處理緊急的硬體操作,底半部處理不緊

急的耗時操作。tasklet 和工作佇列都是排程中斷底半部的良好機制,tasklet 基於軟中

斷實現。核心定時器也依靠軟中斷實現。

核心中的延時是忙等待或者睡眠等待,為了充分利用cpu資源,使系統有更好的

吞吐效能,在對延遲時間的要求並不是很精確的情況下,睡眠等待通常是值得推薦的。

linux中斷的上半部和下半部

本文 與linux中斷息息相關的乙個重要概念是linux中斷分為兩個半部 上半部 tophalf 和下半部 bottom half 上半部的功能是 登記中斷 當乙個中斷發生時,它進行相應地硬體讀寫後就把中斷例程的下半部掛到該裝置的下半部執行佇列中去。因此,上半部執行的速度就會很快,可以服務更多的中斷...

Linux中斷上半部和下半部概念

前言 cpu在執行程式時,如果有外部中斷觸發時,如定時器中斷 序列匯流排中斷等,cpu停止當前任務從 而轉去響應中斷處理。對於中斷函式的處理,原則是盡快處理完事務並退出中斷,這一點也比較好 理解,盡快處理中斷並返回,保證正常任務的執行,並且能否響應其他事務的中斷,保證實時性和 併發性。其實,在微控制...

中斷的上半部分與下半部分

為了讓核心能夠快速響應硬體裝置的訊息,引入了中斷機制。當硬體裝置需要被處理 比如網絡卡收到了包 會傳送乙個非同步的中斷請求給處理器,然後處理器陷入中斷上下文中,停止當前執行的程式,轉而執行預先設定好的中斷處理程式。完成中斷處理程式之後給硬體裝置乙個訊號再返回原先的工作繼續。在這套機制中,中斷處理程式...