1. 基础知识
设备管理管的是外设
CPU通过总线与外设相连,
IO设备类型
- 传输速度:低速、中速、高速
- 信息交换单位:块设备和字符设备
- 块设备:以数据块为单位存储、传输信息。传输速率较高、可寻址(随机读写)eg:磁盘
- 字符设备:以字符为单位存储、传输信息。传输速率低、不可寻址。eg:打印机
- 共享属性:独占设备、共享设备、虚拟设备
设备与控制器之间的接口:数据信号、控制信号、状态信号
设备管理目标:
- 提高效率:提高I/O访问效率,匹配CPU和多种不同处理速度的外设
- 方便使用:方便用户使用,对不同类型的设备统一使用方法,协调对设备的并发使用
- 方便控制:方便OS内部对设备的控制。例如:增加和删除设备,适应新的设备类型
外设管理功能:
- 提供设备使用的用户接口:命令接口和编程接口。
- 设备分配和释放:使用设备前,需要分配设备和相应的通道、控制器。
- 设备的访问和控制:包括并发访问和差错处理。
- I/O缓冲和调度:目标是提高I/O访问效率。
控制设备的功能
- 接收和识别CPU命令
- 数据交换:CPU与控制器、控制器与设备
- 设备状态的了解和报告
- 设备地址识别
- 缓冲区
- 对设备传来的数据进行差错检测
组成
- 控制器与处理机接口:数据寄存器、控制寄存器、状态寄存器
- 专门的I/O指令
- 内存映射
- 控制器与设备接口
- I/O逻辑:用于实现CPU对I/O设备的控制
I/O相关软件的层次关系
2. I/O控制技术
I/O控制技术
- 程序控制I/O
- 中断驱动方式
- 直接存储访问方式(DMA)
- 通道技术
程序控制I/O
也称轮询或查询方式I/O,它由CPU代表进程向I/O模块发出指令, 然后进入忙等状态, 直到操作完成之后进程才能够继续执行。【一次I/O一次CPU】
轮询方式:
轮询方式的工作过程:
- 应用程序提出了一个读数据的请求;
- 设备驱动程序检查设备的状态;
- 如果状态正常,就给设备发出相应的控制命令;
- 不断地去测试这个设备是否完成了这次执行过程,实际上就是一个轮询;
- 设备控制器完成操作,把数据送给应用程序
- 应用程序继续进行相应的处理。
I/O操作由程序发起,并等待操作完成。数据的每次读写通过CPU。
-
优点:实现简单
-
缺点:CPU利用率相当低,在外设进行数据处理时,CPU只能等待,循环等待中浪费了大量时间。
中断驱动方式
当I/O操作结束后由设备控制器主动地来通知设备驱动程序说这次结束, 而不是设备驱动程序不断地去轮询看看设备的状态。
工作过程:
- 用户程序提出I/O请求;
- 设备驱动程序检查设备的状态;
- 如果设备已经准备好,那么就向设备发出控制命令;
- 将状态记录在设备状态表中, CPU继续其它工作。
- 设备完成工作后向CPU发中断信号,转入中断处理程序;
- 中断处理程序发现这是一个正常地完成了控制命令的信号后,把结果提交给设备管理程序;
- 设备管理程序会从设备状态表里查询是哪一个请求的完成;
- 把相应的数据送到 应用程序;
- 通知应用程序可以继续执行。
I/O操作由程序发起,在操作完成时(如数据可读或已经写入)由外设向CPU发出中断,通知该程序。数据的每次读写通过CPU。
- 优点:在外设进行数据处理时,CPU不必等待,可以继续执行该程序或其他程序,提高了CPU利用率,可以处理不确定事件。
- 缺点:每次输入/输出一个数据都要中断CPU,多次中断浪费CPU时间,只适于数据传输率较低的设备。
直接存储访问方式(DMA)
由一个专门的控制器来完成数据从内存到设备或者是从设备到内存的传输工作。
-
由程序设置DMA控制器中的若干寄存器值(如内存始址,传送字节数),然后发起I/O操作,而后者完成内存与外设的成批数据交换,在操作完成时由DMA控制器向CPU发出中断。
-
优点:CPU只需干预I/O操作的开始和结束,而其中的一批数据读写无需CPU控制,适于高速设备
-
缺点:数据传送的方向、存放数据的内存地址及传送数据的长度等都由CPU控制,占用了CPU时间。而且每个设备占用一个DMA控制器,当设备增加时,需要增加新的DMA控制器。
-
DMA与中断方式的区别
中断方式 | DMA |
---|---|
每个数据传送完成后中断CPU | 一批数据完成之后中断 |
数据传送是在中断处理时由CPU控制完成,由于是程序切换,需要保护和恢复现场 | 数据传送由DMA控制器控制完成的,在传输过程中不需要CPU干预,DMA控制器直接在主存和I/O设备之间传送数据,只有开始和结束才需要CPU干预 |
具有对异常事件的处理能力 | 适用于数据块的传输 |
DMA处理基本流程:
I/O通道控制方式
与DMA的原理几乎是一样的,通道是一个特殊功能的处理器,它有自己的指令和程序专门负责数据输入输出的传输控制,独立于CPU。CPU将“传输控制”的功能下放给通道后只负责“数据处理”功能。这样,通道与CPU分时使用内存,实现了CPU内部运算与I/O设备的并行工作。
【对一组数据块的读写干预】
优点:执行一个通道程序可以完成几组I/O操作,与DMA相比,减少了CPU干预。
缺点:费用较高。
I/O通道分类:字节多路通道、选择通道、成组多路通道
I/O通道与DMA的区别
DMA | I/O通道 |
---|---|
数据的传送方向、存放数据的内存起始地址和数据块长度都由CPU控制 | 有自己的指令和程序,通过执行通道程序实现对数据传输的控制,具有更强的独立处理I/O的功能 |
只能控制一台或少数几台同类设备 | 可同时控制多种设备 |
3. 缓冲技术
缓冲技术可提高外设利用率
- 匹配CPU与外设的不同处理速度
- 减少对CPU的中断次数
- 提高CPU和I/O设备之间的并行性
单缓冲
一个缓冲区,CPU和外设轮流使用,一方处理完之后接着等待对方处理。
假定磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理的时间为C,则单缓冲区处理每块的用时为max(C,T)+M
双缓冲
两个缓冲区。CPU和外设都可以连续处理而无需等待对方。要求CPU和外设的速度相近
缓冲区A、B的交换取、放数据
双缓冲处理一块数据的用时为max(C+M, T)
环形缓冲
多个缓冲区,CPU和外设的处理速度可以相差较大。可参见“生产者-消费者问题
缓冲池——适合并发程序
缓冲区队列分为空闲缓冲区、输入缓冲区、输出缓冲区。缓冲区整体利用率高
4. 假脱机技术
利用假脱机技术(SPOOLing, 也称为虚拟设备技术)可把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率。
在多道程序系统中,专门利用一道程序(SPOOLing程序)来完成对设备的I/O操作。无需使用外围I/O处理机。
SPOOLing程序和外设进行数据交换:实际I/O
- SPOOLing程序预先从外设输入数据并加以缓冲,在以后需要的时候输入到应用程序;
- SPOOLing程序接受应用程序的输出数据并加以缓冲,在以后适当的时候输出到外设。
应用程序进行I/O操作时,只是和SPOOLing程序交换数据,可以称为“虚拟I/O”。应用程序实际上是从SPOOLing程序的缓冲池中读出数据或把数据送入缓冲池,而不是跟实际的外设进行I/O操作。
SPOOLing系统组成
特点
- 高速虚拟I/O操作:虚拟I/O比实际I/O速度提高,缩短应用程序的执行时间(尽快完成计算,并释放占用的计算机资源)。另一方面,程序的虚拟I/O操作时间和实际I/O操作时间分离开来。
- 将独占设备改造为共享设备
- 实现了虚拟设备功能,对每个进程而言,它们都认为自己独占了一个设备
设备驱动程序
5. 设备分配
由于外设资源的有限,需解决进程间的外设共享问题,以提高外设资源的利用率。设备分配是对进程使用外设过程的管理。
两种做法:
- 在进程间切换使用外设,如键盘和鼠标;
- 通过一个虚拟设备把外设与应用进程隔开,只由虚拟设备来使用设备。
数据结构:
- 设备控制表(DCT, Device Control Table)
- 控制器控制表(COCT, COntroller Control Table):
- 通道控制表(CHCT, CHannel Control Table)
- 系统设备表(SDT, System Device Table):系统内一张,反映系统中设备资源的状态,记录所有设备的状态及其设备控制表的入口。
设备分配时应考虑的因素:
- 设备固有属性:独享、共享、虚拟设备
- 设备分配算法:先来先服务、优先级高者优先
- 设备分配中的安全性(safety):死锁问题
- 安全分配(同步)、不安全分配(异步)
- 设备独立性
- 用户程序的设备独立性:用户程序使用逻辑设备名,系统实际执行时,映射到物理设备名。
- I/O软件的设备独立性:除了直接与设备打交道的低层软件外,其余部分软件不依赖于设备,可提高设备管理软件效率。
了解:
单通路I/O系统的设备分配
多通路I/O系统的设备分配