Linux中断处理程序架构
作者:互联网
设备的中断会打断内核进程中的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不是短小的,它可能要进行较大量的耗时处理。
为了在中断执行时间尽量短和中断处理需完成的工作尽量大之间找到一个平衡点,Linux将中断处理程序分解为两个半部:顶半部(Top Half)和底半部(Bottom Half)。
顶半部用于完成尽量少的比较紧急的功能,它往往只是简单的读取寄存器中的中断状态,并在清除中断标志后就进行“登记中断”的工作。“登记中断”意味着将底半部处理程序挂到该设备的底半部执行队列中去。这样,顶半部的执行就会非常快,从而可以服务更多的中断请求。
现在,中断处理工作的重心就落在底半部的头上了,需要它来完成中断事件的绝大数任务。底半部几乎做了中断处理程序的所有事情,而且可以被新的中断打断,这也是底半部和顶半部最大的不同,因为顶半部被设计成不可中断,底半部相对来说并不是非常紧急的,而且相对比较耗时,不在硬件中断服务程序中执行。
尽管顶半部、底半部的结合能够改善系统的相应能力,但是,僵化的认为Linux设备驱动中的中断处理一定要分为两个半部则是不对的。如果中断要处理的工作本身很少,则完全可以直接在顶半部直接完成。
标签:服务程序,架构,中断,处理,半部,Linux,处理程序 来源: https://www.cnblogs.com/lc0811/p/14377209.html