多级中断与中断优先级
现代的微处理器都提供有多级中断系统,从硬件上看,多级中断系统表现为有多根中断请求线从不同设备连接到中断逻辑线路上。连接在不同中断请求线上的中断信号,表示它们有不同的中断级别。中断信号的级别代表了该中断信号是否具有被优先处理的特权,以及这个特权的大小。可见,在多级中断系统中,硬件决定了各个中断的优先级别。
多级中断的第一个作用是,对各类中断信号依据其紧急程度和重要性划分级别。在需要处理的各类中断信号中,它们的紧急程度和重要性是不同的。系统当然应该优先处理最紧急的或者最重要的中断信号。而中断信号本身的紧急或重要性,则由该中断的级别的高低来标识。在多级中断系统中,在同时有多个中断请求时,处理器接收中断优先级为最高的中断(如果其中断优先级高于当前运行程序的中断优先级时),而忽略其中断优先级较低的中断。比如,计算机的电池即将没有电了,这种掉电中断显然应该有非常高的优先级别。
多级中断的第二个作用是,解决如果有重要程度相当的多个中断信号同时到达时,如何选择首个被处理的中断信号的问题。比如,在一套计算机系统上接有一台打印机和一台扫描仪,在打印机发出了打印完毕的信号的同时,扫描仪也发出了扫描完毕的信号。在一般情况下,这两个中断信号具有同等的优先级。
如果在同一中断级中的多个设备接口中同时都有中断请求时,一般有两种办法可以采用:
- 固定的优先数:给每个设备接口安排一个不同的、固定的优先顺序。比如以该设备在总线中的位置来定优先顺序,离处理器近的设备,其优先数高于离处理器远的设备。
- 轮转法:用一个表格,依次轮转响应,这是一个较为公平合理的方法。
中断屏蔽
在整个中断系统中,可以允许或者禁止中断系统对某些类别中断的响应。我们已经知道,在程序状态字PSW中设计有中断屏蔽位,主机是否允许响应或禁止某些中断,则由PSW中的中断屏蔽位决定,这些屏蔽位标识了被屏蔽的中断类或者中断。
一旦某个I/O中断被程序状态字PSW中的中断屏蔽位加以屏蔽,那么此时即使有I/O中断信号,处理器也不子响应。
对于被屏蔽的中断信号,通常仍然保存在中断寄存器中,有些可以在以后继续响应,而有些将被简单地丢弃。
很显然,有了中断屏蔽,中断系统中原先由硬件事先给定的中断优先级,就可能发生改变。例如,在一个计算机系统中,由 CD-ROM到硬盘的数据传送的优先级别低于硬盘内部的数据操作。但是,如果一旦机器正在进行 CD-ROM到硬盘的数据传送,对硬盘内部的其它数据操作就被暂时屏蔽,这些硬盘操作必须在该 CD-ROM到硬盘的数据传送结束之后才能进行。换句话说,此时 CD-ROM到硬盘的数据传送的优先级别高于硬盘内部的数据操作。
还有一类中断信号是不可屏蔽的,一般这类中断信号属于机器故障中断。比如内存奇偶校验错,以及掉电等使得机器无法继续操作一类的故障。
一旦发生这类不可屏蔽的中断,不管程序状态字中的屏蔽位是否建立,处理器都要立即响应这类中断,并进行处理。
中断嵌套
一般的计算机系统中都有多个中断源,在这样的系统中,如果一个中断的处理过程中又发生了中断,那么将引起多个中断处理问题。对多个中断的处理策略一般有如下两种。
对于多个中断进行处理的第一种策略是,正当处理一个中断时禁止其他中断,此时系统将对任何新发生的中断置之不理。在这期间发生的中断将保持挂起状态。当处理器再次允许中断时,这个新的中断信号会被处理器检测到,并做出处理。这种处理方法可以用软件简单地实现,只要在任何中断处理之前使用禁止中断指令,在处理结束之后,再使用开放中断指令就可以了。这样,所有的中断将严格地按照发生的顺序被处理。不过,这样的处理策略没有考虑到中断信号的紧急程度,无法达到比较严格的中断处理时间要求。
对于多个中断进行处理的第二种策略是中断嵌套。即中断按照优先度分级,允许优先级较高的中断打断优先级较低的中断处理过程,于是引起中断处理的嵌套。
只要合适地定义中断的优先级别,第一种策略的弊端大都可以被第二种中断嵌套策略所克服。
由于在中断嵌套中优先级较高的中断可以打断优先级较低的中断处理过程,因此必须把优先级较低的中断处理过程的现场也保存起来。这些被保护现场的次序,与恢复现场的次序正好相反,所以应该采用堆栈作为现场保护区域。堆栈应该处于系统空间中,以防止被破坏又称为系统堆栈。
在中断发生时,硬件中断装置将程序状态PSW、指令计数器PC的值,以及其他重要现场信息也被压人系统堆栈。如果发生中断嵌套一次,就保护一次被中断的处理过程的现场,进行相关的压栈操作。而每结束一层嵌套的处理时,就从系统堆栈中弹出对应的程序状态字PSW、指令计数器PC的值以及其他重要现场信息,逐层恢复现场。
作为中断嵌套策略的一个例子,考虑在一个系统中存在总线、硬盘以及扫描仪三个设备同时操作时的处理情况。假定三者的中断优先级依次分别为9、5、3,其中数字大的具有较高的优先级。扫描动作的处理从某个时间开始,它的处理时间较长,其间发生了一次网络数据的传送请求,于是扫描仪中断处理被打断,处理器转而去处理网络通信时的总线服务请求。在处理网络通信的总线服务请求期间,用户恰好提交了一个硬盘存储文件的请求。但是因为硬盘中断优先级较低,于是硬盘中断的处理就被推迟到总线请求处理完之后,同时由于它的优先级高于扫描仪的中断,所以对硬盘中断的处理优先于对扫描仪中断的处理。在硬盘中断处理完毕之后,处理器才回到原先对扫描仪中断处理的程序上。这个中断处理的过程中发生了三重中断嵌套。