工作佇列
工作佇列的實現和
tasklet
很相似,只是工作佇列的執行上下文在核心執行緒,所以可以排程和睡眠。首先是定義乙個工作佇列和乙個底半部執行函式
structwork_struct
my_wq
;
void
my_wq_func
(structwork_struct *work)
通過init_work()
巨集,可以初始化工作佇列並將工作佇列和處理函式進行繫結
init_work(
&my_wq, my_wq_func
); 和
tasklet_schedule
函式相對應的是
schedule
_work
()函式
,排程工作佇列
schedule_work(
&my_wq)
工作佇列的處理模型也是
tasklet
一樣一樣的,只是在初始化工作佇列和關聯處理函式的時候將他放在了模組初始化函式裡面 /
/定義函式並關聯他們
structwork_struct
my_wq
;
void
my_wq_func
(structwork_struct *work)
//中斷處理函式
void
my_wq_func
(unsignedlong)
//中斷處理頂半部
irqreturn_t***_interrupt(intirq, void *dev_id)
//模組載入函式
int__init ***_init()
//模組解除安裝函式
void
__exit ***_exit()
實際上,在一些驅動中經常看到的是work_struct和workqueue_struct一起使用
底半部機制
1 tasklet 只需要定義三段 功能函式 void my tasklet unsigned long data 定義cdd tasklet 變數,繫結my tasklet函式 declare tasklet cdd tasklet,my tasklet,0 tasklet schedule cd...
Linux 底半部機制
每當有外部中斷到來時,cpu會停止當前任務的執行而去執行中斷程式,為了提高效率,中斷服務程式不宜太大。對於乙個較大的外部中斷服務程式,linux將其劃分成2個部分 1 頂半部,不可中斷,不可搶占,執行在 硬 中斷上下文,一般是讀取暫存器狀態,執行內容較少 2 底半部,可中斷,可搶占,執行在軟中斷上下...
Linux 中斷底半部
裝置中斷會打斷核心程序的正常執行,系統對更高吞吐率的追求勢必會要求中斷服務程式盡量短小精悍。但是在現實中,中斷服務程式往往要進行大量耗時操作。linux將中斷處理程式分解為兩個部分 頂半部和底半部。頂半部用於完成盡量少的比較緊急的工作,往往只是簡單的讀取暫存器的中斷狀態,並清除中斷標誌後,就進行 登...