第五章 I/O设备
一、I/O系统的组成
1.1 I/O系统的结构
I/O的特点:
-
I/O
性能经常成为计算机系统性能的瓶颈,因为它的运行速度比较慢 - 操作系统庞大复杂的原因之一
- 理解
I/O
的工作过程与结构是理解操作系统的工作过程与结构的关键 - 与其他功能密切联系,特别是文件系统
I/O
系统的两大结构:
- 总线型(微机型)
- 主机型:总线上会使总线与
CPU
的压力太大,因此引入一个I/O
通道。
1.2 I/O设备
I/O设备的性能指标:
- 数据传输速率
- 数据传输单位:块、字节
- 设备共享属性:能否被共享
按照传输速率分:
- 低速:键盘、鼠标
- 中速:打印机
- 高速:磁盘
按照数据传输单位:
- 块设备:磁盘(扇区)
- 字符设备:键盘
按照共享属性分:
- 独占设备:打印机
- 共享设备:磁盘
- 虚拟设备:用一种技术将独占的设备变成共享的设备
1.3 设备控制器
在主机结构中,设备是通过设备控制器与CPU
通信,在接口中,有以下三种信号,而在微机型中,常称为接口卡。
- 控制信号:设备控制器发给设备,对设备进行一定的操作
- 数据信号:两者之间来回传递比特流
- 状态信号:用于指示设备当前的状态
设备控制器的功能:
- 接收与识别命令
- 数据交换
- 设备状态的了解与报告
- 地址识别
- 数据缓冲
- 差错控制
设备控制器的组成:
- 与处理机的接口
- 与设备的接口
-
I/O
逻辑
1.4 I/O通道
通道的引入:
为了建立独立的I/O
操作,解放CPU
,当拿到一条指令的时候,先执行通道程序,之后才会发出中断。
通道类型:
-
字节多路通道
- 每个通道有许多子通道
- 按时间片轮转的方式利用主通道
- 不适合高速设备
-
数组选择通道
- 按照数组为信息交换
- 可以连接高速设备
- 只含有一个子通道,利用率低
-
数组多路通道
- 将前两者结合起来
I/O设备的瓶颈问题:
- 对于单通道来说,只能独占,无法共享
- 而多通路可以解决这个问题,将每个通道都与控制器相关联
二、I/O控制方式
宗旨: 尽可能地减少主机对I/O
的干预,从而解放CPU
。
2.1 程序I/O方式
总结就是两个字:忙等! 在这个状况下,CPU
是不断要检测I/O
是否已经完成。
2.2 中断驱动方式
引入中断的操作,当发出I/O
命令时,CPU
中断保存现场,去执行其他事情,等待I/O
的完成,再恢复现场。
2.3 DMA方式(直接存储器访问)
在上一个方法中,数据传输过程中只能一个扇区一个扇区的读写,能不能一块一块地读写呢?
DMA工作特点:
- 数据传输单位是数据块
- 传送数据直接在内存与
I/O
之间进行 - 只有在开始与结束的时候,
CPU
才会干预
DMA控制器:
-
命令/状态寄存器
CR
,用于接收从CPU
发来的I/O
命令或有关控制信息,或设备的状态; -
内存地址寄存器
MAR
。用于存放数据从设备传送到内存的目标地址,或由内存到设备的内存源地址; -
数据寄存器
DR
。用于暂存从设备到内存或从内存到设备的数据; -
数据计数器
DC
。存放本次CPU
要读或写的字(节)数。
DMA工作流程:
2.4 I/O通道控制方式
在上一个方法中,DMA
已经可以一块一块读取了,但是还有一个问题,如果要读取的内存数据不连续呢?那么就要多次DMA
,这显然是很麻烦的。
因此在设备控制器之前,先将I/O
指令交给设备通道来执行。
通道指令:
工作方式:
当P==1
的时候,该条通道指令才结束,当R==1
的时候,代表这条记录已经被写完。
三、缓冲管理
3.1 缓冲的引入
引入缓冲的目的:
- 解决
CPU
与I/O
速度不匹配的矛盾 - 减少
CPU
的中断频率,放宽对中断的响应时间- 中断频率:就是一段时间内中断的次数
- 中断响应时间:提交中断到完成中断这段时间
- 如果在规定的响应时间未完成,那么下一个中断就来了,就会冲突
- 提高
CPU
与I/O
的并行性
举例:
- 对于
a
来说,中断频率为9.6K
,中断响应时间为1/9.6K
- 对于
b
来说,中断频率是为9.6K/8
,但是中断响应时间还是9.6K
- 对于
c
来说,中断频率是9.6K/8
,中断时间为8/9.6K
。
3.2 单缓冲
工作方式:
在单缓冲情况下,为什么系统对一块数据的处理对问为Max(C,T)+M?
Answer:
因为CPU
与I/O
是并行的,基本上都是同步进行,就看谁更快了。但是T
与M
是不能并发的。因为如果还没把缓冲区的数据放入内存,那么缓冲区的数据就被覆盖了。
3.3 双缓冲
工作方式:
3.4 循环缓冲
上一个方法中,适合于生产与消费的速度差不多的情况。但是如果差异比较大的时候,得循环缓冲。
以上缓冲区分为三种情况:
- 空缓冲区,当
nextg追上nexti
,空了 - 满缓冲区,当
nexti追上nextg
,满了 - 当前缓冲区
以上情况就是生产者与消费者问题!
3.5 缓冲池
循环缓冲仅适合用于单个的生产者与消费者,为了提高利用率,那么开一个共享的缓冲区。其类型与之上类似。
工作方式:
- 收容输入:从
emq
队列中拿一个空缓冲区,然后把该缓冲区放入imq
队尾 - 提取输入:从缓冲区先提取一个队列的数据,然后把这个队列放到空缓冲队列上
四、设备分配
4.1 数据结构
设备控制表DCT:
其他相关表:
4.2 考虑因素
- 设备的固有属性
- 独占、共享、虚拟设备
- 设备的分配算法
- 先来先服务、优先级高
- 设备分配的安全性
- 设备独立性
4.3 设备独立性
对于两个进程,如果同时申请打印机一,设备资源得不到满足,但是打印机二是可以用的,这样的话,我们就可以利用打印机二。那么这样的话,我们申请设备的时候,不指定申请哪一台,那么引入两个概念:逻辑设备与物理设备。
优点:
- 设备分配时的灵活性
- 有利于
I/O
的重定向(可以方便调试,可以先输出到屏幕,打印的时候再用打印机)
4.4 独占设备的分配技术
4.5 SPOOLING技术
脱机技术:
利用一个外围控制器,将I/O
的数据传到磁盘上或者相反。
假脱机Spooling:
将外围机替换成两道进程。
Spooling结构:
主机在磁盘的右边。
Spooling技术的应用:
- 将打印机变成共享,公司里10个人,不可能每个人一台打印机,每人都不知道打印机是否在用。
- 由输出进程在输出井中申请一块空闲区,并把数据放入
- 输出进程申请一张空白的用户请求表,并将用户的打印放入其中,再把该表挂到请求打印队列上。
spooling的优点:
- 提高
I/O
速度 - 将独占设备改成共享设备
- 实现了虚拟设备的功能
五、设备处理
5.1 设备驱动程序的功能和特点
功能:
- 将接收到的抽象要求转换为具体要求。
- 检查用户
I/O
请求的合法性,了解I/O
设备的状态,传递有关参数,设置设备的工作方式 - 发出
I/O
命令,启动分配到的I/O
设备,完成指定的I/O
操作 - 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理
- 对于设置有通道的计算机系统,驱动程序还应能够根据用户的
I/O
请求,自动地构成通道程序
特点:
- 驱动程序主要是在请求
I/O
的进程与设备控制器之间的一个通信程序。 - 驱动程序与
I/O
设备的特性紧密相关 - 驱动程序与
I/O
设备的控制方式紧密相关 - 由于驱动程序与硬件紧密相关,因而其中的一部分程序必须用汇编语言书写,目前有很多驱动程序,其基本部分已经固化,放在
ROM
中
5.2 设备驱动程序的处理过程
- 将抽象需求转换成具体需求
- 检查
I/O
请求的合法性 - 读出和检查设备的状态
- 传送必要的参数
- 方式的设置
- 启动
I/O
设备
5.3 中断处理程序的处理过程
- 唤醒被阻塞的驱动程序进程
- 保护现场
- 分析中断原因,转入中断处理
- 进行中断处理
- 恢复现场
六、磁盘存储器管理
6.1 磁盘结构
磁道、扇区、柱面的概念:
磁盘类型:
- 固定头磁盘:每个盘片都有一个磁头
- 移动头磁盘:磁盘只有一个磁头
磁盘访问时间:
- 寻道时间:启动磁臂时间与磁头移动n条磁道花费时间之和
- 旋转延迟时间:
- 传输时间:读取磁盘的时间
- 因此总时间 =
- 注意寻道时间是取平均,而读取时间是计算一个百分数*读取一圈的时间
6.2 磁盘调度
1.先来先服务FCFS:
按照顺序执行
2.最短寻道时间优先SSTF:
寻找一个离的最近的
- 缺点:会导致饥饿现象,有一些进程就没法执行了
3.扫描算法:
也是找最近,但是只能往一一定顺序走,不能回头
4.还有一些延申,肯定不考。
6.3 磁盘高速缓存
这个与Cache
的思想很像,这里不做赘述了。
6.4 提高磁盘速度方法
1.提前读:
读一条指令周围的相关,都读起来。
2.延迟写:
类似于高速缓存
3.优化物理块的分布:
把物理块尽可能放到一起
4.虚拟盘:
利用光驱,在内存中开一块区域。
6.5 廉价磁盘冗余阵列
1.并行交叉读取:
对同一个扇区,一次性多读几个磁盘。