第 9 章 · 设备管理

设备管理屏蔽 I/O 设备物理差异,向上给统一接口,向下调度磁盘/外设。

9.1 中断

外设就绪时发中断打断 CPU,CPU 保存现场、执行中断处理程序、恢复现场。

  • 外中断(硬件):I/O 完成、时钟、按键等。
  • 内中断/异常:除零、缺页(第 6 章)、系统调用陷入(第 1 章,陷入本质是软中断)。

中断让 CPU 不必轮询外设,是并发与交互的基础。

一次中断:① 保存现场 → ② 按中断向量查处理程序 → ③ 执行 → ④ 恢复返回。中断向量表 = 中断号 → 处理程序入口。

9.2 DMA

DMA:不经 CPU,由 DMA 控制器直接在外设 ↔ 内存之间搬数据。

流程:CPU 设置 DMA 控制器(源/目的/长度)→ DMA 接管总线搬数据 → 完成发一次中断通知 CPU。

中断解决「通知」,DMA 解决「搬运」。PIO 时 CPU 逐字节搬;DMA 让 CPU 只发起 + 收尾。小数据用 PIO,大数据块(磁盘)用 DMA 才释放 CPU。

9.3 磁盘结构

磁盘 = 多个盘面,每面有磁道(同心圆),磁道分扇区(最小读写单位,512B/4KB),多盘面同半径磁道构成柱面。

访问时间 = 寻道时间(磁头移到磁道,最慢)+ 旋转延迟(转到位,平均半圈)+ 传输时间。优化重点是减少寻道。

9.4 磁盘调度算法

设磁头当前 50,请求队列 98, 183, 37, 122, 14, 124, 65, 67

  • FCFS:按请求顺序,总寻道 640。公平但差。
  • SSTF(最短寻道优先):每次去最近的请求。总寻道最短,远处可能饿死。
  • SCAN(电梯):朝一个方向扫到最远请求再折返。总寻道约 208,无饿死,两端磁道等待久。
  • C-SCAN(循环扫描):单向扫描,到头瞬间返回起点再扫,不折返服务。等待更均匀。
算法总寻道公平性特点
FCFS无优化
SSTF最小差(饿死)贪心最近
SCAN较小电梯来回
C-SCAN较小单向循环

(现代磁盘自带缓存/重排,OS 级调度被弱化,思想保留在 SSD FTL、磁盘 NCQ 里。)

9.5 设备驱动

设备驱动:内核与硬件之间的翻译层,把统一接口(read/write/ioctl)翻译成设备寄存器操作。Linux 下设备抽象为文件(/dev),字符 / 块 / 网络三类。

  • 缓冲(buffering):内存设缓冲区缓解速度差(CPU 快、设备慢)。
  • 假脱机(SPOOLing):把独占设备(打印机)虚拟成共享,作业排队依次输出。