linux内核是中断下半部

首先阐述下为什么内核要将中断分成上下半部


因为中断本身打断了正常的程序执行,中断中不能进行任务调度,所以中断需要快返回,但是某些操作必须在中断中执行。


如果内核需要执行一个硬件相关、时间敏感、不能被中断的操作,那么这些操作就应该放到上半部中,其他能够推迟的操作应该放到下半部中去,这样完成了中断中必须完成的操作,又能很好的进行调度。

看看内核对于下半部的支持

linux内核是中断下半部_第1张图片

首先说以下如何添加自己的软中断程序

linux内核是中断下半部_第2张图片

首先添加自己的软中断类型,值越低优先级越高

linux内核是中断下半部_第3张图片

用open_softirq增加相对应的中断处理函数

linux内核是中断下半部_第4张图片

用raise_softirq将自己的软件中断有效

之后内核在do_softirq中便能调用软件中断了


然后看看tasklet

linux内核是中断下半部_第5张图片

linux内核是中断下半部_第6张图片

通过以上3个方法来声明自己的tasklet

当然要编写自己的执行函数   void func(unsigned long arg);

linux内核是中断下半部_第7张图片

通过以上两个函数,将自己的tasklet加入到调度中去

当然也有相应函数来取消自己的tasklet,这里不介绍了


接下来看看工作队列workqueue


linux内核是中断下半部_第8张图片

linux内核是中断下半部_第9张图片

通过以上方法能声明一个work

当然得自己编写执行函数

linux内核是中断下半部_第10张图片

通过以上方法将work加入系统workquene


当然也可以创建自己的工作队列,然后将work加入自己的工作队列中

linux内核是中断下半部_第11张图片

linux内核是中断下半部_第12张图片


你可能感兴趣的:(linux内核是中断下半部)