中断和中断处理程序

1.中断和陷入

( 1)中断( interrupt)。中断是指CPU对I/O设备发来的中断信号的一种响应。CPU暂停正在执行的程序,保存CPU现场环境后,自动转去执行该I/O设备的中断处理程序。执行完后再回到断点,继续执行原来的程序。IO设备可以是字符设备,也可以是块设备以及通信设备等。由于中断是由外部设备引起的,故其又被称为外中断或硬中断。
(2)陷入或陷阱( trap )另外还有一种由CPU内部事件所引起的中断,例如进程在运算过程中发生了上溢或下溢,再如程序出错(如指令非法、地址越界、电源故障等 )以及执行到程序中预设的软中断指令。通常把这类中断称为内中断,或软中断,或陷人。与中断一样,若系统发现了陷人事件,CPU也将暂停正在执行的程序,转去执行该陷人事件的处理程序。中断和陷人的主要区别是信号的来源不同,即来自CPU外部还是CPU内部。

中断向量表和中断优先级

        (1)中断向量表。为了实现处理上的方便,通常会为每种设备配以相应的中断处理程序,并把该程序的人口地址放在中断向量表的一个 表项中,为每个设备的中断请求规定一个中断号,它直接对应中断向量表的一一个 表项。当I/O设 备发来中断请求信号时,由中断控制器确定该请求的中断号,并根据该中断号查找中断向量表,从中取得该设备相应的中断处理程序的人口地址,这样便可转人中断处理程序并执行。

        (2)中断优先级。实际情况是经常会有多个中断信号源,每个中断信号源对服务要求的紧急程度并不相同,例如,键盘的中断请求的紧急程度不如打印机,而打印机的中断请求的紧急程度又不如磁盘等。为此,系统就需要为它们分别规定不同的优先级。

3.处理多中断信号源的方式



        针对多中断信号源情况,当处理机正在处理一个中断时, 又来了一个新的中断请求,这时应这如何处理?例如当系统正在处理打印机中断时,又收到了优先级更高的磁盘中断信号。对于这种情况,可采用以下两种处理方式。

        (1)屏蔽(禁止)中断当处理机正在处理一 个中断时,将“屏蔽”掉所有的中断,即处理机对任何新到的中断请求都暂时不予理睬,而让它们等待。直到处理机已完成本次中断的处理后,才去检查是否有新的中断发生。若有,再去处理新的中断:若无,则返回被中断的程序。在该方法中,所有中断都将按顺序排队依次被处理。其优点是简单,但不能用于对实时性要求较高的中断请求。

        (2)嵌套中断。在设置了中断优先级的系统中,通常按以下规则来控制优先级:①当同时有多个优先级不同的中断请求时,CPU优先响应最高优先级的中断请求;②高优先级的中断请求可以抢占正在运行的低优先级中断的处理机,该方式类似于基于优先级的抢占式进程调度。例如,处理机正在处理打印机中断,当有磁盘中断到来时,可暂停对打印机中断的处理而转去处理磁盘中断。如果新到的是键盘中断,则由于它的优先级低于打印机的,故处理机会继续处理打印机中断。

中断处理程序

        当一个进程请求I/O操作时,该进程将被挂起,直到WO设备完成I/O操作后,设备控制器才会向CPU发送一中断请求, CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,并在处理完后解除相应进程的阻塞状态。中断处理程序的处理过程可分成以下几个步骤。
1. 测定是否有未响应的中断信号

        每当设备完成一个字符(字或数据块)的读人(或输出),设备控制器便会向CPU发送一中断请求信号,请求CPU将设备已读人的数据传送到内存的缓冲区中(读人),或者请求CPU将要输出的数据传送给设备控制器( 输出)。程序每当执行完当前指令后,CPU都要测试是否有未响应的中断信号。若没有,则继续执行下一条指令;若有,则停止原有进程的执行,准备转去执行中断处理程序,即为把CPU的控制权转交给中断处理程序做准备。

2.保护被中断进程的CPU现场环境

        在把控制权转交给中断处理程序之前,需要先保护被中断进程的CPU现场环境,以便以后能恢复运行。首先需要保存的是从中断现场恢复到当前进程运行所需要的信息。通常由硬件自动将处理机状态字( processor status word, PsW )和保存在程序计数器( program counter. PC )中下一条指令的地址,保存在中断保留区(中断栈)中。然后,把被中断进程的CPU现场信息,即所有CPU寄存器( 如通用寄存器、段寄存器等)的内容,都压人中断栈中,因为在处理中断时可能会用到这些寄存器。图7-14所示为一个简单的保护中断现场示意。该用户程序是指令在N位置时被中断的,程序计数器中的内容为N+1,所有寄存器的内容都被保留在中断栈中。
3.转入相应设备的中断处理程序

        由CPU对各个中断信号源进行测试,以确定引起本次中断的IO设备,并向提供中断信号的设备发送确认信号。在该设备收到确认信号后,就立即取消它所发出的中断请求信号。然后,将相应设备的中断处理程序的人口地址装人程序计数器中。这样,当CPU运行时,便可自动转人相应设备的中断处理程序。

4.处理中断

        对不同的设备有不同的中断处理程序。该程序首先会从设备控制器中读出设备状态,以判别本次中断是正常完成中断还是异常结束中断。若是正常完成中断,中断处理程序便做结束处理。假如这次是字符设备的读操作,则来自输人设备的中断表明该设备已经读入了一个字节(字)的数据,并已放人数据寄存器中。此时中断处理程序应将该数据传送给CPU,再将它存人缓冲区中,并修改相应的缓冲区指针,使其指向下一个内存单元。若还有命令,则可再向设备控制器发送新的命令,进行新-轮的数据传送。 若是异常结束中断,则根据发生异常的原因做相应的处理。

5.恢复CPU现场环境后退出中断

        当中断处理完成以后,需要恢复CPU现场并退出中断。但是,此刻是否返回被中断的进程,取决于两个因素:①本中断是否采用了屏蔽( 禁止)中断驱动I/O方式,若是,则返回被中断的进程;②针对中断处理方式为中断嵌套方式的情况,如果没有优先级更高的中断来请求I/O,则在中断处理完成后仍返回被中断的进程;反之,系统将处理优先级更高的中断请求。

        如果要返回到被中断的进程,则可将保存在中断栈中的被中断进程的CPU现场信息取出,并装人相应的寄存器中,其中包括该程序下一次要执行的指令的地址N+1、处理机状态字以及各通用寄存器和段寄存器的内容。这样,当CPU再执行本程序时,便会从N+1处开始,最终返回被中断的进程。

        I/O操作完成后,驱动程序必须检查本次I/O操作中是否发生了错误,并向上层软件报告,最终向调用者报告本次IO的执行情况。除了上述的第4步(处理中断)外,其他步骤对所有IO设备都是相同的,因而对于某种OS,如UNIX系统,其会把这些共同的部分集中起来,形成中断总控程序。每当要进行中断处理时,都要首先进人中断总控程序。而对于第4步,则对不同设备须采用不同的中断处理程序继续执行。图7-15所示为中断处理流程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值