因為輸入類裝置的輸入都是非同步事件,因此一般使用中斷來處理和響應。
當中斷處理程式比較長,而又希望優良的響應特性時,linux核心處理中斷的方案是:人為地將處理程式分為兩部分。
(1)為什麼要分上半部(top half,又叫頂半部)和下半部(bottom half,又叫底半部)?
(2)下半部處理策略1:tasklet(小任務)
(3)下半部處理策略2:workqueue(工作佇列)
(1)tasklet相關介面介紹
(2)實戰演示tasklet實現下半部
原程式:
[cpp]
view plain
copy
static
irqreturn_t button_interrupt(
intirq,
void
*dummy)
使用方案的策略:
(1)workqueue的突出特點
(1)必須立即進行緊急處理的極少量任務放入在中斷的頂半部中
(2)需要較少時間的中等數量的急迫任務放在tasklet中
(3)需要較多時間且並不急迫(允許被作業系統剝奪執行權)的大量任務放在workqueue中
(4)可能引起睡眠的任務放在workqueue中
中斷處理 上下半部機制
首先需要了解一下中斷的概念 乙個 中斷 僅僅是乙個訊號,當硬體需要獲得處理器對它的關注時,就可以傳送這個訊號。核心維護了乙個中斷訊號線的登錄檔,該登錄檔類似於i o埠的登錄檔。模組在使用中斷前要先請求乙個中斷通道 或中斷請求irq 然後在使用後釋放該通道。用到的api就是request irq 以及...
筆記 中斷,下半部
先弄清兩個概念,程序上下文和中斷上下文 處理器總處於以下狀態中的一種 核心態,執行於程序上下文,核心代表程序執行於核心空間 核心態,執行於中斷上下文,核心代表硬體執行於核心空間 使用者態,執行於使用者空間。使用者空間的應用程式,通過系統呼叫,進入核心空間。這個時候使用者空間的程序要傳遞很多變數 引數...
中斷下半部的妙用
中斷下半部 中斷處理程式是核心中很重要的一部分,但是由於本身存在著一些限制,所以他只能完成整個中斷處理程式中的上半部分。具體侷限如下 中斷處理程式是以非同步方式執行,並且他有可能會打斷其他重要的 甚至有可能是其他的中斷程式 的執行,因此為了避免被打斷的 停止時間過長。中斷處理程式要執行的越快越好 如...