允许中断

更新时间:2022-08-25 13:07

在计算机科学中,中断(Interrupt)是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种情况就称为中断。允许中断是指处理机在处理当前中断或其他进程时,允许响应来自外部中断。

简介

允许中断是指处理机在处理当前中断或进程时,中断屏蔽寄存器没有设定位掩码来关闭,处理机可以根据中断的性质和优先级来决定是否响应当前中断请求。通常,在接收到来自外围硬件(相对于中央处理器和内存)的异步信号,或来自软件的同步信号之后,处理器将会进行相应的硬件/软件处理,发出这样的信号称为进行中断请求(interrupt request,IRQ)

这里中断可以是软件中断和硬件中断。硬件中断导致处理器通过一个运行信息切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种运行信息切换,并将处理导向一段中断处理代码。

分类

硬件中断:

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

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

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

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

软件中断

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

处理器通常含有一个内部中断屏蔽位,并允许通过软件来设定。一旦被设定,所有外部中断都将被系统忽略。这个屏蔽位的访问速度显然快于中断控制器上的中断屏蔽寄存器,因此可提供更快速地中断屏蔽控制。

如果一个中断使得机器处于一种确定状态,则称为精确中断(precise interrupt)。精确中断须保证:

程序计数器的值被保存在已知位置。

程序计数器所指向的指令之前的所有指令已被执行完毕。

程序计数器所指向的指令之后的所有指令不可被执行。如果中断信号到来后而转入处理前发生了任何针对寄存器/内存的更改,都必须予以还原。

程序计数器所指向的指令地执行状态已知。

倘无法满足以上条件,此中断被称作非精确中断(imprecise interrupt)。

中断尽管可以提高计算机处理性能,但过于密集的中断请求/响应反而会影响系统性能。这类情形被称作中断风暴(interrupt storm)。

允许中断原因

中断优先级

在某一时刻有几个中断源同时发出中断请求时,处理器只响应其中优先权最高的中断源。当处理机正在运行某个中断服务程序期间出现另一个中断源的请求时,如果后者的优先权低于前者,处理机不予理睬,反之,处理机立即响应后者,进入所谓的“嵌套中断”。中断优先权的排序按其性质、重要性以及处理的方便性决定,由硬件的优先权仲裁逻辑或软件的顺序询问程序来实现。

不可屏蔽中断

不能由程序控制其屏蔽,处理机一定要立即处理的中断称为非屏蔽中断或不可屏蔽中断。非屏蔽中断主要用于断电、电源故障等必须立即处理的情况.处理机响应中断时。

中断的种类

状态触发

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

一般而言,处理器在总线周期的特定时点响应中断的输出/ 输入。如果在某次采样时刻中断尚未被触发,则在下一次采样前,处理器都不会认为有中断发生。可以应用这个特性,避免响应在噪音较高的线路上出现的伪中断。

中断设备可被设计成与其他设备共享一条状态触发中断线路。中断线路应该包含一个特定的升/降压电阻,用于在无中断请求时为线路电平复位。中断设备在请求中断时会保持中断线路为有效电平,而没有请求中断时则令该线路置空。只要有一个或以上的设备发出中断信号,线路都会处于有效的电平。

由于可共享线路的便利,一些应用倾向于使用该类中断。当CPU检测到中断线路被断言后,就会逐一检查各共享设备,直至发现请求设备并处理之。当处理完毕后,继续检查中断线路,倘中断线路仍为有效电平则重复之前的步骤。在检查中断设备的顺序上也可做一定规划,比如优先检查那些频繁请求中断的设备,以加快中断处理,改善系统性能。

此类中断模式也有严重问题。只要还有任何设备的中断请求未被处理,线路就会一直保持有效电平状态,而这将导致CPU没有机会去探查其他设备所发生的状态变化。推迟服务低优先级设备也不可行,因为这会防止对高优先级设备的探查。倘若在线路上有一个设备持续发送请求而CPU不知道怎样对其进行服务,则这个设备就会持久并排他地占有中断线路。

早期的PCI(外设互连标准)标准出于上述效率层面的理由规定其周边须使用状态触发中断。

边沿触发

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

中断设备可被设计成与其他设备共享一条边沿触发中断线路。中断线路应该包含一个特定的上拉/下拉电阻,用于在无中断请求时为线路电平复位。设备通过发送一个脉冲作为其中断信号。如果多个设备在近乎相同的时间内发送脉冲,则会在线路上合并成一个信号。为防止中断丢失,CPU必须在一个脉冲之后的下一个边沿(如果脉冲为上升沿则其下一个边沿就是下降沿)立即触发。收到中断请求后CPU立即查询各中断设备以定位中断源。

边沿触发中断不会遭受状态触发中断在共享中断引脚时所遇到的问题。低优先级设备的服务可被任意推迟,而高优先级设备的中断请求仍会被CPU收到。一个即便是频繁发生的伪中断也不会影响正常设备的中断请求。但是,边沿触发中断容易丢失,特别是当中断被有意屏蔽时。在不引入锁存器的情况下,在屏蔽时段发送的中断信号不可能被恢复。在早期的计算机系统中因为中断丢失而导致处理不能继续的情况时有发生。现代中断硬件多包含有一个或一组中断状态锁存器,用以暂存一逝而过的中断请求。在对边沿触发中断硬件进行编程时,应检查这些中断状态寄存器以确保请求事件不会丢失。

已经过时的ISA(工业标准架构)标准使用边沿触发中断,但不规定其实现必须能够共享线路。

混合模式

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

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

消息信号

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

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

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

由于无论状态触发还是边沿触发都在使用共享线路时存在线路竞争问题,而物理线路数本身也是稀缺资源,不可能被各中断源分别独占,所以消息信号中断是一个解决此问题的较好替代方案。消息信号中断的本质差别在于其中断请求运行在单纯的物理线路之上,具有特定的逻辑含义。这种区别好比计算机网络体系中第一层(物理层)和第二层(链路层)的差别。使用具有逻辑含义的中断请求,可以把诸请求区分开来,形成多条虚通路,而运行于一条物理总线之上。PCI Express串行总线标准即使用此种中断。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}