设备管理——I/O软件

一、设备的使用与管理
1、设备管理的目标及任务
(1)、目标
①、提高设备利用率
②、为用户提供方便、统一的界面
(2)、任务
①、动态地掌握并记录设备的状态
②、设备分配和释放
③、缓冲区管理
④、实现物理I/O设备的操作
2、相关系统调用
①、申请设备
该系统调用中有参数说明了要申请的设备名称,操作系统处理该系统调用时,按照设备特性(独占还是分时共享)和设备的占用情况来分配设备,返回申请是否成功标志
②、将数据写入设备
③、从设备读取数据
④、释放设备,申请设备的逆操作
3、相关数据结构
在多通路的I/O系统中,为了满足一个I/O请求,不仅仅是分配一个I/O设备的问题,还应分配相应的控制器和通道。设备管理程序对I/O设备进行分配和控制是借助于一些数据结构,其中记录了I/O设备需要的信息
(1)、

①、DCT
主要内容:设备类型、设备标识符、设备状态、与此设备相连的COCT、重复执行的次数或时间、等待队列的队首和队尾指针、I/O程序地址
②、COCT:与DCT类似
③、CHCT:与DCT类似
④、SDT
记录系统中所有I/O设备的信息,表目包括:设备类型、设备标识符、进程标识符、DCT表指针
(2)、

4、I/O设备使用方式
(1)、独占式共享使用设备
在申请设备时,如果设备空闲,就将其独占。在该设备被释放前,不允许其他进程申请使用。独占式使用设备时,设备利用率很低。
如果一个逻辑上完整的数据可以用设备的一次I/O操作完成,那么就不必要独占该设备。也可以说,如果一次I/O操作的数据逻辑上完整,就不必独占该设备
(2)、分时式共享使用设备
以一次I/O为单位分时使用设备,不同进程的I/O操作请求以排队方式分时的占用设备进行I/O。从用户程序系统调用界面来看,I/O操作是并发的
(3)、以SPOOLing方式使用外设
组成:
①、输入井和输出井:磁盘上开辟的2个大存储空间
②、输入缓冲区和输出缓冲区
③、输入进程SPi和输出进程SPo
④、请求打印队列

特点:
①、提高了I/O速度
②、设备并没有分配给任何进程,在输入井或输出井中分配给进程的是一存储区和建立一张I/O请求表
③、实现了虚拟设备功能
例:共享打印机
不真正将打印机分配给用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中。然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空

二、I/O软件层次结构
操作系统将设备管理系统划分并组织成3个层次:
①、用户层I/O
②、与设备无关的I/O
③、设备驱动及中断处理

1、用户层I/O
用户层与设备的控制细节无关,不直接与设备打交道。它将所有的设备看作逻辑资源,为用户进程提供各类I/O函数。用户以设备标识符和一些简单的函数来使用设备,如打开、关闭、读、写等。如C库中的函数fopen()、fread()、fwrite()、fclose()、printf()···
2、与设备无关的I/O软件层
其对上提供系统调用接口,对下提供设备驱动程序接口调用设备驱动程序
(1)、与设备无关性
为了提高系统的可适应性和可拓展性,我们希望所编制的用户程序与实际使用的物理设备无关,这就是与设备无关性。为此,将逻辑设备与物理设备区分,并引入逻辑设备名称和物理设备名称的概念。为了实现设备无关性,系统中必须有一张联系逻辑设备名称和物理设备名称的映射表(LUT):

(2)、基本功能
①、设备名与设备驱动程序的映射
②、设备保护
③、逻辑块
④、缓冲
⑤、设备空闲空间管理与分配
⑥、错误报告
⑦、分配及设备释放
3、设备驱动与中断处理
设备驱动程序包括了所有与设备相关的代码,其功能是将设备无关层中的抽象请求转换成对底层设备的具体操作。当进程进行I/O操作时,将其阻塞至I/O操作结束并发生中断。中断发生时,由中断处理程序启动请求排队的下一请求并解除等待I/O进程的阻塞,使其能够继续执行

三、缓冲管理
1、目的
①、缓解CPU与I/O设备速度不匹配的矛盾
②、减少对CPU的中断频率,放宽对中断处理时间的限制
③、提高CPU和I/O设备之间的并行性
2、分类
(1)、单缓冲
每当用户进程发出一个I/O请求时,操作系统便在内核区域为之分配一个缓冲区

CPU从磁盘上读入N个数据块,然后对这些数据块进行计算,工作步骤为:
①、从从磁盘把一块数据放入缓冲区,用时T
②、操作系统将缓冲区数据传送到用户区,用时M
③、CPU对数据运算,用时C
因为数据读入缓冲区和计算可以并发执行,此数据最大处理时间为:MAX(C,T)xN+MxN,其中M远小于T和C
若不采用缓冲,处理时间为(T+C)xN
(2)、双缓冲
可以实现用户数据区-缓冲区之间的数据交换和缓冲区-外设之间的数据交换的并行

工作步骤:
①、设备先将数据输入缓冲区A,装满后转向缓冲区B
②、此时,操作系统可以从将缓冲区A传送到用户区
③、CPU对数据运算
则:系统处理一块数据的时间可认为是MAX(C,T)
(3)、循环缓冲
采用有限缓冲区的生产者/消费者模型对缓冲池中的缓冲区进行循环使用

缓冲区结合预读和滞后写技术对具有重复性及阵发性I/O进程提高I/O速度很有帮助

四、设备驱动程序
1、功能
①、向有关I/O设备的各种控制器发出命令,并监督它们正确执行,进行必要的错误处理
②、对各种设备排队、挂起、唤醒等操作进行处理
③、执行确定的缓冲区策略
④、进行比寄存器接口级别层次更高的一些特殊处理,如代码转换、ESC处理等。这些特殊处理均依赖于具体设备,不适合放在高层次的软件中处理
2、特性
与I/O设备的硬件结构密切相关,是操作系统底层中唯一知道各种I/O设备的控制器细节及用途的部分
3、结构
与I/O设备的硬件特性有关。通常一个设备驱动程序对应处理一种设备类型,或至多是一类密切相关、差异性较少的设备类型
4、实现策略
①、确定是否发送新的请求
②、针对具体设备和操作,确定发送的内容
③、执行底层具体操作
④、中断与后续处理工作
5、接口函数
①、驱动程序初始化函数
是为了使驱动程序其他函数能被上层正常调用,而做一些针对驱动程序本身的初始化工作。如向操作系统登记该驱动程序的接口函数。该初始化函数在系统启动时或驱动程序安装入内核时执行
②、驱动程序卸载函数
初始化函数的逆过程,在支持驱动程序可动态加载卸载的系统中才需要
③、申请设备函数
申请一个驱动程序所管理的设备,按照设备特性进行独占式或分时共享式占用。如果是独占式,申请成功后还应该对设备做初始化工作
④、释放设备函数
申请设备函数的逆过程

五、中断处理程序
指CPU暂时终止现行程序,转去执行其他紧急事件或特殊请求,处理完后自动返回原来被中断处继续执行或调度新的进程执行的过程
中断处理流程:
①、CPU检查响应中断的条件是否满足。即:有来自于中断源的中断请求及CPU允许中断
②、如果CPU响应中断,则CPU关中断,使其不能再次响应中断
③、保存中断进程的现场
④、分析中断原因,调用中断处理子程序。即:找到中断服务程序的入口地址
⑤、执行中断处理子程序
⑥、退出中断,恢复原程序的现场或调度新进程占据CPU
⑦、开中断,CPU继续执行

猜你喜欢

转载自blog.csdn.net/qq_43581718/article/details/106693845