中断:
中断是一种硬件机制,用于通知CPU“有个异步事件产生了”。中断一旦被识别,CPU保存部分或全部现场(context),即部分或全部寄存器的值,跳转到专门的子程序中,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后程序回到:
- 在前后台系统中,程序回到后台系统;
- 在不可抢占内核系统中,程序回到被中断的任务;
- 在可抢占内核系统中,运行就绪态中优先级最高的任务;
中断使得CPU可以在事件发生时才予以处理,而不必让微处理器不断查询(polling)是否有事件发生。
通过2条特殊指令:关中断(disable interrupt)和开中断(enable interrupt),可以让微处理器不响应或响应中断。在实时系统中,关中断的时间应该尽量短一些,关中断影响中断延迟时间,关中断时间太长可能会引起中断丢失。微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断,并服务于那个更重要的中断。
中断延迟:
实时内核最重要的指标可能就是关中断的时间的长短。所有实时系统在进入临界区代码段之前,都要关中断;执行完临界区代码后再开中断。关中断的时间越长,中断延迟就越。
- 中断延迟 = 关中断最长时间 + 开始执行中断服务子程序第一条指令的时间
中断响应:
中断响应定义为:从中断发生到开始执行用户的中断服务子程序代码来处理这个中断的时间。
中断响应时间包括开始处理这个中断前的全部开销,典型的,执行用户代码之前,要保护现场,将CPU的各个寄存器推入堆栈。这段时间将被记作中断响应时间。
对不可抢占型内核,微处理器保存内部寄存器后,中断服务子程序代码立即全部得到执行:
- 中断响应时间 = 中断延迟 + 保存CPU内部寄存器的时间
对于可剥夺型内核,则要先调用一个特定的函数。该函数通知内核即将开始中断服务,使得内核可以跟踪中断的嵌套。
- 中断响应时间 = 中断延迟 + 保存CPU内部寄存器的时间 + 内核进入中断服务函数的执行时间
中断恢复时间: