Linux内核机制
中断处理
1.硬中断首先执行,期间中断被禁止。
2.然后中断使能,软中断执行。
软中断有优先级,数量固定;
可被硬中断打断嵌套,但不可被软中断打断;
在软中断被全部处理完成之前进程不会被调度。
在SMP中,软中断是谁触发,谁执行,因此多个softirq可以并行执行,甚至同一个softirq可以在多个processor上同时执行。
Linux内核最多可以支持32个softirq,但当前只实现了10个。 软中断定义在include/linux/interrupt.h,包括HI, TIMER, NET_TX, NET_RX, BLOCK, BLOCK_IOPOLL, TASKLET,SCHED, HRTIMER, RCU。
Tasklet是由链表管理的一系列延迟处理函数,分为高优先级和低优先级两个链表,分别在HI和TASKLET两个软中断中被逐个调用。
Workques是延迟处理的另一种机制,运行在内核线程,处理实时性比软件中断更低的操作。
硬中断在Linux中被称为Top Haf, 软中断、Tasklet和Workque被称为Bottom Haf.