中断处理及下半部
由中断和异常的区别可知,中断处理程序以一部方式执行,并且他有可能会打断其他重要代码(甚至包括其他中断处理程序)的执行。因此为了避免被打断的代码停止时间过长,中断处理程序应该执行得越快越好。
中断处理程序不再进程上下文中运行,所以他们不能阻塞,所以他们有很高的的实现要求。操作系统个必须有一个快速、异步、简单的机制负责对硬件做出迅速响应并完成那些时间要求很请严格的操作。
因此,整个中断处理流程被分成了两个部分:第一个部分是中断处理程序,内核通过对他的异步执行完成对硬件中断的即时响应。第二部分是下半部。
下半部
下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。
下半部机制的实现
下半部实现机制通常有软中断,tasklet,工作队列等。
软中断
LInux通过软中断实现下半部机制。软中断是在编译期间静态分配的,在内核中其实就是一个叫做softirq_vec的数组,数组包含了32个元素类型为softirq_action的元素。数组下标就表示了对应的软中断的优先级。Linux重要前6个元素被有效地使用。