Linux裝置驅動程式 中斷處理之頂半部和底半部

2021-09-06 20:32:57 字數 730 閱讀 2727

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

為了在中斷執行時間盡可能短和中斷處理需完成大量工作之間找到乙個平衡點,linux 將中斷處理程式分解為兩個半部:頂半部(top  half)和底半部(bottom half)。裝置驅動中的中斷處理一定要分兩個半部則是不對的。如果中斷要處理的工作本身很少,則完全可以直接在頂半部全部完成。其他作業系統中對中斷的處理也採用了類似於linux系統的方法,真正的硬體中斷服務程式都應該盡可能短。因此,許多作業系統都提供了中斷上下文和非中斷上下文相結合的機制,將中斷的耗時工作保留到非中斷上下文去執行。

linux 系統實現底半部的機制主要有tasklet,工作佇列和軟中斷。linux 的中斷處理分為兩個半部,頂半部處理緊急的硬體操作,底半部處理不緊

急的耗時操作。tasklet 和工作佇列都是排程中斷底半部的良好機制,tasklet 基於軟中斷實現。核心定時器也依靠軟中斷實現。核心中的延時是忙等待或者睡眠等待,為了充分利用cpu資源,使系統有更好的吞吐效能,在對延遲時間的要求並不是很精確的情況下,睡眠等待通常是值得推薦的。

(1)tasklet (首選機制),它非常快, 但是所有的tasklet **必須是原子的;始終工作在中斷期間執行。

(2)工作佇列, 它可能有更高的延時,但允許休眠。工作在乙個特殊核心程序的上下文中執行。

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...

Linux裝置驅動程式

linux系統中的裝置分為字元裝置 char device 塊裝置 block 和網路裝置 net device 三種,字元裝置是指在訪問時沒有快取,能夠像檔案一樣被訪問的裝置,字元裝置驅動程式至少要實現open close read和write系統呼叫。多數的linux裝置驅動程式可以在核心模組發...