Skip to content

ch13 I/O输入系统

13.1 概述

  • 计算机主要有两个任务:I/O操作与计算处理,许多情况下的主要任务是I/O操作,比如浏览网页或编辑文件。操作系统的I/O方面的作用是管理和控制I/O操作和I/O设备
  • I/O设备技术呈现两个矛盾的趋势:硬件软件接口日益增长的标准化与I/O设备日益增长的多样性。为了封装不同设备的细节与特点,操作系统内核设计成使用设备驱动程序模块的结构。
  • 设备驱动程序 device driver:为I/O子系统提供了统一设备访问接口,就像系统调用为应用程序与操作系统之间提供了统一的标准接口一样。 alt text

13.2 I/O应用接口

  • 操作系统的组织技术与接口的目的是使I/O设备可以按统一的标准方式来对待这里的方式包括抽象、封装与软件分层,具体就是从详细而不同的I/O设备中抽象出一些通用类型,每个通用类型都可以通过一组标准函数 (即接口)来访问。设备驱动程序层的作用是为内核I/O子系统隐藏设备控制器之间的差异。
  • 应用程序可以使用内核提供的统一接口访问I/O设备,方便了内核及应用程序的设计与编码,但也导致应用程序无法使用设备的具体特性,降低了设备的性能。绝大多数操作系统存在后门,允许应用程序将任何命令透明地传递到设备控制器,如Unix的系统调用ioct1()能使应用程序访问由设备驱动程序所实现的一切功能而不需要再设计新的系统调用。
  • 下面介绍设备差异
    1. 块与字符设备
    2. 网络设备
    3. 时钟与定时器
    4. 阻塞与非阻塞I/O

13.3 I/O内核子系统

  1. I/O调度
  • 调度一组I/O就是确定一个合适的顺序来执行这些请求。应用程序发布的系统调用顺序不一定总是最佳选择,调度能改善系统整体性能,如磁盘调度,重新安排服务顺序增加性能就是I/O调度的核心
  • 操作系统开发人员通过为每个设备维护一个请求队列来实现调度
  1. 缓冲 buffer:缓冲区是用来保存两个设备之间或在设备和应用程序之间所传输数据的内存区域。
    • 使用缓冲的优点 :
      1. 处理数据流中生产者与消费者之间的速度差异。使用双缓冲机制,一个缓冲接收生产者数据,另一个缓冲写给消费者,若生产者比较慢,那么当第一个缓冲写满了以后两个缓冲调换,完成了生产者与消费者的分离解耦。
      2. 协调传输数据大小不一致的设备。如网络传输中发送端将大消息分成若干网络包,接收端将它们放在重组缓冲区内。
      3. 支持应用程序I/O的复制语义。当用作 buffer的页面被修改后,复制出一个新的页面,原来的页面用于 write(),新的页面用于修改。
  2. 高速缓存 cache:高速缓存是可以保留数据副本的高速存储器
    • 缓冲与高速缓存差别:缓冲可能是数据项的唯一副本,高速缓存只是提供了一个驻留在其他地方的数据在高速存储器上的一个副本
  3. 假脱机 spooling 与设备预留 device reservation:
    • 这两种技术的目的:解决独占设备的并发访问问题以提高设备利用率
    • 脱机输入是利用专门的外围控制机将低速 I/0 设备上的数据预先输入到磁盘上然后主机从磁盘上直接读取输入数据,脱机输出相反
    • spooling 技术,即外部设备联机并行操作,是利用进程与磁盘对脱机输入输出工作过程的模拟,因此又称假脱机。这种技术将慢速的字符设备 (独占设备) 虚拟成共享的虚拟设备,从而提高独占设备利用率和进程的推进速度