Skip to content

操作系统 I/O 管理

I/O 管理是操作系统中最庞杂的部分,负责管理各种外部设备,向用户提供统一、易用的接口,并提高设备利用率和系统并行度。


一、I/O 设备与控制器

1. 设备分类

  • 按传输速率:低速(键盘鼠标)、中速(打印机)、高速(磁盘)。
  • 按信息交换单位
    • 块设备 (Block Device):以数据块为单位存储/传输,可寻址(如磁盘)。
    • 字符设备 (Character Device):以字符为单位,不可寻址(如键盘、串口)。
  • 按共享属性
    • 独占设备:一次只能分配给一个进程(如打印机)。
    • 共享设备:可同时分配给多个进程(如磁盘)。
    • 虚拟设备:通过 SPOOLing 技术将独占设备模拟为共享设备。

2. I/O 控制器 (Device Controller)

CPU 无法直接控制机械设备,需通过控制器。

  • 功能:接收 CPU 命令、地址识别、数据交换、设备状态报告。
  • 组成:寄存器(数据/状态/控制)、控制逻辑。

二、I/O 控制方式

随着技术发展,CPU 干预越来越少,I/O 效率越来越高。

1. 程序直接控制 (Polling)

  • CPU 循环轮询检查设备状态。
  • 缺点:CPU 忙等,利用率极低。

2. 中断驱动方式 (Interrupt-driven)

  • I/O 完成时发中断通知 CPU。
  • 优点:CPU 和 I/O 可并行。
  • 缺点:每个字/字节都要中断,频繁中断消耗 CPU。

3. DMA 方式 (Direct Memory Access)

  • 专门的 DMA 控制器负责数据传输。
  • 特点
    • 数据传输单位是
    • 数据直接在内存和设备间传输,不经过 CPU。
    • 仅在传送开始和结束时才需 CPU 干预。
  • 优点:进一步解放 CPU。

4. 通道控制方式 (Channel)

  • 专门的 I/O 处理器(通道),有自己的指令集。
  • 可以控制多台设备,执行复杂的 I/O 程序。

三、I/O 软件层次结构

从上到下依次为:

  1. 用户层 I/O 软件:库函数(如 printf, scanf),系统调用接口。
  2. 设备独立性软件 (Device Independent Software)
    • 执行所有设备公有的操作。
    • 逻辑设备名到物理设备名的映射 (LUT)。
    • 设备保护
    • 缓冲管理
    • 差错处理
  3. 设备驱动程序 (Device Driver)
    • 与硬件直接相关,每类设备对应一个驱动。
    • 将逻辑命令转换为物理操作(设置寄存器)。
  4. 中断处理程序
    • 处理 I/O 完成后的中断信号。

四、核心 I/O 技术

1. 缓冲技术 (Buffering)

目的:缓和 CPU 与 I/O 设备速度不匹配的矛盾,减少 CPU 中断频率。

  • 单缓冲:处理时间 $Max(C, T) + M$。
  • 双缓冲:处理时间 $Max(C, T)$。
  • 循环缓冲:多个缓冲区组成圆环。
  • 缓冲池 (Buffer Pool):系统公用的缓冲区集合,包含空缓冲队列、输入队列、输出队列。

2. 设备分配

  • 数据结构
    • SDT (系统设备表):整个系统一张。
    • DCT (设备控制表):每个设备一张。
    • COCT (控制器控制表)。
    • CHCT (通道控制表)。
  • 分配原则:安全性(避免死锁)、灵活性。

3. SPOOLing 技术 (假脱机)

Simultaneous Peripheral Operations On-Line (外部设备联机并行操作)。

  • 原理:利用磁盘空间模拟独占设备。
  • 组成
    • 输入井/输出井:磁盘上的区域。
    • 输入进程/输出进程:负责模拟外围机。
    • 输入缓冲区/输出缓冲区:内存中的区域。
  • 应用共享打印机。将打印请求挂到队列,由守护进程依次打印,用户进程无需等待。
  • 意义:将独占设备改造为共享设备(虚拟设备)。

总结

  • 控制方式进化:轮询 → 中断 → DMA → 通道。
  • 软件分层:独立性软件屏蔽了硬件差异,驱动程序负责具体硬件。
  • SPOOLing:是实现虚拟设备的关键技术,极大提高了独占设备的利用率。

上次更新于: