底半部機制之work struct(二)

2021-07-22 11:04:20 字數 1040 閱讀 1701

工作佇列

工作佇列的實現和

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將中斷處理程式分解為兩個部分 頂半部和底半部。頂半部用於完成盡量少的比較緊急的工作,往往只是簡單的讀取暫存器的中斷狀態,並清除中斷標誌後,就進行 登...