學習筆記之中斷下半部

2021-09-27 07:37:04 字數 1056 閱讀 4385

中斷下半部:由於中斷處理力求時間短,所以引出了下半部。

tasklet工作在中斷上下文,處理中不允許休眠,而workqueue工作在程序上下文,這是不同點。

1,softirq: 處理比較快,但是核心級別的機制,需要修改整個核心原始碼,不推薦也不常用

2,tasklet: 內部實現實際呼叫了softirq

3, workqueue: 工作佇列

1,tasklet:

struct tasklet_struct

; a, 初始化

struct tasklet_struct mytasklet;

tasklet_init(struct tasklet_struct * t, void(* func)(unsigned long), unsigned long data)

例子:void key_tasklet_half_irq(unsigned long data)

tasklet_init(&key_dev->mytasklet, key_tasklet_half_irq, 45);

b,在上半部中放入到核心執行緒中--啟動

// 啟動下半步

tasklet_schedule(&key_dev->mytasklet);

c,模組解除安裝的時候:

tasklet_kill(&key_dev->mytasklet);

2,工作佇列和工作

typedef void (*work_func_t)(struct work_struct *work);

struct work_struct ;

a, 初始化

void work_irq_half(struct work_struct *work)

struct work_struct mywork;

init_work(struct work_struct *work, work_func_t func);

b, 在上半部中放入到核心執行緒中--啟動

schedule_work(&key_dev->mywork);

筆記 中斷,下半部

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

中斷的上下半部

因為輸入類裝置的輸入都是非同步事件,因此一般使用中斷來處理和響應。當中斷處理程式比較長,而又希望優良的響應特性時,linux核心處理中斷的方案是 人為地將處理程式分為兩部分。1 為什麼要分上半部 top half,又叫頂半部 和下半部 bottom half,又叫底半部 2 下半部處理策略1 tas...

中斷下半部的妙用

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