操作系统 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 软件层次结构
从上到下依次为:
- 用户层 I/O 软件:库函数(如
printf,scanf),系统调用接口。 - 设备独立性软件 (Device Independent Software):
- 执行所有设备公有的操作。
- 逻辑设备名到物理设备名的映射 (LUT)。
- 设备保护。
- 缓冲管理。
- 差错处理。
- 设备驱动程序 (Device Driver):
- 与硬件直接相关,每类设备对应一个驱动。
- 将逻辑命令转换为物理操作(设置寄存器)。
- 中断处理程序:
- 处理 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:是实现虚拟设备的关键技术,极大提高了独占设备的利用率。