【计算机组成原理】中断排队次序、中断处理次序和多重中断

中断可以分为硬中断和软中断,硬中断一般是外部中断,例如在指令执行到中断周期时检测到有外设的中断请求,则会执行中断隐指令、中断服务程序等一些列操作。执行结束之后执行下一条指令。(因为上一条指令已经执行完成,中断的部分是由于外部请求)。软中断一般是内部中断,例如缺页,则在指令执行的过程中就可以产生中断,去执行缺页程序。因此,执行完中断后仍执行原指令。

中断在执行完中断隐指令后,需要执行中断服务程序,即中断隐指令中包含将中断服务程序的地址送往PC的操作。那么如何得到中断服务程序的地址呢?这里需要用到硬件。

中断排队次序

排队器会输出一个地址,中断向量地址形成部件则会根据排队器输出的内容形成中断类型号(或者说是向量地址,看起来很唬人,其实所谓向量就是一串数字,或者理解成行向量),根据向量地址在主存中找到中断向量存放的位置,并根据中断向量的内容找到对应的中断服务程序。因此,这是一个间接寻址的过程。
【计算机组成原理】中断排队次序、中断处理次序和多重中断_第1张图片
这样做的原因是,硬件是难以修改的,而所加外设可以是多种多样的,因此采用间接寻址可以方便修改。
当CPU同时接收到多个中断源发来的中断请求时,会根据中断性质使用排队器为这些中断请求进行排序,大致的顺序可以是:

  1. 硬件故障
  2. 非屏蔽中断高于可屏蔽中断
  3. 高速设备的请求先于低速设备,DMA请求优先于IO设备请求(大同小异)
  4. 输入设备优先于输出设备
  5. 实时设备优先于普通设备

这些设定不是随便设置的,而是满足具体需求,例如用户体验、等待时间或者出于对安全性的考虑。

多级中断

当OS复杂时,可能会出现多个中断请求。在执行中断服务程序时,如果支持多级中断,且出现了更高优先级的中断请求时,则会中断当前正在执行的中断服务程序,转而去执行具有更高优先级的中断服务程序。
【计算机组成原理】中断排队次序、中断处理次序和多重中断_第2张图片
如何实现呢?需要使用中断屏蔽字技术,该项技术也是由硬件完成。优先级更高的中断程序可以在低优先级的中断程序执行中断服务程序的时候进行中断。例如低优先级的A已经在执行中断服务程序,此时高优先级的中断服务程序B也要请求执行,则B可以打断A,再执行B的中断。一般来说,中断屏蔽字的值如果为1,则代表可以对目标进行中断。如果为0,则不可以对目标进行中断。如图所示,中断屏蔽字的优先级就是D>A>C>B.D的屏蔽字就是4个1,代表可以对所有中断源进行中断。
【计算机组成原理】中断排队次序、中断处理次序和多重中断_第3张图片

下图可以看到,中断服务程序的部分是不在 开中断——关中断的包围里的,也就是并非一个原子操作(不可打断),因此是可以实现多级中断。如果不需要实现多级中断,那么去除掉紧挨着中断服务程序上面的开中断和下面的关中断就可以。
【计算机组成原理】中断排队次序、中断处理次序和多重中断_第4张图片

区别和辨析

排队器产生的是中断响应次序,而屏蔽字则是服务的顺序,或者说是中断结束的顺序。因此注意区分中断响应中断服务,前者是当多个中断源同时向CPU提出请求时,CPU只能按中断源的不同性质给其排队,给予不同等级的优先权,并按优先等级的高低给予响应。这是在响应中断的时刻。后者是多重中断的实际优先级处理次序,是在中断服务程序处理的时候。
同时,中断的相应次序一般是不可以改变的,是由排队器这个硬件决定的,而处理的优先级则可以通过修改屏蔽字来实现,因此可以做“加急”处理:例如,A与B原本同优先级,因此服务的顺序也就是其到达(响应)的顺序。而现在需要对B进行加急处理,则设置B对A的屏蔽字为1,也就可以实现A被B打断,即多级中断。

你可能感兴趣的:(计算机组成原理,OS,数据结构,硬件架构)