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

2021-10-23 22:45:18 字數 2080 閱讀 7285

前言

cpu在執行程式時,如果有外部中斷觸發時,如定時器中斷、序列匯流排中斷等,cpu停止當前任務從

而轉去響應中斷處理。對於中斷函式的處理,原則是盡快處理完事務並退出中斷,這一點也比較好

理解,盡快處理中斷並返回,保證正常任務的執行,並且能否響應其他事務的中斷,保證實時性和

併發性。其實,在微控制器邏輯程式設計中已經使用過linux中斷「上下部分」的思維,或者說,linux中斷

「上下半部」設計者靈感即源自最初的裸機程式設計。例如,在微控制器裸機程式設計中,需要通過串列埠(uart)

進行資料通訊,對於接收資料情況下,在採用中斷方式接收時,我們一般會先將資料存放在乙個快取

(buf)中,中斷函式只負責將資料存入快取,而在主函式中獲取快取資料並處理。在這個過程中,

中斷處理部分即將資料存入快取的動作為「中斷上半部」,當然還包括從暫存器獲取資料,改變暫存器

狀態等。「中斷下半部」則是獲取快取資料並處理。

rtos中斷處理

從裸機程式設計上公升到系統層面,微控制器執行實時系統(rtos)。rtos一般以執行緒為排程任務,沒有

程序概念,但都會提供一套類似標準作業系統的執行緒同步機制。此時,在設計中斷程式時,可以

更好實現「上半部」和「下半部」,特別是「下半部」。以rt-thread為例,實現乙個串列埠中斷接收函

數。上半部分負責將資料放入快取,並通過訊號量通知下半部分處理。下半部實現,可以建立一

個處理執行緒,當獲得上半部訊號量時則排程執行緒進行處理資料,否則則掛起該執行緒,節約cpu資源。

linux中斷

不同於裸機程式設計,作業系統是多個程序和多個執行緒執行,巨集觀上達到並行執行的狀態,外設中斷

則會打斷核心中任務排程和執行,及遮蔽其外設的中斷響應,如果中斷函式耗時過長則使得系統

實時性和併發性降低。中斷原則是盡可能處理少的事務,而一些裝置中往往需要處理大量的耗時

事務。為了提高系統的實時性和併發性,linux核心將中斷處理程式分為上半部(top half)和

下半部(bottom half)。上半部分任務比較少,處理一些暫存器操作、時間敏感任務,以及

「登記中斷」通知核心及時處理下半部的任務。下半部分,則負責處理中斷任務中的大部分工作,

如乙個匯流排通訊系統中資料處理部分。

linux中斷上下部分區別:

1)上半部由外設中斷觸發,下半部由上半部觸發。

2)上半部不會被其他中斷打斷,下半部是可以被打斷的。

3)上半部分處理任務要快,主要任務、耗時任務放在下半部。

一般來說,在中斷上半部執行完畢,下半部即在核心的排程下被執行,當然如果有其他更高優先順序需處理的任務,會先處理該任務再排程處理下半部,或者在系統空閒時間進行處理。

linux中斷設計

對於linux系統裝置而言,乙個完整的中斷程式由上半部和下半部分共同構成,在編寫裝置驅動

程式前,就需考慮好上半部和下半部的分配。很多時候上半部與下半部並沒有嚴格的區分界限,

主要由程式設計師根據實際設計,如某些外設中斷可以沒有下半部。關於上下半部的劃分原則,就是

主要事務、耗時事務劃分在下半部處理。

1)與硬體相關的操作,如操作暫存器,必須放在上半部。

2)對時間敏感、要求實時性的任務放在上半部。

3)該任務不能被其他中斷或者程序打斷的放在上半部。

4)實時性要求不高的任務、耗時任務放在下半部。

linux中斷下半部實現

linux下半部實現,通過核心版本更新中實現下衍化,最原始的實現手段是bh(bottom half)後

在2.5版本移除,在2.3版本引入軟中斷(softirq)和tasklet機制,在2.5版本引入工作佇列

(work queue在)。因此,目前使用方式是三種,軟中斷、tasklet機制、工作佇列。

linux中斷的上半部和下半部

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

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

裝置的中斷會打斷核心中程序的正常排程和執行,系統對更高吞吐率的追求勢必 要求中斷服務程式盡可能地短小精悍。但是,這個良好的願望往往與現實並不吻合。在大多數真實的系統中,當中斷到來時,要完成的工作往往並不會是短小的,它可能 要進行較大量的耗時處理。為了在中斷執行時間盡可能短和中斷處理需完成大量工作之間...

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

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