为了提高识别中断源的速度,必须用硬件来完成中断源的排队,这种方法称为串行排队链法(Claisy-chain Method)。具体实现方法有如下三种:

  1.设置一个中断请求寄存器
  每个中断源在中断请求寄存器中占据相应的一位,并且按照中断的优先级从高位到低的顺序排列。当一个中断源请求中断服务时,中断请求寄存器中的相应位置"1",否则相应位为"0"。
  所有中断源使用一条公共的中断请求线,找到中断源服务程序入口的过程,第一步和第二步与上面的查询法相同。在处理机响应中断源的中断请求,并转入公共的中断服务程序之后,用一条专门的指令把中断请求寄存器中的内容读到通用寄存器中,然后用一条按位扫描指令找到第一位为"1"的位号,这个位号实际上就是所有请求中断服务的中断源中,具有最高优先级的中断源的相对编号。最后通过执行一条变址转移指令就能够直接转移到这个中断源的中断服务程序入口。

  串行排队链法的一个简单程序例子如下:
  INTA R1 ;把中断请求寄存器中的内容读入到通用寄存器R1中
  SBT R1 R2 ;按位扫描R1寄存器,得到请求中断服务的具有最高
  优先级的中断源的相对编号,结果放在R2寄存器中
  JMP @VTAB(R2) ;转向中断源的中断服务程序入口(VTAB+(R2))
  VTAB: DEV1 ;第一个中断源(最高优先级)的中断服务程序入口
  DEV2 ;第二个中断源的中断服务程序入口
  ……
  DENn ;第n个中断源的中断服务程序入口

  串行排队链法只需要执行三条指令就能够找到所需要的中断源的中断服务程序入口。如果同时有多个中断源都请求中断服务,则找到的是所有请求中断服务的中断源中具有最高优先级的中断源。如果主存储器是按字节编址的,而字长是32位的话,则R2中的中断源相对中断优先级还要乘以4,即左移两位。这种方法完全避免了跳步链程序法需要逐个中断源进行测试的缺点。
  当中断源很多时,还可以设置两级或多级中断请求寄存器。这时,要把中断源逐级分组。只有最低一级中断请求寄存器中的每一位对应一个中断源的中断服务请求。再高一级的中断请求寄存器,每一位对应一组中断源的中断服务请求。当然,这种方法扫描中断源寄存器的过程要复杂些。

  2.采用硬件的串行排队器和编码器
  上面的方法是用软件与硬件相结合的办法,最终通过一条按位扫描指令找到所有请求中断服务的中断源中,具有最高优先级的中断源的相对编号的。为了进一步加快识别中断源的速度,可以用硬件的串行排队器和编码器来完成这一工作。中断源与处理机的连接关系如图7.5所示。

图 7.5 识别中断源的串行排队链法

  硬件排队器分布在各个中断源中,编码器可以集中放在处理机中。一个有四个中断源的排队器和编码器如图7.6所示。
图 7.6 四个中断源的中断排队器的编码器

  在图7.6中,长方形为与非门,三角形为反向器。处理机发出的中断响应信号和各个中断源发出的中断请求信号都以低电平有效。中断源编码器的输出信号I1I0就是所有请求中断服务的中断源中,优先级最高的中断源的编号。例如,只要有D0中断源请求中断服务,则无论其它中断源是否发出中断服务请求,I1I0都输出00。同样,当D0中断源不请求中断服务,D1中断源请求中断服务时,则无论D2和D3中断源是否发出中断服务请求,I1I0都输出01。只有当D0、D1和D2中断源不请求中断服务,D3中断源步请求中断服务时,I1I0才输出11。

  采用硬件排队器识别中断源的过程,第一步和第二步与上面的软件排队方法相同。在处理机响应中断源的中断服务请求,并转入公共的中断服务程序之后,用一条专门的指令就能直接读到所有请求中断服务的中断源中,具有最高优先级的中断源编号。然后同样通过执行一条变址转移指令转移到中断源的中断服务程序入口。
  程序例子如下:
  INTA R1 ;得到所有请求中断服务的中断源中,具有最高优先级
  的中断源编号,结果放在R1通用寄存器中
  JMP @VTAB(R1) ;转向中断源的中断服务程序入口(VTAB+(R1))
  VTAB: DEV1 ;D1中断源(最高优先级)的中断服务程序入口
  DEV2 ;D2中断源的中断服务程序入口
  ……
  DENn ;Dn中断源的中断服务程序入口

  采用硬件排队器识别中断源的方法由于使用了硬件排队器和编码器,与采用软件识别中断源的方法相比,识别中断源的速度更快。在进入公共的中断服务程序入口之后,只需要执行两条指令就能转入到请求中断服务的具有最高优先级的中断源的中断服务程序入口中。