五、设备管理
1.I/O体系结构
从上至下依次为
用户层IO:产生 I/O 请求、格式化 I/O、Spooling
设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护及设备
分配与释放等等,同时为设备管理与数据传送提供必要的存储空间。
设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动IO设备
工作的驱动程序。
中断处理程序:用户保存被中断进程的CPU环境,处理完并回复被中断程序的现场后,返
回到被中断进程。
硬件:执行 I/O 操作
2.I/O控制方式
- 采用轮询的可编程 I/O 方式
- 易于实现,但 CPU 和 I/O 设备只能串行工作,CPU 效率较低
- 采用中断的可编程 I/O 方式
- 比上一种方法有优势,但数据中的每一个字在存储器与 I/O 控制器之间的传输都要经过 CPU ,这就导致这种方式仍会消耗较多的 CPU 时间
- 直接存储器访问(DMA)方式
- DMA 控制时,传输基本单位是数据块,只有传送开始和结束时才需要 CPU 的参与,CPU 利用率较高
- I/O通道方式(通道是一种特殊的硬件)
- I/O 通道传送基本单位是一组数据块,有更高的自主权,CPU 利用率更高
总结:整个 I/O 控制方法的发展,总的来说就是四个字 ——“简政放权”:减轻 CPU 对所有操作控制的压力,让合适的 “人”(如其他专门硬件)去处理合适的 “事”(如这里的 I/O 操作)。
3.I/O分配中的数据结构和分配方法
3.1.1设备分配中的数据结构
设备控制表(DCT)
控制器控制表(COCT)、通道控制表(CHCT)、系统设备控制表(SDT)
上述几种数据结构之间的关系
- DCT 与 COCT 一一对应
- CHCT 与 COCT 一对多(一个通道可谓多个设备控制器服务)
- SDT 整个系统只有 一张
3.2.1分配方法
设备分配的安全性指分配设备时防止发生死锁
设备分配时应考虑到的因素:1)设备固有属性;2)设备分配算法;3)设备分配时的安全性4)
设备独立性
设备的固有属性:1)独占性设备;2)共享性设备;3)可虚拟设备
设备分配算法:1)先来先服务;2)优先级高者有优先。
设备分配中的安全性:1)安全分配方式:放弃了“请求和保持”条件,因此也导致了CPU与IO串行工作
不安全分配方式:具备“请求和保持”条件,可能造成死锁,但也导致了一个进程可同时操作多个设备
4.1通道和通道程序
4.1.1通道
通道是通过执行通道程序,并与设备控制器共同实现对IO设备的控制的。由一系列通道指令(命令)构成。与一般机器指令不同,在他的每条指令中,都包含如下信息:
- 操作码 2. 内存地址 3. 技计数 4. 通道程序结束位 5. 记录结束标志
4.1.2通道程序
- 通道程序由一系列通道指令构成。
- 通道指令构成如下:
- 操作码:包括 读 写 控制 等操作
- 内存地址:操作数据的内存首址
- 计数:操作数据的字节数(与上一项 内存地址 相加,即可获得操作数据的内存范围)
- 通道程序结束位 P :P = 1 表示本条指令是通道程序的最后一条指令
- 记录结束标志 R :R = 0 表示本条指令和下一条指令处理的数据是同一条记录;R = 1 表示这是处理某条记录的最后一条指令
5.设备独立性及其实现方法
5.1.1设备独立性
---- 为了提高OS的可适应性和可扩展性,在现代OS中都毫无例外地实现了设备独立性(Device Independence),也称为设备无关性。
---- 其基本含义是:应用程序独立于具体使用的物理设备。为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。
---- 在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。
具体含义:基本含义:应用程序独立于具体使用的物
好处:1)设备分配时的灵活性;2)易于实现IO重定向
5.2.1实现方法
- 逻辑设备表
在应用程序中使用逻辑设备名来请求使用某类设备,在系统中设置一张逻辑设备表(LUT),用于将逻辑设备名映射成物理设备名。表的表目中包含三项:逻辑设备名,物理设备名和设备驱动程序的入口地址
- 建立逻辑设备表的两种方式:
1)在整个系统中只设置一张LUT,适用于单用户系统
2)为每个用户设置一张LUT。
6.虚拟设备和SPOOLing技术
SPOOLing(假脱机)技术可以将一台物理IO设备虚拟为多台逻辑IO设备,允许多个用户共享一台物理IO设备。实质上是一种以空间换时间的技术
SPOOLing是对脱机输入、输出系统的模拟。必须建立在多道程序功能的基础上,而且还要此资料免费共享
有高速随机外存的支持,通常采用磁盘存储技术。
SPOOLing主要有三个组成部分:
- 输入井和输出井,在磁盘上开辟的两个大存储空间,输入井是模拟脱机输入的磁盘设备,用于暂存IO设备输出得数据,输出井是模拟脱机输出的设备,用于暂存用户程序的输出数据。
- 输入缓冲区和输出缓冲区,为缓和CPU和IO设备速度不匹配的矛盾,在内存中开辟两个缓冲区:输入和输出缓冲区,输入缓冲区用来暂存由输入设备送来的数据,以后在传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后在传送给输出设备。
- 输入进程和输出进程:利用这两个进程模拟脱机IO时的外围控制机。其中输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区在送到输入井,当CPU需要输入数据时,直接从输入井读到内存;输出进程模拟输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。
优点:
1)提高了I/O的速度。
2)将独占设备改造为共享设备。
3)实现了虚拟设备功能。
7.缓冲管理
缓冲区
操作 | 所需时间 |
磁盘 → 缓冲区 | T |
缓冲区 → 用户区 | M |
CPU 处理 | C |
7.1.1单缓冲区
- 每块数据处理时间为
- max(C, T) + M
7.1.2双缓冲区
- 每块数据处理时间为
- max(C+M, T)
单缓冲机制不允许双方同时向对方发送数据,而双缓冲可以。
时间计算小结:能并行的放在 max 内取大的,再和只能串行的任务时间相加
7.1.3循环缓冲
包含多个大小相等的缓冲区,每个缓冲区中由一个链接指针指向下一个缓冲区,构成一个环形。
7.1.4缓冲池
在池中设置多个可供进程共享的缓冲区。
组成:1)空闲缓冲区(空缓冲队列;2)装满输入数据的缓冲区(输入缓冲队列);3)装满输出数据的缓冲区(输出缓冲队列)。
8.设备处理与I/O软件
IO软件总体设计目标是高效率和通用性。
I/O软件应实现目标:
1)与具体设备无关;2)统一命名;3)对错误的处理;4)缓冲技术;5)设备分配和释放;6)IO控制方式
四个层次:
用户层软件、设备独立性软件、设备驱动程序、中断处理程序
9.设备分配
设备分配的目的是视设备为资源进行分配,也就牵扯到了分配的算法。详见处理机调度算法的先来先服务算法与优先级高有限服务算法