linux中断的下半部机制有哪些

linux中断的下半部机制有哪些,第1张

一、中断处理为什么要下半部?Linux在中断处理中间中断处理分了上半部和下半部,目的就是提高系统的响应能力和并发能力。通俗一点来讲:当一个中断产生,调用该中断对应的处理程序(上半部)然后告诉系统,对应的后半部可以执行了。然后中断处理程序就返回,下半部会在合适的时机有系统调用。这样一来就大大的减少了中断处理所需要的时间。

二、那些工作应该放在上半部,那些应该放在下半部?

没有严格的规则,只有一些提示:

1、对时间非常敏感,放在上半部。

2、与硬件相关的,放在上半部。

3、不能被其他中断打断的工作,放在上半部。

以上三点之外的,考虑放在下半部。

三、下半部机制在Linux中是怎么实现的?

下半部在Linux中有以下实现机制:

1、BH(在2.5中删除)

2、任务队列(task queue,在2.5删除)

3、软中断(softirq,2.3开始。本文重点)

4、tasklet(2.3开始)

5、工作队列(work queue,2.5开始)

四、软中断是怎么实现的(以下代码出自2.6.32)?

软中断不会抢占另外一个软中断,唯一可以抢占软中断的是中断处理程序。

软中断可以在不同CPU上并发执行(哪怕是同一个软中断)

1、软中断是编译期间静态分配的,定义如下:

struct softirq_action { void (*action)(struct softirq_action *)}

/*

* PLEASE, avoid to allocate new softirqs, if you need not _really_ high

* frequency threaded job scheduling. For almost all the purposes

* tasklets are more than enough. F.e. all serial device BHs et

* al. should be converted to tasklets, not to softirqs.

*/

enum {

HI_SOFTIRQ=0,

TIMER_SOFTIRQ,

NET_TX_SOFTIRQ,

NET_RX_SOFTIRQ,

BLOCK_SOFTIRQ,

BLOCK_IOPOLL_SOFTIRQ,

TASKLET_SOFTIRQ,

SCHED_SOFTIRQ,

HRTIMER_SOFTIRQ,

RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */

NR_SOFTIRQS

中断分软中断跟硬中断,硬中断是由硬件从外部触发,软中断由软件触发,就像linux系统调用int 80一样。至于中断的上下部其实就是因为中断的处理时间跟它的优先级不一定成正比,所以一般先处理中断最重要的部分(上半部),待到不怎么忙的时候,再来处理比较悠闲的部分(下半部)。就像输入的时候,拿到键盘输入的是什么才是最重要的(上半部),显示字符才是次要的(下半部)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8571284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存