4.1 I/O 控制方式的演进(对比表必背)
从"CPU 干等"到"专门的处理机干活",记住每一步解决了什么问题。
| 方式 | 怎么工作 | CPU 参与程度 | 评价 |
|---|---|---|---|
| 程序查询(轮询) | CPU 反复读设备状态寄存器,等它就绪 | 全程空转等待 | 最简单,效率最低 |
| 中断驱动 | 设备完成后发中断通知 CPU | 传输时 CPU 仍需参与(每次一个单位) | CPU 可与 I/O 并行;频繁传输时中断次数太多 |
| DMA(直接存储器访问) | DMA 控制器直接在内存与设备间搬整块数据 | 只在开始和结束时参与 | 成块传输、效率高;每块传完仍要一次中断 |
| 通道 | 专用 I/O 处理机执行通道程序,管理多台设备 | 几乎不参与 | 最强,大型机方案 |
一句话记忆
- 查询=干等,中断=通知,DMA=整块搬,通道=专人管。
易错
- DMA 传输的是数据块,中断驱动方式传输的单位小(按字/字节),两者别混。
- DMA 方式下每传送完一块仍需中断通知 CPU 处理,不是完全不需要 CPU。
课堂练习(2 题)
- 哪种 I/O 控制方式对 CPU 占用最少(大型机常用)? 答:通道方式(专用 I/O 处理机执行通道程序)。
- 程序查询方式的最大缺点是什么? 答:CPU 需要持续轮询设备状态、空转等待,CPU 与 I/O 无法并行,效率极低。
4.2 缓冲技术
"为什么要缓冲"是概念题,答案就一句:速度不匹配。
- 缓冲区的目的——缓和工作(CPU/内存)与外设(慢)之间的速度差异,减少中断次数、提高并行度。
- 单缓冲——数据先填入缓冲区,再从中取走处理;填充与取走只能交替进行。
- 双缓冲——两个缓冲区轮流用:缓冲区 A 在装新数据时,CPU 处理缓冲区 B 的旧数据,实现真正并行。
- 更多级还有缓冲池(多个缓冲区统一管理)。
课堂练习(2 题)
- 设置缓冲区的主要目的是什么? 答:缓和 CPU 与外设之间的速度差异,使两者并行工作。
- 双缓冲相比单缓冲的优势是什么? 答:输入与处理可以同时进行(一个缓冲装、一个缓冲用),不必交替等待。
4.3 磁盘调度:算磁头移动道数 ★
给"当前磁头位置 + 请求队列",算某个算法的总移动量。套路题,多算几遍就熟。
| 算法 | 策略 | 注意点 |
|---|---|---|
| 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 题)
- 磁头在 50,请求:80, 20。FCFS 与 SSTF 的总移动道数各是多少? 答:FCFS:50→80(30)→20(60) 共 90;SSTF:50→20(30)→80(60) 也是 90(只有两个请求时相同)。
- 为什么 SCAN 被称为电梯算法? 答:像电梯一样保持一个运行方向、顺路服务请求,到端点才折返,避免来回横跳。
4.4 SPOOLing:用软件把独占设备变共享
经典例子就是"打印机队列",理解例子比背定义容易。
SPOOLing(假脱机技术):用磁盘上的缓冲区(输入井/输出井)加上后台进程, 把一台独占设备虚拟成"可共享"的样子。
例子:多个用户同时打印 用户程序"打印"时,实际只是把内容写入磁盘的输出井 → 立即返回(感觉打印机秒响应) 后台守护进程按队列顺序,一份一份真正送到打印机 → 独占的打印机被"假脱机"成了共享设备
记住三点
- 关键词:输入井/输出井(磁盘)+ 后台进程。
- 本质:把"独占设备"虚拟为"共享设备",提高设备利用率。
- 它同时是虚拟设备技术的代表(另一种是虚拟内存)。
课堂练习(2 题)
- SPOOLing 技术把什么变成了什么? 答:把独占设备(如打印机)虚拟成可共享的设备。
- SPOOLing 里数据实际先存在哪里? 答:磁盘上的输入井/输出井。