操作系统 · 第 4 章

第 4 章 设备管理

I/O 控制方式四代对比(查询/中断/DMA/通道);缓冲技术;磁盘调度四算法与移动量计算(完整例题);SPOOLing 假脱机。

4.1 I/O 控制方式的演进(对比表必背)

中断处理流程图
图 4-2 中断处理流程:请求 → CPU 响应 → 保存现场 → 执行 ISR → 恢复 → 返回断点

从"CPU 干等"到"专门的处理机干活",记住每一步解决了什么问题。

方式怎么工作CPU 参与程度评价
程序查询(轮询)CPU 反复读设备状态寄存器,等它就绪全程空转等待最简单,效率最低
中断驱动设备完成后发中断通知 CPU传输时 CPU 仍需参与(每次一个单位)CPU 可与 I/O 并行;频繁传输时中断次数太多
DMA(直接存储器访问)DMA 控制器直接在内存与设备间搬整块数据只在开始和结束时参与成块传输、效率高;每块传完仍要一次中断
通道专用 I/O 处理机执行通道程序,管理多台设备几乎不参与最强,大型机方案
一句话记忆
  • 查询=干等,中断=通知,DMA=整块搬,通道=专人管。
易错
  • DMA 传输的是数据块,中断驱动方式传输的单位小(按字/字节),两者别混。
  • DMA 方式下每传送完一块仍需中断通知 CPU 处理,不是完全不需要 CPU。
课堂练习(2 题)
  1. 哪种 I/O 控制方式对 CPU 占用最少(大型机常用)? 答:通道方式(专用 I/O 处理机执行通道程序)。
  2. 程序查询方式的最大缺点是什么? 答:CPU 需要持续轮询设备状态、空转等待,CPU 与 I/O 无法并行,效率极低。

4.2 缓冲技术

"为什么要缓冲"是概念题,答案就一句:速度不匹配。

  • 缓冲区的目的——缓和工作(CPU/内存)与外设(慢)之间的速度差异,减少中断次数、提高并行度。
  • 单缓冲——数据先填入缓冲区,再从中取走处理;填充与取走只能交替进行。
  • 双缓冲——两个缓冲区轮流用:缓冲区 A 在装新数据时,CPU 处理缓冲区 B 的旧数据,实现真正并行。
  • 更多级还有缓冲池(多个缓冲区统一管理)。
课堂练习(2 题)
  1. 设置缓冲区的主要目的是什么? 答:缓和 CPU 与外设之间的速度差异,使两者并行工作。
  2. 双缓冲相比单缓冲的优势是什么? 答:输入与处理可以同时进行(一个缓冲装、一个缓冲用),不必交替等待。

4.3 磁盘调度:算磁头移动道数 ★

磁盘调度算法磁头移动轨迹对比
图 4-1 同一请求队列下 FCFS 与 SSTF 的磁头轨迹对比(移动总量差一半)

给"当前磁头位置 + 请求队列",算某个算法的总移动量。套路题,多算几遍就熟。

算法策略注意点
FCFS(先来先服务)按请求到达顺序依次服务公平,但来回跳远道,总移动最大
SSTF(最短寻道时间优先)每次选离当前磁头最近的请求总移动少;远处的请求可能饿死
SCAN(电梯算法)按一个方向扫过去服务沿途请求,到该方向尽头再折返像电梯:只顺路停,不来回横跳
C-SCAN(循环扫描)只单向服务;到头后快速回到另一端重新开始更均匀,避免中间磁道占便宜
例题:手把手算一遍

磁头当前在 100 道;请求队列:55, 58, 39, 18, 90, 160, 150, 38, 184。分别算 FCFS 与 SSTF 的总移动道数。

FCFS(按给定顺序依次跑):
  100→55(45)→58(3)→39(19)→18(21)→90(72)→160(70)→150(10)→38(112)→184(146)
  总移动 = 45+3+19+21+72+70+10+112+146 = 498 道

SSTF(每次找最近的):
  100 附近最近的请求是 90(10 道)
  100→90(10)→58(32)→55(3)→39(16)→38(1)→18(20)→150(132)→160(10)→184(24)
  总移动 = 10+32+3+16+1+20+132+10+24 = 248 道      ← 省了一半

SCAN(电梯,先向大号方向扫):
  100→150(50)→160(10)→184(24)(本方向请求服务完)→折返→90(94)→58(32)→55(3)
  →39(16)→38(1)→18(20)
  总移动 = 50+10+24+94+32+3+16+1+20 = 250 道
  (若按"走到磁盘端点 199 再折返"的约定,多走 199−184=15 道,共 265 道;
    不同教材约定略有差异,以题干说明为准)
易错
  • 算的是相邻两次服务之间的差值绝对值之和,别漏掉第一跳(从当前磁头位置出发)。
  • SSTF 每选一个"最近"都要重新比较剩余请求,手算时按顺序列出来最稳。
课堂练习(2 题)
  1. 磁头在 50,请求:80, 20。FCFS 与 SSTF 的总移动道数各是多少? 答:FCFS:50→80(30)→20(60) 共 90;SSTF:50→20(30)→80(60) 也是 90(只有两个请求时相同)。
  2. 为什么 SCAN 被称为电梯算法? 答:像电梯一样保持一个运行方向、顺路服务请求,到端点才折返,避免来回横跳。
磁盘访问时间的三个组成部分
图 4-3 磁盘访问时间 = 寻道 + 旋转延迟 + 传输,附完整数值例题

4.4 SPOOLing:用软件把独占设备变共享

经典例子就是"打印机队列",理解例子比背定义容易。

SPOOLing(假脱机技术):用磁盘上的缓冲区(输入井/输出井)加上后台进程, 把一台独占设备虚拟成"可共享"的样子。

例子:多个用户同时打印
  用户程序"打印"时,实际只是把内容写入磁盘的输出井 → 立即返回(感觉打印机秒响应)
  后台守护进程按队列顺序,一份一份真正送到打印机
  → 独占的打印机被"假脱机"成了共享设备
记住三点
  • 关键词:输入井/输出井(磁盘)+ 后台进程。
  • 本质:把"独占设备"虚拟为"共享设备",提高设备利用率。
  • 它同时是虚拟设备技术的代表(另一种是虚拟内存)。
课堂练习(2 题)
  1. SPOOLing 技术把什么变成了什么? 答:把独占设备(如打印机)虚拟成可共享的设备。
  2. SPOOLing 里数据实际先存在哪里? 答:磁盘上的输入井/输出井。