0x00 I/O 设备

0x00 分类

按传输速率分类为:

  • 低速设备:键盘鼠标
  • 中速设备:打印机
  • 高速设备:磁带机,磁盘,光盘

按信息交换的单位分类:

  • 块设备:数据存储以数据块为单位,如磁盘,传输速率高可寻址,可以进行随机读写
  • 字符设备:数据存储的基本单位是字符,如打印机,传输速率低不可寻址,输入输出时采用中断驱动方式

常见的设备及介质:

  • CD-ROM 为光盘存储器,强调只读,说其只能写入一次是错误的
  • Flash 存储器可以实现随机存取,但其从原理上讲仍为 ROM

ROM 即只读存储器,只能读出不能写入,信息永久保存

0x01 控制方式

  1. 程序直接控制:每读入一个字,CPU 都要对外设状态进行循环检查,造成了 CPU 资源的极大浪费,且 CPU 与 I/O 设备之间只能串行工作

  2. 中断驱动方式:允许 I/O 设备打断 CPU 而请求服务,数据中的每个字在存储器和 I/O 控制器之间的传输都必须经过 CPU,仍然会消耗较多的 CPU

  3. DMA 方式:基本单位是数据块,所传送的数据直接送入内存,在传送一个或多个块开始和结束时才需要 CPU 干预,在 DMA 控制器下完成

    DMA 往往连接高速存储器,其优先级高于中断请求,以防数据丢失。

  4. 通道控制方式:I/O 通道是指专门负责输入输出的处理机,可以实现 CPU,通道和 I/O 设备之间的并行操作,有效提高整体的利用率,I/O 通道与 CPU 共享内存,没有自己的内存,通道程序放在内存中

    CPU 启动通道,不管成功与否,通道都要回答 CPU,通过执行通道程序来实现数据的传送,通道在执行通道程序时与 CPU 并行,当通道完成通道程序的执行时(即数据传送结束时),便产生 I/O 中断向 CPU 报告。

    CPU 通过 I/O 指令来控制通道,而不是通过中断,中断服务程序最后一条指令是转移指令。

实例比较:

一个客户(CPU)向裁缝(I/O 设备)订了一批衣服(寻求了一段输入)

  1. 程序直接控制:裁缝没有客户的联系方式,客户必需每隔一段时间去看看裁缝把衣服做好了没有
  2. 中断驱动方式:裁缝有客户的联系方式,但是每做完一件,都要给客户打电话去拿,每完成一件都要让客户拿一次,比较耗费客户的时间
  3. DMA 方式:客户雇了一个秘书,给秘书规定好在什么地方拿,裁缝做完了,就给秘书打电话,秘书到指定的地方拿,每拿到 100 件衣服就像客户汇报一次,当客户跟多个裁缝订了货,一个秘书只对一个裁缝的货负责,大大节省了客户的时间
  4. 通道方式:赋予了秘书更大的自主权,秘书可以决定把衣服放在哪,同时也可以决定每 100 件还是每 1000 件向客户报告一次,一个秘书可以对多个裁缝负责

0x02 子系统层次结构

  • 用户层 IO 软件:大部分运行在操作系统内部,小部分在用户层
  • 设备独立性软件:用于实现用户程序与设备驱动器的统一接口,设备命令以及设备保护、设备的分配与释放
  • 设备驱动程序:与硬件直接相关
  • 中断处理程序:保存被中断进程的 CPU 环境,处理完并回复被中断进程的现场
  • 硬件了呗

0x02 I/O 核心子系统

主要服务有:

  • I/O 调度:确定一个好的顺序来执行 I/O 请求,因为应用程序给出的系统调用顺序不一定是最优的
  • 缓冲与高速缓存
    • 磁盘高速缓存:逻辑上属于磁盘,物理上为驻留在内存中的磁盘块,高速缓存中有的磁盘中必然有
    • 缓冲区:缓解 CPU 和 I/O 设备之间速度不匹配的矛盾,提高 CPU 与 I/O 设备的并行性,减少中断频率,高速设备与低速设备的通信都要经过缓冲区,
  • 设备分配与回收:依据用户的 I/O 请求来分配所需设备
    • 独占式使用设备
    • 分时式使用设备
    • 使用 SPOOLing 方式使用的外部设备,就是假脱机技术,实质上为对 I/O 操作的批处理,以空间换时间
  • 假脱机
  • 设备保护和差错处理