操作系统18———IO系统之中断机构和设备驱动程序
一.目录
二.中断简介
中断就是在上一篇博客中IO系统层次中,处于最低的一层,它是I/O系统的基础。
1.中断和陷入
a.中断
CPU对IO设备发来的中断信号的一种响应。CPU暂停正在执行的程序,保留环境,执行中断程序,执行完毕后,再回到断点。中断是由外部设备引起,也称为外中断
b.陷入
由CPU内部事件引起的中断。如溢出、非法指令、地址越界、电源故障等。也称为内中断。与中断一样,系统如果发现陷入时间,CPU也将暂停正在执行的程序,保留环境,执行该陷入事件的处理程序,执行完毕后,再回到断点。
2.中断限量表和中断优先级
a.中断向量表
为每种设备配以相应的中断处理程序,把该程序的入口地址放在中断向量表的一个表项中,并规定一个中断号用于设备的中断请求。
b.中断优先级
系统中有多个中断信号源,系统为他们规定不同的优先级。如:键盘<打印机<磁盘
3.对多中断源的处理方式
对于多中断信号源的情况下,当处理机正在执行一个中断时,有来一个新的中断请求,此时有两种处理方式
a.屏蔽中断
对任何新到的中断请求都暂时不处理,让其等待。知道处理机已经完成本次中断的处理。处理机再去检查是否有中断发生,若有再去处理新到的中断,若无。则返回被中断的程序。该方法中,所有中断都按照顺序执行,优点是简单,但不能对实时性要求较高的中断处理。
b.嵌套中断
在设置了中断优先级的系统中,通常按照这样的规则来进行优先级控制。
- 当同时有多个不同的优先级的中断请求时,CPU优先响应最高优先级的中断请求。
- 高优先级的中断请求可以抢占正在运行的低优先级中断的处理器,下图展示了嵌套中断时的情景。
三.中断处理程序
当一个进程请求I/O 操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
中断处理程序的处理过程分成以下几个步骤:
1. 测定是否有未响应的中断信号
当设备完成一个字符的读入(如字符设备),设备控制器向处理机发送一个中断请求信号,请求处理机将字符读入内存。处理机执行完当前指令后都要检测是否有未响应的中断信号。若没有继续执行下一条指令,若有,则停止原有进程的执行,准备转去指向中断处理程序,为处理机的控制权交给中断程序。
2.保护被中断进程的CPU环境
保存程序状态字PSW和程序计数器PC中下一条指令的地址,入中断保留区(栈)中。所有CPU寄存器的内容入栈。下图给出了一个简单的中断现场的示意图。
3.转入相应的设备处理程序
处理机测试各个中断源,确定IO设备,并发送确认信号。设备收到信号后,取消中断请求信号。将设备中断处理程序的入口地址装入到程序计数器中,这样,当处理机运行时,便可以自动转向中断处理进程。
4.中断处理
不同的设备有不同的中断处理程序。该程序首先从设备控制器中读出设备状态,判别本次中断是正常完成中断还是异常结束中断,如果是正常完成中断,中断设备便做结束处理。如果是异常结束中断,则根据发生异常的原因做出相应的处理。
5.恢复被中断进程的现场
中断处理完成后,恢复CPU现场,退出中断。是否返回被中断的进程,取决于:
- 采用屏蔽中断方式。返回至被中断的进程
- 采用中断嵌套方式,考虑有无优先级更高的中断请求
中断处理流程如下图:
IO操作完成后,驱动器必须检查本次操作是否发生错误,并向上层报告本次I/O指向情况,最终向调用者报告本次I?O指向情况。,除第四步外,其余各步骤对于I/O设备都是相同的。
四.设备驱动程序概述
设备处理程序通常又称为设备驱动程序,它是I/O系统的高层与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象I/O要求,如read或write命令,再把它转换为具体要求后,发送给设备控制器,启动设备去执行;反之,它也将由设备控制器发来的信号传送给上层软件。由于驱动程序与硬件密切相关,故通常应为每一类设备配置一种驱动程序。
1.设备驱动程序的功能
- 接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的低层操作序列。
- 检查用户I/O请求的合法性,了解I/O设备的工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式。
- 发出I/O命令,如果设备空闲,便立即启动I/O设备,完成指定的I/O操作;如果设备忙碌,则将请求者的请求块挂在设备队列上等待。
- 及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应的中断处理程序进行处理。
2.设备驱动程序的特点
设备驱动程序属于低级的系统例程,它与一般的应用程序及系统程序之间有下述明显差异:
- 驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序
- 驱动程序与设备控制器以及I/O设备的硬件特性紧密相关,对于不同类型的设备,应配置不同的驱动程序。但可以为相同的多个终端设置一个终端驱动程序。
- 驱动程序与I/O设备所采用的I/O控制方式紧密相关,常用的I/O控制方式是中断驱动和DMA方式。
- 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。目前有很多驱动程序的基本部分已经固化在ROM中。
- 驱动程序应允许可重入。一个正在运行的驱动程序常会在一次调用完成前被再次调用。
3.设备处理方式
- 为每一类设备设置一个进程,专门用于执行该类设备的I/O操作。
- 在整个系统中设置一个I/O进程,专门用于执行系统中所有各类设备的I/O操作。
- 不设置专门的设备处理进程,只为各类设备设置相应的设备驱动程序,供用户进程或系统进程调用。(较多采用)
4.设备驱动程序的处理过程
- 将抽象要求转换为具体要求
- 检查I/O请求的合法性
- 读出和检查设备的状态
- 传送必要的参数(磁盘在读写前,要传递参数至控制器的寄存器中)
- 启动I/O设备
五.对I/O设备的控制方式
对I/O设备的控制,随着软硬件的发展前后出现过如下的控制方式:使用轮询的可编程I/O方式,使用中断的可编程I/O方式,直接存储器访问(DMA)方式,I/O通道控制方式.前两种是以字节为单位进行数据传递,后两种是以数据块为单位进行数据传递。
下面对这些方式进行介绍。
1.使用轮询的可编程I/O方式
忙——等待方式
- CPU向控制器发指令,启动I/O设备输入数据时,同时把状态寄存器中的状态标志busy置1;
- 然后不断地循环测试busy。
- 如果busy=1,说明I/O设备忙,CPU再进行下一轮检测;
- 如果busy=0,说明I/O操作结束,CPU执行下一条指令。
下图是展示了程序I/O方式的流程
2.使用中断的可编程I/O方式
启动:由CPU根据进程的I/O请求,向设备控制器发出一条I/O命令;此后CPU继续执行其它进程,即CPU与外设并行工作。
完成:I/O设备完成操作后,由控制器通过控制线向CPU发送一中断信号,由CPU检查I/O操作是否正确,若无错,便向控制器发送取走数据的信号。
优点:系统效率高: 并行工作、用极少的时间处理中断
缺点:设备与CPU之间的数据交换仍以字(节)为单位。
下图是展示中断驱动I/O方式的流程
3.直接存储器访问(DMA)方式
a.DMA(Direct Memory Access)控制方式的引入
为了适应一次传送大量数据的应用要求,以及尽量减少CPU对高速外设的干预;所以引入了DMA方式。
DMA方式的特点如下:
- 数据传输的基本单位是数据块。
- 所传送的数据是从设备直接送入内存,或者相反
- 仅在传送一个数据块的开始和结束时,才需要CPU干预,整块数据的传送是在控制器的控制下完成的
b.DMA控制器的组成
DMA控制器由三部分组成:主机与DMA控制器的接口,DMA控制器和设备的接口,I/O控制逻辑。
如下图:
- 命令/状态寄存器CR:接收从cpu发来的I/O命令,或有关控制信息,设备状态
- 内存地址寄存器MAR:输入时,它存放把数据从设备传送到内存起始目标地址。
- 数据寄存器DR: 暂存从设备到内存的数据,或反之
- 数据计数器DC: 存放本次CPU要读或写的字(节)数
c.DMA工作过程(以磁盘数据读入为例)
- CPU向磁盘控制器发送:读命令到CR中、内存的目标起址到MAR中、数据字节数到DC中、磁盘中的源地址到控制器的控制逻辑上;
- 启动DMA控制器进行数据传送。此后,CPU可以执行其它任务;
- DMA控制器按照命令传送数据:先从磁盘读入一个字节的数据送入DR后,再传送到内存中。
- 修改并检查DC中的数值:若DC中的值不为0,则继续传送下一个字节;为0,则发出一个中断请求。
4.I/O通道控制方式
a.I/O通道控制方式的引入
引入目的:
- 进一步减少CPU对I/O操作的干预;
- 以多个块为单位进行数据传送;
- 一次传送多组数据到多个不同的内存区域。
b.通道程序
通道是通过执行通道程序并与设备控制器共同实现对I/O设备的控制的。通道程序是由一系列通道指令(或称为通道命令)所构成的。
每条指令都包含以下信息:
- 操作码——指令执行的操作:读/写
- 内存地址——字符送入/取出内存的首址
- 计数——表示本条指令所要读/写数据的字节数
- 通道程序结束位P P=1表示本条指令是最后一条
- 记录结束标志位R R=1表示这是处理某记录的最后一条指令
六.参考资料
《操作系统第四版》