中断处理
中断向量表
中断控制是所有计算机系统的一个核心模块,不同的硬件平台有不同的中断机制。不管怎样,中断机制最核心的部分是中断向量表,每一种硬件体系根据自己的实现提供一张中断向量表。
中断向量表提供了所有支持的中断定义以及相应的中断服务程序。当发生异常时,首先要保存当前的处理器状态,然后进入到相应的异常向量地址。一般来说,异常向量地址处是一个跳转指令,使程序进入相应的异常处理过程
中断的种类
根据中断向量表,可以把这些中断具体分为:同步中断、异步中断和软件中断。
- 异步中断(interrupt)是由于CPU外部的原因而改变程序执行流程的过程,属于异步事件,又称为硬件中断。
- 软件中断(software interrupt自陷(trap)表示通过处理器所拥有的软件指令、可预期地使处理器正在执行的程序的执行流程发生变化,以执行特定的程序。自陷是显式的事件,需要无条件地执行.相当于函数调用
- 同步中断(exception)即异常,是CPU自动产生的自陷,以处理异常事件,如被0除、执行非法指令和内存保护故障等。异常没有对应的处理器指令,当异常事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处理程序。
其他中断的分类
中断还可以有以下几种分类方法:
-
可屏蔽中断和不可屏蔽中断
根据硬件中断是否可以被屏蔽,中断分为可屏蔽中断和不可屏蔽中断。
能够被屏蔽掉的中断称为可屏蔽中断。对于可屏蔽中断,外部设备的中断请求信号一般需要先通过CPU外部的中断控制器,再与CPU相应的引脚相连。在任何时候都不可屏蔽的,称为**不可屏蔽中断 -
边沿触发中断和电平触发中断
根据中断触发的方式,中断分为边沿触发中断和电平触发中断。
在边沿触发方式中,中断线从低变到高或是从高变到低时,中断信号就被发送出去,并只有在下一次的从低变到高或是从高变到低时才会再度触发中断。
对于电平触发方式,在硬件中断线的电平发生变化时产生中断信号,并且中断信号的有效性将持续保持下去,直到中断信号被清除。 -
向量中断、直接中断和间接中断
根据中断服务程序的调用方式,可把中断分为向量中断、直接中断和间接中断。
向量中断是通过中断向量来调用中断服务程序的方式。80x86
在直接中断调用方式中,中断对应的中断服务程序的入口地址是一个固定值,当中断发生的时候,程序执行流程将直接跳转到中断服务程序的入口地址,执行中断服务程序。8051ARM
对于间接中断,中断服务程序的入口地址由寄存器提供
实时内核的中断管理
在实时多任务系统中,中断服务程序通常包括3个方面的内容:
- 中断前导:保存中断现场,进入中断处理;
- 用户中断服务程序:完成对中断的具体处理;需要用户编程位置。
- 中断后续:恢复中断现场,退出中断处理
微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断并服务于那个更重要的中断。具体程序需要考虑中断判优,中断选择
中断管理功能
-
挂接中断服务程序:把一个函数(用户中断服务程序)同一个虚拟中断向量表中的中断向量联系在一起;
-
获得中断服务程序入口地址:根据中断向量,获得挂接在该中断向量上的中断服务程序的入口地址;
-
获取中断嵌套层次:在允许中断嵌套的处理中,获取当前的中断嵌套层次信息;
-
开中断:使能中断;
-
关中断:屏蔽中断
中断服务程序
在中断服务程序中可以使用实时内核提供的应用编程接口。但一般只能使用不会导致调用程序可能出现阻塞情况的编程接口,而不要使用分配内存、获得信号量等可能导致中断服务程序的执行流程被阻塞的操作。中断服务程序不能使用关于对象创建和删除方面的操作。
-
当发生中断的时候,对应中断向量中注册的中断服务程序就会被调用执行。中断服务程序的注册即以中断号为索引,把处理中断的函数地址放置到中断向量的地址表中。
-
中断服务程序的启动完全由CPU来负责,不需要操作系统的处理。