中断处理

中断向量表

中断控制是所有计算机系统的一个核心模块,不同的硬件平台有不同的中断机制。不管怎样,中断机制最核心的部分是中断向量表,每一种硬件体系根据自己的实现提供一张中断向量表。

中断向量表提供了所有支持的中断定义以及相应的中断服务程序。当发生异常时,首先要保存当前的处理器状态,然后进入到相应的异常向量地址。一般来说,异常向量地址处是一个跳转指令,使程序进入相应的异常处理过程

中断的种类

根据中断向量表,可以把这些中断具体分为:同步中断、异步中断和软件中断。

  1. 异步中断interrupt)是由于CPU外部的原因而改变程序执行流程的过程,属于异步事件,又称为硬件中断
  2. 软件中断software interrupt自陷(trap)表示通过处理器所拥有的软件指令、可预期地使处理器正在执行的程序的执行流程发生变化,以执行特定的程序。自陷是显式的事件,需要无条件地执行.相当于函数调用
  3. 同步中断exception)即异常,是CPU自动产生的自陷,以处理异常事件,如被0除、执行非法指令和内存保护故障等。异常没有对应的处理器指令,当异常事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处理程序。

其他中断的分类

中断还可以有以下几种分类方法:

  • 可屏蔽中断和不可屏蔽中断
    根据硬件中断是否可以被屏蔽,中断分为可屏蔽中断和不可屏蔽中断。
    能够被屏蔽掉的中断称为可屏蔽中断。对于可屏蔽中断,外部设备的中断请求信号一般需要先通过CPU外部的中断控制器,再与CPU相应的引脚相连。在任何时候都不可屏蔽的,称为**不可屏蔽中断

  • 边沿触发中断和电平触发中断

    根据中断触发的方式,中断分为边沿触发中断和电平触发中断
    在边沿触发方式中,中断线从低变到高或是从高变到低时,中断信号就被发送出去,并只有在下一次的从低变到高或是从高变到低时才会再度触发中断。
    对于电平触发方式,在硬件中断线的电平发生变化时产生中断信号,并且中断信号的有效性将持续保持下去,直到中断信号被清除。

  • 向量中断、直接中断和间接中断

    根据中断服务程序的调用方式,可把中断分为向量中断直接中断间接中断

    向量中断是通过中断向量来调用中断服务程序的方式。80x86

    在直接中断调用方式中,中断对应的中断服务程序的入口地址是一个固定值,当中断发生的时候,程序执行流程将直接跳转到中断服务程序的入口地址,执行中断服务程序。8051ARM

    对于间接中断,中断服务程序的入口地址由寄存器提供

实时内核的中断管理

在实时多任务系统中,中断服务程序通常包括3个方面的内容:

  • 中断前导:保存中断现场,进入中断处理;
  • 用户中断服务程序:完成对中断的具体处理;需要用户编程位置。
  • 中断后续:恢复中断现场,退出中断处理

微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断并服务于那个更重要的中断。具体程序需要考虑中断判优,中断选择

中断处理

中断管理功能

  • 挂接中断服务程序:把一个函数(用户中断服务程序)同一个虚拟中断向量表中的中断向量联系在一起;

  • 获得中断服务程序入口地址:根据中断向量,获得挂接在该中断向量上的中断服务程序的入口地址;

  • 获取中断嵌套层次:在允许中断嵌套的处理中,获取当前的中断嵌套层次信息;

  • 开中断:使能中断;

  • 关中断:屏蔽中断

中断服务程序

在中断服务程序中可以使用实时内核提供的应用编程接口。但一般只能使用不会导致调用程序可能出现阻塞情况的编程接口,而不要使用分配内存、获得信号量等可能导致中断服务程序的执行流程被阻塞的操作。中断服务程序不能使用关于对象创建和删除方面的操作

  • 当发生中断的时候,对应中断向量中注册的中断服务程序就会被调用执行。中断服务程序的注册即以中断号为索引,把处理中断的函数地址放置到中断向量的地址表中。

  • 中断服务程序的启动完全由CPU来负责,不需要操作系统的处理。