中断处理过程
中断处理的一般过程如下图所示:
中断处理过程
当中断产生时,处理机将按如下的顺序执行:
- 保存当前处理机状态信息
- 载入异常或中断处理函数到PC寄存器
- 把控制权转交给处理函数并开始执行
- 当处理函数执行完成时,恢复处理器状态信息
- 从异常或中断中返回到前一个程序执行点
中断使得CPU可以在事件发生时才予以处理,而不必让CPU连续不断地查询是否有相应的事件发生。通过两条特殊指令:关中断和开中断可以让处理器不响应或响应中断(在关闭中断期间,通常处理器会把新产生的中断挂起,当中断打开时立刻进行响应)。在执行中断服务例程的过程中,如果有更高优先级别的中断源触发中断,由于当前处于中断处理上下文环境中,根据不同的处理器构架可能有不同的处理方式,比如新的中断等待挂起直到当前中断处理离开后再行响应;或新的高优先级中断打断当前中断处理过程,而去直接响应这个更高优先级的新中断源。后面这种情况,称之为中断嵌套。在硬实时环境中,前一种情况是不允许发生的,不能使响应中断的时间尽量的短。而在软件处理(软实时环境)上,RT-Thread允许中断嵌套,即在一个中断服务例程期间,处理器可以响应另外一个优先级更高的中断,过程如下图所示:
当正在执行一个中断服务例程(中断1)时,如果有更高的中断(中断2、中断3)触发,那么操作系统将先保存当前中断服务例程的上下文环境,然后转向中断2的中断服务例程,依此类推,直至中断3。当中断3的中断服务例程运行完成后,系统才恢复中断2的上下文环境,然后转回到中断2的中断服务例程去接着执行,依此类推,直至中断1。
即使如此,对于中断的处理仍然存在着(中断)时间响应的问题,先来看看中断处理过程中的一些特定时间量(图7-3):
中断延迟TB定义为,从中断开始的时刻到中断服务例程开始执行的时刻之间的时间段。而中断服务例程的处理时间TC主要取决于中断服务例程处理的方法,对于不同的系统因其对中断处理的方法不同,其相应服务例程的时间需求也不一样。中断响应时间TD = TB + TC。