读了linux内核开发,对内核处理中断的流程(特别是共享中断)有了更深的认识。-----个人看法欢迎拍砖
linux内核 对中断处理过程:
首先硬件设备发出一个中断请求,内核注意到这个中断请求,响应这个中断请求,将这个中断线禁用防止再有其他中断源使用这个中断线,然后将执行这个中断对应的中断处理程序,但是如果是多个设备共用一条中断线,情况如何呢? 也就是说一个中断向量对应有多个中断处理程序的时候,内核如何知道该调用哪个中断处理程序呢? 答案是:内核并不知道该用哪个中断处理程序,而是依次调用这个中断线上对应得所有的中断处理程序,而将判断任务将给各个中断处理程序。中断程序自己判断这个中断是不是属于自己对应设备发出的中断,如果不是就立刻退出,内核接着调用这个中断线上对应的下一个中断处理程序。依次调用下去,直到某个中断程序判断是自己对应的设备,就会继续执行下去。
“中断处理程序自己判断这个中断是不是自己对应的设备发出的中断” 这个步骤是需要硬件设备支持的,比如提供一个状态寄存器,来标识刚才自己有没有成功申请到中断线路。这样中断处理程序就可以通过查询这个状态寄存器来判断是不是自己对应的设备发出了这个中断