中斷的上下半部

2021-08-19 10:37:41 字數 1027 閱讀 1380

因為輸入類裝置的輸入都是非同步事件,因此一般使用中斷來處理和響應。

當中斷處理程式比較長,而又希望優良的響應特性時,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 以及...

筆記 中斷,下半部

先弄清兩個概念,程序上下文和中斷上下文 處理器總處於以下狀態中的一種 核心態,執行於程序上下文,核心代表程序執行於核心空間 核心態,執行於中斷上下文,核心代表硬體執行於核心空間 使用者態,執行於使用者空間。使用者空間的應用程式,通過系統呼叫,進入核心空間。這個時候使用者空間的程序要傳遞很多變數 引數...

中斷下半部的妙用

中斷下半部 中斷處理程式是核心中很重要的一部分,但是由於本身存在著一些限制,所以他只能完成整個中斷處理程式中的上半部分。具體侷限如下 中斷處理程式是以非同步方式執行,並且他有可能會打斷其他重要的 甚至有可能是其他的中斷程式 的執行,因此為了避免被打斷的 停止時間過長。中斷處理程式要執行的越快越好 如...