- 论坛徽章:
- 4
|
10可用积分
do_softirq()/__do_softirq()中处理软中断时,是按照一定顺序逐个执行的.
如果相同的软中断多次发生,可能就由单独线程处理.
我的问题是, 如果注册一个低优先级的软中断(比如TASKLET_SOFTIRQ级别)但是执行时间很长,岂不影响了高优先级(比如HI_SOFTIRQ)的执行?
因为这些软中断处理是顺序执行的.
我哪里理解错了?请指点,谢谢!
do_softirq()中各个软中断执行的顺序:- 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
- };
复制代码 |
最佳答案
查看完整内容
回复 1# chishanmingshen 从上面代码中可以看出,每次执行软中断的时候,都是先处理高优先级的软中断,然后才是低优先级的软中断。当然了,如果一个低优先级的软中断执行时间过长,的确会影响下一次高优先级的软中断的执行。
|