linux中断响应时间太慢_Linux操作系统:中断优先级和多重中断

1.中断优先级

如果在用户程序中使用系统调用,就能知道其产生中断请求的时机,除此之外,其他中断往往是随机出现的。这样,可能出现多个中断同时发生的情况。

这就存在哪个中断先被响应,哪个中断先被处理的优先次序问题。为使系统及时响应并处理发生的所有中断,不发生丢失现象,在硬件设计中断机构时,就必须根据各种中断事件的轻重缓急对线路进行排队,安排中断响应次序。另外,软件在处理中断时也要相应安排优先次序。

响应顺序和处理顺序可以不一样,即先响应的可以后处理。为满足某种需要,可以采用多种手段改变处理顺序,最常见的方式是采用中断屏蔽。

硬件设计时,一般把紧迫程度大致相当的中断源归并为一组,称为一个中断级

每级的中断处理程序可能有很多相似之处,可把它们统一成一个共同程序;对于不同之处,用各自的专用程序去处理。在这种方式下,每级可以只有一个中断处理程序入口,在内部处理过程中,再根据不同中断请求转入不同的子程序去分别处理。

与某种中断相关的优先权称做它的中断优先级

中断优先级高的中断在线路上有优先响应权,可以通过线路排队办法实现。在不同级别的中断同时到达的情况下,级别最高的中断源先被响应,同时封锁对其他中断的响应;它被响应之后,解除封锁,再响应次高级的中断。如此下去,级别最低的中断最后被响应。

另外,级别高的中断一般有打断级别低的中断处理程序的权利。就是说,当级别低的中断处理程序正在执行时,如果发生级别比它高的中断,则立即中止该程序的执行,转去执行高级中断处理程序。后者处理完才返回刚才被中止的断点,继续处理前面那个低级中断。但是,在处理高级中断过程中,不允许低级中断干扰它,通常也不允许后来的中断打断同级中断的处理过程。

2.中断屏蔽

(1)中断屏蔽和中断禁止

中断屏蔽是指在提出中断请求之后,CPU不予响应的状态。它常常用来在处理某个中断时防止同级中断的干扰,或在处理一段不可分割的、必须连续执行的程序时防止意外事件把它打断。

中断禁止是指在可引起中断的事件发生时系统不接收该中断信号,因而就不可能提出中断请求而导致中断。简言之,就是不让某些事件产生中断。它常用在执行某些特殊工作的条件下,如按模取余运算,算术运算中强制忽略某些中断,如定点溢出、运算溢出中断。在中断禁止的情况下,CPU正常运行,根本不理睬所发生的那些事件。

从概念上讲,中断屏蔽和中断禁止是不同的。前者表明硬件接受了中断,但暂时不能响应,要延迟一段时间,等待中断开放(撤消屏蔽),被屏蔽的中断就能被响应并得到处理。而后者,硬件不准许事件提出中断请求,从而使中断被禁止。

(2)中断屏蔽的作用

引入中断屏蔽和禁止的原因主要有以下3个方面:

· 延迟或禁止对某些中断的响应。中断是可以随机发生的事件。在某些程序(如系统程序)的执行过程中,不希望外界信号对它干扰,以避免对重要数据操作的失误。此外,在某些运算(如按模同余运算)中发生一些事件(如定点溢出)是正常的,没有必要理睬。

· 协调中断响应与中断处理的关系。硬件中断排队线路只是决定若干中断同时到来时机器响应的优先次序,但处理中断的优先次序却不一定与响应的次序一致。如果中断响应时是把PSW寄存器的内容放在专用系统区中,然后取出对应处理程序的PSW装入寄存器中;接着又响应下一个级别较低的中断,那么最后被响应的中断是级别最低的,但它的中断处理程序的PSW却放在PSW寄存器中,从而使它得到优先处理。为了实现高级中断先响应也先处理,在PSW中必须设置屏蔽位,保证高级中断可以打断低级中断,而低级中断不可打断高级中断的处理。

· 防止同类中断的相互干扰。在有些系统(如IBM 360)中,同类中断只有一个中断处理程序状态字(PSW)。因此,在处理此类中断的过程中,不能响应随后到来的同类中断。否则,会因共用同一个PSW而造成混乱(后者把前者的内容冲掉)

(3)中断屏蔽的方式

屏蔽方式随机器而异,可以用于整级屏蔽,也可用于单个屏蔽。如在IBM 360/370系统中,是用PSW中某些位来屏蔽某些中断的。程序员通过特权指令设置或更改屏蔽位信息。在UNIX系统中,通常采用提高处理机执行优先级的方式屏蔽中断,即在程序状态寄存器(PS)中设置处理机当前的执行优先级,当它的值(比如6)大于或等于后来中断事件的优先级(比如4)时,该中断就被屏蔽了。

3.多重中断

多个中断可能同时出现。例如,一个程序正从通信线路上接收数据并打印结果。每当打印操作完成后,打印机会产生一个中断。每当一个数据单位到来时,通信线路控制器就会产生一个中断。数据单位可能是一个字符或是一个数据块,这取决于通信规程的性质。总之,在处理打印机中断的过程中有可能出现通信中断。

处理多个中断的方法有顺序处理方式和嵌套处理方式两种。

顺序处理方式

当一个中断正被处理期间,屏蔽其他的中断;在该中断处理完后,开放中断,由处理器查看有无尚未处理的中断。如果有,则依次处理。这样,用户程序执行时,如果出现中断,则响应并处理它,同时屏蔽其他中断。在该中断处理程序运行完、控制返回用户程序之前,开放中断。若有另外中断未被处理,则按顺序进行处理;

0b70c7f35eadd57e921d79c23fba0b36.png

这种方式的缺点是没有考虑中断的相对优先级或时间的紧迫程度。例如,输入数据从通信线路上到来时,就需要迅速处理,腾出空间,供后面的输入使用。如果在第2批输入到来之前,第1批输入数据还未处理完,就会丢失后面的数据。

嵌套处理方式

这种方式对每类中断赋予不同的优先级,允许高优先级中断打断低优先级中断的处理程序。

例如,系统中有3台I/O设备:打印机、磁盘机和通信链路,各自的中断优先级分别是2、4和5。下图给出了一种可能的执行序列。在t=0时刻用户程序开始执行。在t=10时出现打印机中断;响应该中断,把用户信息存放在系统栈中,然后执行打印机的中断服务(处理)程序(ISR)。在t=15时,ISR还在执行,但此时发生通信中断。由于通信链路的中断优先级高于打印机中断优先级,打印机的ISR被中断,其现场信息压入栈中,接着执行通信中断的ISR。在通信ISR执行时,出现磁盘中断(t=20)。由于磁盘中断优先级低于通信中断优先级,所以它只是被简单收存,而通信ISR继续执行。当t=25时,通信ISR完成,恢复先前的处理机状态,本应执行打印机的ISR,然而由于盘中断优先级高于打印机中断优先级,所以处理器执行磁盘的ISR。仅当磁盘的ISR执行完之后(t=35),打印机ISR才得以恢复执行。当打印机ISR执行完(t=40),最终把控制返还用户程序。

a053f06f8076394629039aab3eb96fc7.png

可以看出,嵌套中断往往会给程序设计带来困难。在有些系统(如Linux)中,当响应中断并进入中断处理程序时,CPU会自动将中断关闭。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值