在I / O接口(中断和DMA模式)中,我们讨论了中断引发的I / O背后的概念。
总而言之,当I / O设备准备好进行I / O传输时,它们会向计算机生成一个中断请求信号。 CPU接收到该信号,挂起它正在执行的当前指令,然后继续处理该传输请求。但是,如果多个设备同时生成中断该怎么办。在这种情况下,我们必须有一种方法来确定首先要服务哪个中断。换句话说,我们必须在所有用于系统中断服务的设备之间设置优先级。
在设备之间定义优先级以便知道在同时请求的情况下首先服务哪个设备的概念称为优先级中断系统。这可以通过软件或硬件方法来完成。
在这种方法中,所有中断都通过分支到相同的服务程序来进行服务。然后,该程序会与每台设备一起检查是否是产生中断的设备。检查顺序由必须设置的优先级确定。首先检查优先级最高的设备,然后再按优先级从高到低的顺序检查设备。如果检查设备正在生成中断,则将调用另一个专门针对该特定设备的服务程序。
结构看起来像这样-
if (device[0].flag)
device[0].service();
else if (device[1].flag)
device[1].service();
.
.
.
.
.
.
else
//raise error
这种方法的主要缺点是速度很慢。为了克服这个问题,我们可以使用硬件解决方案,其中一种涉及串联连接设备。这称为菊花链方法。
菊花链方法涉及以串行方式连接可以请求中断的所有设备。此配置由设备的优先级控制。优先级最高的设备排在第一位,其次是第二高优先级的设备,依此类推。给定的图描述了这种安排。
在职的:
所有设备共有一条中断请求线,该中断请求线进入CPU。
- 当没有待处理的中断时,该线处于高电平状态。但是,如果任何设备引发中断,则会将中断请求线置于LOW状态。
- CPU从该线路确认该中断请求,然后响应该请求启用中断确认线路。
- 该信号在设备1的PI(Priority in)输入中接收。
- 如果设备没有请求中断,它将通过其PO(优先级输出)输出将该信号传递给下一个设备。 (PI = 1&PO = 1)
- 但是,如果设备已请求中断,则(PI = 1&PO = 0)
- 该设备消耗确认信号,并通过在其PO(优先级输出)输出端放置0来阻止其进一步使用。
- 然后设备继续将其中断向量地址(VAD)放入CPU的数据总线中。
- 器件将其中断请求信号置于高电平状态,以表明其中断已得到处理。
注意: VAD是为该设备提供服务的服务例程的地址。
- 如果设备在其PI输入处获得0,则它将在PO输出处产生0,以告知其他设备确认信号已被阻塞。 (PI = 0&PO = 0)
因此,具有PI = 1和PO = 0的设备是请求中断的最高优先级设备。因此,通过菊花链安排,我们确保了优先级最高的中断得到首先服务并建立了层次结构。一个设备离第一个设备越远,其优先级就越低。