写在前面:
- 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
- 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili
一、概述
当一个进程请求I/O操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
中断的大部分内容在《计算机组成原理》中有详细介绍,比如中断的分类、中断屏蔽、嵌套中断等,这里不再赘述。
二、中断处理程序的处理过程
1、测定是否有未响应的中断信号
每当设备完成一个字符(字或数据块)的读入(或输出),设备控制器便向处理机发送一个中断请求信号,请求处理机将设备已读入的数据传送到内存的缓冲区中(读入),或者请求处理机将要输出的数据(输出)传送给设备控制器。
程序每当执行完当前指令后,处理机都要测试是否有未响应的中断信号,若没有继续执行下一条指令,若有则停止原有进程的执行,准备转去执行中断处理程序,为把处理机的控制权转交给中断处理程序做准备。
2、保护被中断进程的CPU环境
在把控制权转交给中断处理程序之前,需要先保护被中断进程的CPU环境,以便以后能恢复运行。首先需要保存的是从中断现场恢复到当前进程运行所需要的信息,通常由硬件自动将处理机状态字(PSW)和保存在程序计数器(PC)中下一条指令的地址保存在中断保留区(栈)中,然后把被中断进程的CPU现场信息,即将包括所有CPU寄存器的(如通用寄存器、段寄存器等)内容都压入中断栈中,因为在中断处理时可能会用到这些寄存器。
3、转入相应的设备处理程序
由处理机对各个中断源进行测试,以确定引起本次中断的I/O设备,并向提供中断信号的设备发送确认信号,在该设备收到确认信号后,就立即取消它所发出的中断请求信号,然后,将相应的设备中断处理程序的入口地址装入到程序计数器中,这样,当处理机运行时,便可自动地转向中断处理程序。
4、中断处理
该程序首先从设备控制器中读出设备状态,以判别本次中断是正常完成中断还是异常结束中断:
①若是正常完成中断,中断程序便做结束处理。假如这次是字符设备的读操作,则来自输入设备的中断是表明该设备已经读入了一个字符(字)的数据,并已放入数据寄存器中,此时中断处理应将该数据传送给CPU,再将它存入缓冲区中,并修改相应的缓冲区指针,使其指向下一个内存单元。若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。
②若是异常结束中断,则根据发生异常的原因做相应的处理。
5、恢复CPU的现场并退出中断
当中断处理完成以后,需要恢复CPU的现场,退出中断,但是,此刻是否返会到被中断的进程,取决于两个因素:
①本中断是否采用了屏蔽(禁止)中断方式,若是,就会返回被中断的进程。
②如果采用的是中断嵌套方式,且没有优先级更高的中断请求I/O,在中断完成后仍会返回被中断的进程,反之,系统将处理优先级更高的中断请求。