1.中断简介

中断是计算机中的一个十分重要的概念,在现代计算机中毫无例外地都采用中断机制。在计算机执行程序的过程中,由于出现某个特殊情况(或称为"事件"),使得CPU中止现行程序,而转去执行处理该事件的处理程序(俗称中断处理或中断服务程序),待中断服务程序执行完毕,再返回断点继续执行原来的程序,这个过程称为中断。

2.中断信号线

在数字逻辑层面,外部设备和处理器之间有一条专门的中断信号线,用于连接外设与CPU的中断引脚。当外部设备发生状态改变时,可以通过中断信号线向处理器发出中断请求。

处理器一般只有两根中断线,一根是IRQ线(中断请求线),一根是FIQ线(快速中断请求线)。而管理的外设却有很多,为了解决这个问题,外设的中断信号线并不与处理器直接相连,而是与中断控制器相连接,后者才跟处理器的中断信号线连接。中断控制器一般通过处理器进行编程和配置。

3.中断的实现过程

中断不需要处理器轮询外设的状态,设备在自己发生状态改变时将主动发送一个信号给中断控制器,中断控制器会接收到通知信号(前提是中断控制器不主动屏蔽该信号),并经过中断优先级控制器的处理,最后由中断控制器向处理器发送中断信号,最后处理器接收到该信号(前提是处理器不主动屏蔽该信号)。大体流程如图3- 1所示。

中断简介_中断

图3- 1 中断实现流程

4.中断处理过程

当CPU收到中断或者异常时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理程序中,在完成对这个信号的处理后再跳转回刚才被打断的程序或任务中继续执行,其具体的处理过程如下。

4.1  中断响应前的准备

系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。

一般系统将所有的中断信号统一进行了编号(一共256个:0~255),这个号称为中断向量,具体哪个中断向量表示哪种中断有的是规定好的,也有的是在给定范围内自行设定的。

中断向量和中断服务程序的对应关系主要是由中断向量表负责。操作系统在中断向量表中设置好各种中断向量对应的中断服务函数,留待CPU查询使用。

具体负责处理中断(异常)的代码是由软件,也就是操作系统实现的,这部分代码属于操作系统内核代码。也就是说从CPU检测中断信号到加载中断服务程序以及从中断服务程序中恢复执行被暂停的程序,这个流程基本上是硬件确定下来的,而具体的中断向量和服务程序的对应关系设置和中断服务程序的内容是由操作系统确定的。

4.2  CPU检查是否有中断/异常信号

CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器是否发送中断请求,如果有,那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量。

4.3  中断处理

当异常中断产生时,系统执行完当前指令后,将跳转到异常向量表的相应地址去执行。该地址处是一句跳转指令,跳转到系统定义的总中断服务函数里面去执行,然后进行任务上下文的保存,读取中断控制器的状态位以得出中断向量号,根据中断向量表中的中断向量号找到对应的中断服务函数执行,执行结束后,恢复被中断任务的上下文,继续执行任务。中断处理流程如图4- 1所示。

中断简介_中断_02

图4- 1 中断处理流程