中断

在计算机科学中,中断(英语:Interrupt)是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。

通常,在接收到来自外围硬件(相对于中央处理器和内存)的异步信号,或来自软件的同步信号之后,处理器将会进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个运行信息切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种运行信息切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是即时系统中尤为有用。这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。

分类

可屏蔽中断(maskable interrupt)。硬件中断的一类,可通过在中断屏蔽寄存器中设定位掩码来关闭。

非可屏蔽中断(non-maskable interrupt,NMI)。硬件中断的一类,无法通过在中断屏蔽寄存器中设定位掩码来关闭。典型例子是时钟中断(一个硬件时钟以恒定频率—如50Hz—发出的中断)。

处理器间中断(interprocessor interrupt)。一种特殊的硬件中断。由处理器发出,被其它处理器接收。仅见于多处理器系统,以便于处理器间通信或同步。

伪中断(spurious interrupt)。一类不希望被产生的硬件中断。发生的原因有很多种,如中断线路上电气信号异常,或是中断请求设备本身有问题。

软件中断。是一条CPU指令,用以自陷一个中断。由于软中断指令通常要运行一个切换CPU至内核态(Kernel Mode/Ring 0)的子例程,它常被用作实现系统调用(System call)。

触发

在依状态触发的中断系统中,一个等待响应的中断会在中断请求线路上以特定的电位标示,如高电位(1)或低电位(0)。当一个设备希望发送中断信号时,它驱动中断请求线路至相应的电位,并在CPU发出强制停止命令或处理所请求的中断事件之前始终保持。

在依边沿触发的中断系统中,中断设备通过向中断线路发送一个脉冲来表示其中断请求。脉冲可以为上升沿或下降沿。在发送完脉冲后设备立即释放中断线路。如果这个脉冲太短,以至于I/O轮询不足以确保知悉其存在,则有必要使用专门的硬件设备来辅助对边沿触发的探查。

一些系统使用状态触发与边沿触发兼顾的混合中断模式。其硬件不但探测脉冲,也验证中断信号是否保持一段时间。

非可屏蔽中断多使用混合模式。由于非可屏蔽中断多与重要的系统异常事件相关,十分有必要确保对其中断信号的捕捉快速而正确。这种两步骤探查方式能够有效减轻错误中断或遗失中断给系统带来的影响。

消息信号式中断并不直接通过对特定物理线路进行断言/发送脉冲来通知一个中断。这类中断设备通过在某种通讯介质(一般是计算机总线)上发送一个有逻辑含义的消息(一串/排比特码)来实现中断请求。中断消息可以是通讯总线协议中专门为中断预留的类型,也可以是一个现有的类型,如内存写操作。

消息信号式中断在行为上与边沿触发中断类似,因为它们都是发送一个瞬间的信号。中断处理软件的对此类中断的处理方式也类似于边沿触发中断:如果两个消息相同,则可以合并。消息信号中断向量(中断处理程序的地址)也可以共享,就如同物理线路可以被共享一般。

由于中断消息的识别基于特定的比特码序列而不是物理线路上的单个信号,可以有效地通过设定不同的中断比特码来划分和处理不同类型的中断。另外,使用串行或并行总线都可以传递中断消息。

参考

Yan Peipan 12 September 2018