事件让处理器转入处理程序
设备完成输入输出、定时器到期等事件,可以通过中断机制让处理器进入预设处理程序。系统不必依靠用户程序主动发起某个函数调用,才有机会处理这些事件。
中断入口需要保留恢复执行所需状态,并按系统规定建立处理环境。中断完成后,处理器可能继续原任务,也可能由调度安排其他工作;中断本身并不直接等同于一次任务切换。
控制器与处理流程分层
Linux的通用IRQ层把驱动接口、高层中断流程和中断控制器操作分开。驱动可以申请处理程序,底层再通过架构和控制器规则把相应事件交给它。
边沿触发和电平触发等类型需要不同的确认、屏蔽或结束流程。确认事件、暂时阻止再次投递与完成本轮处理承担不同职责,不能把所有硬件都套成一个相同顺序。
参考:[4]
上下文约束影响可做的工作
中断可能发生在用户态,也可能在内核已经执行时到来,入口需要据此处理状态。某些不可屏蔽或类似事件甚至可能打断普通中断入口,相关代码因而须考虑嵌套和重入。
这些要求说明中断程序需要专门设计,不能随意照搬普通应用代码。Linux的线程化IRQ等接口又提供不同处理安排;应依据所用接口和上下文确定允许的行为,而不是假定所有事件都以完全相同的方式运行。