十三、输入输出和磁盘调度(一)
主要内容
- I/O 设备
- I/O 功能的组织
- 操作系统的 I/O 设计的主要问题
- I/O 缓冲技术性能分析
- 磁盘调度
- RAID
- 磁盘高速缓存
I/O的特点
- I/O性能经常成为系统性能的瓶颈
- I/O是导致操作系统庞大复杂的原因之一
- 种类繁多、结构各异、速度差异大
- 理解I/O的工作过程与结构是理解操作系统的工作过程与结构的关键
- 与操作系统的其他功能(如文件系统)联系密切
9.1 I/O 设备
- 人可读————与用户交互
- 打印机
- 终端:显示器 + 键盘
- 机器可读————与电子设备交互
- 磁盘驱动器
- 固态硬盘/U盘
- 传感器
- 控制器
- 执行机构/驱动器/传动器
- 通信————与远程设备通信
- 数字线路驱动器
- 调制解调器(modem)
9.1.1 I/O 设备的传输速度

9.1.2 I/O 设备的差异
- 应用程序
- 用于存储文件的磁盘需要文件管理软件支持
- 用于存储虚拟内存页面的磁盘需要特定的软硬件支持
- 系统管理员使用的终端可能拥有较高优先级
- 控制的复杂性
- 传送单位————字节(如键盘)/块(磁盘)
- 数据表示————编码方案(字符编码、奇偶校验)
- 错误条件————不同的设备以不同方式相应错误
9.1.3 设备组成
- I/O设备一般由机械和电子两部分组成
- 机械部分:设备本身(物理装置)
- 电子部分:称作设备控制器或适配器
- 操作系统总是与控制器而不是设备本身打交道,控制器完成设备与主机之间的连接和通讯
![image]()
- 控制器卡上通常有可插接的连接器,通过电缆与设备内部相连
- 控制器与设备之间的接口常常是一个低级接口(如指定具体参数对磁盘进行格式化)
- 从设备驱动器出来的是位流(比特流),控制器的任务是把串行的位流转换为字节块,并进行必要的检验工作后送到内存
9.2 I/O 功能的组织
- 控制设备和内存或CPU之间的数据传送的方式
- 程序控制
- 由用户进程直接控制(如发出启动命令)
- I/O操作完成前CPU处于忙等待状态(不停检测是否完成)
- 中断驱动方式
- 操作系统将I/O命令(带参数)写入控制器寄存器
- CPU可以转去执行其他运算
- I/O操作完成时控制器产生一个中断
- 直接内存访问(DMA)
- 由DMA模块控制内存和I/O设备之间的数据交换
- CPU仅仅在整个数据块的传送都完成时才被中断
- 程序控制
9.2.1 传送控制方式的发展过程
- CPU直接控制外围设备
- 引入了控制器或I/O模块,使用程序控制方式
- 中断控制方式
- I/O模块通过DMA直接控制内存
- I/O模块有独立的处理器(由专门的指令集)(I/O通道)
- I/O模块进一步发展成专用I/O计算机
9.2.2 中断方式磁盘访问
- 操作系统将(带参数的)I/O命令写入控制器寄存器
- 控制器从磁盘驱动器串行按位读块,直到将整块信息放入控制器的内部缓冲区中
- 控制器做和校验计算,以核实没有读错误发生,然后控制器产生一个中断
- CPU相应中断,控制转给操作系统
- 操作系统重复地从控制器缓冲区中按字节或字读磁盘块的信息,并将其送入内存中
9.2.3 磁盘访问
- 使用DMA方式的一次读磁盘过程
- CPU提供被读取块磁盘地址、目标存储地址、要读取的字节数
- 控制器将整块数据读进缓冲区,并进行核准校验
- 控制器按照指定存储器地址,把指定字节数数据送入主存(每传送一个字节计数器值减1)
- 控制器引发中断,通知操作系统,操作完成
![image]()
9.2.4 DMA与中断
- DMA与中断方式的主要区别:设备与内存之间的数据传输的控制者不同
- 中断方式中是由CPU控制完成的
- DMA方式中则是由DMA控制器完成的(传送时不需要占用CPU时间)
- 中断方式是由CPU控制完成的
- DMA控制器从CPU中夺取系统控制权,用来在系统总线上与内存进行数据交换
- 相关:周期窃取技术
9.2.5 DMA的周期窃取技术
- 指令周期被挂起
- CPU暂停一个总线周期,但并不是中断(不用保存执行上下文)
9.2.6 DMA的配置方式
- 单总线,分离DMA
- 所有I/O模块共享一个系统总线
- DMA模块代理处理器,使用可编程I/O
- 开销小但低效
- 一个字节的传送需要两个总线周期(传送请求+传送)
- 单总线,I/O集成DMA
- DMA模块与I/O模块的数据交换脱离系统总线
- DMA模块接口多样
![image]()
- I/O总线
- DMA模块与I/O模块的数据交换脱离系统总线
- DMA模块接口单一,便于扩展

9.3 操作系统设计问题
- I/O机制的设计目标
- 效率————最重要(I/O瓶颈),最关注的是磁盘I/O
- 通用性————统一处理方式,困难
- 处理器看待I/O设备的方式
- 操作系统管理I/O设备和I/O操作的方式
- 逻辑结构————层次结构、模块化
- I/O缓冲————为减小系统开销和提高操作效率,在I/O请求发出之前/后,就/才开始执行数据传输
- 磁盘调度————磁盘比内存慢4个数量级,磁盘性能与文件系统关系密切
9.3.1 I/O软件设计目标
- 效率
- 与处理器和主存相比,多数I/O设备速度较慢
- 多道程序允许在一些进程等待I/O时运行其他进程
- I/O仍然可能跟不上处理器的速度
- 虚拟内存可能解决多道程序设计中的内存不足问题,但是页面交换本身又是I/O操作
- 提高效率的技术
- I/O缓冲、磁盘调度、磁盘阵列、磁盘高速缓冲等
- 通用性
- 系统以统一的方式处理所有的I/O设备
- 低层例程隐藏设备I/O的大部分细节,向进程和高层提供使用设备的通用方式
- 用read、write、open、close、lock、unlock等————采用层次化结构和模块化设计
9.3.2 I/O软件的层次逻辑结构

9.3.3 操作系统设计层次

9.3.4 用户空间的I/O设计
- 库过程中的I/O系统调用
- 输入,如gets
- 输出,如printf
- SPOOLing系统:用共享设备(如磁盘)模拟独占设备(打印机)
- 打印精灵
- 网络传输精灵
9.3.5 假脱机技术
- SPOOLing技术亦称为虚拟设备技术
- 引入:在多道批处理系统中,专门利用一道程序(SPOOLing程序)来完成对设备的I/O操作,而无需使用外围I/O处理机
![image]()
- 原理
- 设置两级缓冲区:内存缓冲区和快速外存上的缓冲池,后者可以暂存多批I/O操作的较多数据
- 应用程序进行I/O操作时,只是和SPOOLing程序交换数据,称为“虚拟I/O”————实际上是对SPOOLing程序的缓冲池进行I/O操作
- SPOOLing程序和外设进行数据交换,称为“实际I/O”————可以缓冲
- 优点
- 高速虚拟I/O操作
- 实现对独享设备的共享
9.3.6 逻辑I/O(设备无关的I/O软件)
- 大部分I/O软件是与设备无关的,常见功能:
- 设备驱动程序的统一接口:实现一般设备都需要的I/O功能,向用户层软件提供统一接口
- 设备命名:将设备符号名称映射到相应设备驱动程序
- 设备保护:防止五权限用户访问/存储设备
- 提供与设备无关的块大小:屏蔽“不同设备基本单位可以不同”这一事实,向较高层软件提供统一块大小的抽象设备
- 缓冲:通过缓冲区来协调设备的读写速度和用户进程的读写速度
- 块设备的存储分配:磁盘空闲块管理
- 分配和释放独占设备:检查独占设备的使用请求进行
- 错误报告:报告设备驱动程序无法处理的出错信息
9.3.7 设备I/O
- 逻辑设备与物理设备间过度协调机构
- 用户命令到设备操作序列的转换
- I/O缓冲:提高I/O效率
9.3.8 调度和控制
- 物理设备控制实体,直面硬件设备的控制细节
- 通常体现为设备驱动程序
- 并发I/O访问调度
- 设备控制和状态维护
- 中断处理
- 设备驱动程序处理一种或一类设备类型
- 细微差别的不同品牌终端可使用同一个终端驱动程序
- 性能差别显著的终端可使用不同终端驱动程序
- 设备驱动程序工作过程
- 接收来自逻辑I/O软件的抽象请求:如“读第n块”,将其转化为具体形式(如计算第n块的实际位置、检查磁头臂等)
- 执行请求:通过设备控制器中的寄存器向控制器发出II/O命令并监督执行
- 在I/O操作完成后(阻塞或不阻塞),进行错误检查:若无错误则将数据传送到与设备无关的软件层,否则出现错误(重试、忽略或报警等)
9.3.9 I/O软件的层次逻辑结构








浙公网安备 33010602011771号