十三、输入输出和磁盘调度(一)

主要内容

  • 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 设备的传输速度

image

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 传送控制方式的发展过程
  1. CPU直接控制外围设备
  2. 引入了控制器或I/O模块,使用程序控制方式
  3. 中断控制方式
  4. I/O模块通过DMA直接控制内存
  5. I/O模块有独立的处理器(由专门的指令集)(I/O通道)
  6. 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
    • 开销小但低效
    • 一个字节的传送需要两个总线周期(传送请求+传送)
      • image
  • 单总线,I/O集成DMA
    • DMA模块与I/O模块的数据交换脱离系统总线
    • DMA模块接口多样
    • image
  • I/O总线
    • DMA模块与I/O模块的数据交换脱离系统总线
    • DMA模块接口单一,便于扩展
      • image

image

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软件的层次逻辑结构

image

9.3.3 操作系统设计层次

image

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软件的层次逻辑结构

image

posted @ 2024-12-24 15:56  韦飞  阅读(57)  评论(0)    收藏  举报