中断是是多道程序得以实现的基础,因为进程之间的切换是通过中断完成的。
中断与陷入
中断
中断是指CPU对I/O设备发来的中断信号的一种响应。
CPU暂停正在执行的程序,保留CPU环境后,自动地转去执行该I/O设备的中断处理程序。
执行完后,再回到断点,继续执行原来的程序。
I/O设备可以是字符设备、块设备、通信设备等。由于中断是由外部设备引起的,故又称外中断。
陷入
CPU内部事件引起的中断。例如进程在运算中发生了上溢或下溢,又如程序出错,如非法指令、地址越界,以及电源故障等。通常把这类中断称为内中断或者陷入。
与中断一样,
若系统发现了有陷入事件,CPU也将暂停正在执行的程序,转去执行该陷入事件的处理程序。
中断和陷入的主要区别:信号的来源——来自CPU外部或者内部
中断向量表和中断优先级
中断向量表
为每种设备配以相应的中断处理程序,并把该程序的入口地址放在中断向量表的一个表项中。
并为每一个设备的中断请求规定一个**中断号,**它直接对应于中断向量表的一个表项。
当I/O设备发出中断请求信号时,由中断控制器确定该请求的中断号,根据该设备的中断号去查找中断向量表,从中取得该设备中断处理程序的入口地址,就可以转入中断处理程序执行。
中断优先级
经常会有多个中断信号源,每个中断源对服务要求的紧急程度不同,分别设置不同的优先级。
对多中断源的处理方式
屏蔽中断
当处理机正在处理一个中断时,将屏蔽掉所有中断。在该方法中,所有中断都按顺序处理,简单,但不能用于对实时性要求高的中断请求。
嵌套中断
当同时有多个不同优先级的中断请求时,CPU优先响应最高优先级的中断请求。
高优先级的中断请求可以抢占正在运行的低优先级中断的处理机。
中断处理程序
当一个进程请求I/O操作时,该进程将被 挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
- 测定是否有未响应的中断信号。每当设备完成一个字符(字或数据块)的读入或输出时,设备控制器便向处理机发出一个中断请求信号。
请求处理机将该设备已读入的数据传送到内存的缓冲区中
请求处理机将要输出的数据传送给设备控制器
程序每当执行完当前指令后,处理机都要监测是否有未响应的中断信号。
如果没有,继续执行下一条指令。
若有,停止原有进程的执行,准备转去执行中断处理程序,为把处理机的控制权交给中断处理程序做准备。 - 保护被中断进程的CPU环境
在把控制权转交给中断处理程序之前,需要先保护被中断进程的CPU环境,以便能恢复运行。
保存:
从中断现场恢复到当前进程运行所需要的信息。
通常由硬件自动将处理机状态字(PSW)和保存在程序计数器(PC)中下一条指令的地址保存在栈中。
然后把被中断进程的CPU现场信息压入栈中。 - 转入相应的设备处理程序
由处理机对各个中断源进行测试,以确定引起本次中断的I/O设备,并向提供中断信号的设备发送确认信号。在该设备收到确认信号后,就立刻取消它所发出的中断请求信号。然后,将相应的设备中断处理程序的入口地址装入到程序计算器中。这样当处理机运行时,便可自动地转向中断处理程序。 - 中断处理
对不同的设备,有不同的中断处理程序。该程序首先从设备控制器中读出设备状态,以判别本次中断是正常完成中断还是异常结束中断。若是前者,中断程序便做结束处理。假如这次是字符设备的读操作,则来自输入设备的中断表明该设备已经读入了一个字符的数据,并已放入数据寄存器中。此时,中断处理应该将数据传送给CPU,再将它存入缓冲区中,并修改响应的缓冲区指针,使其指向下一个内存单元。
若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。
若是异常结束中断,则根据发生异常的原因,做相应的处理。 - 恢复CPU的现场并退出中断
当中断处理完成后,需要恢复CPU的现场,退出中断。
是否返回到被中断的进程,取决于:
(1)本中断是否采用了屏蔽中断方式,若是,就会返回被中断的进程。
(2)采用的是中断嵌套方式,如果没有优先级更高的中断请求I/O。在中断完成后,返回被中断的进程。
如果要返回被中断的进程,可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,其中包括该程序下一次要执行的指令的地址N+1,处理机状态字PSW,以及各通用寄存器和段寄存器的的内容。