os 中断机构和中断处理程序

中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础为了提高处理机的利用率和实现 CPU 与I/O设备并行执行,也必须有中断的支持。中断处理程序是 I / O 系统中最低的一层,它是整个 I / O 系统的基础。

中断简介

1.中断和陷入

1)中断

中断是指 CPU 对 I / O 设备发来的中断信号的一种响应。 CPU 暂停正在执行的程序,保留CPU环境后,自动地转去执行该 I / O 设备的中断处理程序。执行完后,再回到断点,继续执行原来的程序。 I / O 设备可以是字符设备,也可以是块设备、通信设备等。由于中断是由外部设备引起的,故又称外中断

2)陷入

另外还有一种由 CPU 内部事件所引起的中断,例如进程在运算中发生了上溢或下溢,又如程序出错,如非法指令、地址越界,以及电源故障等。通常把这类中断称为内中断或陷入( trap )。与中断一样,若系统发现了有陷入事件, CPU 也将暂停正在执行的程序,转去执行该陷入事件的处理程序。中断和陷入的主要区别是信号的来源,即是来自 CPU 外部,还是 CPU 内部。

2.中断向量表和中断优先级

1)中断向量表

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

2)中断优先级

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

3.对多中断源的处理方式

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

  • 屏蔽(禁止)中断
  • 嵌套中断
1)屏蔽(禁止)中断

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

2)嵌套中断

在设置了中断优先级的系统中,通常按这样的规则来进行优先级控制:

  • (1)当同时有多个不同优先级的中断请求时, CPU 优先响应最高优先级的中断请求
  • (2)高优先级的中断请求可以抢占正在运行的低优先级中断的处理机,该方式类似于基于优先级的抢占式进程调度。例如,处理机正在处理打印机中断,当有磁盘中断到来时,可暂停对打印机中断的处理,转去处理磁盘中断。如果新到的是键盘中断,由于它的优先级低于打印机的优先级,故处理机继续处理打印机中断。图6-9( b )示出了可多重中断时的情况。

在这里插入图片描述


中断处理程序

当一个进程请求 I / O 操作时,该进程将被挂起,直到 I / O 设备完成I/O操作后,设备控制器便向 CPU 发送一个中断请求, CPU 响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
中断处理程序的处理过程可分成以下几个步骤:

(1)测定是否有未响应的中断信号

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

(2)保护被中断进程的 CPU 环境

在把控制权转交给中断处理程序之前,需要先保护被中断进程的 CPU 环境,以便以后能恢复运行。首先需要保存的是,从中断现场恢复到当前进程运行所需要的信息。通常由硬件自动将处理机状态字( PSW )和保存在程序计数器( PC )中下一条指令的地址保存在中断保留区(栈)中。然后,把被中断进程的 CPU 现场信息,即将包括所有 CPU 寄存器的(如通用寄存器、段寄存器等)内容都压入中断栈中。因为在中断处理时可能会用到这些寄存器。图6-10给出了一个简单的保护中断现场的示意图。该程序是指令在 N 位置时被中断的,程序计数器中的内容为 N +1,所有寄存器的内容都被保留在栈中。
在这里插入图片描述

(3)转入相应的设备处理程序

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

(4)中断处理

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

(5)恢复 CPU 的现场并退出中断

当中断处理完成以后,需要恢复 CPU 的现场,退出中断。但是,此刻是否返回到被中断的进程,取决于两个因素:

  • ①本中断是否采用了屏蔽(禁止)中断方式,若是,就会返回被中断的进程。
  • ②采用的是中断嵌套方式,如果没有优先级更高的中断请求 I / O ,在中断完成后,仍会返回被中断的进程;反之,系统将处理优先级更高的中断请求。

如果是要返回到被中断的进程,可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,其中包括该程序下一次要执行的指令的地址 N +1、处理机状态字 PSW ,以及各通用寄存器和段寄存器的内容。这样,当处理机再执行本程序时,便从 N +1 处开始,最终返回到被中断的程序。
中断的处理流程如图6-11所示。
在这里插入图片描述
I / O 操作完成后,驱动程序必须检查本次 I / O 操作中是否发生了错误,并向上层软件报告,最终向调用者报告本次 I/O 的执行情况。除了上述的第4步外,其它各步骤对所有I / O设备都是相同的,因而对于某种操作系统,例如 UNIX 系统,是把这些共同的部分集中起来,形成中断总控程序。每当要进行中断处理时,都要首先进入中断总控程序。而对于第4步,则对不同设备须采用不同的设备中断处理程序继续执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alkali!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值