输入输出系统
复习
- 控制器:控制器按时序发出控制信号,协调各部件
- 中央处理器:CPU 由运算器、寄存器和控制器构成,循环取指译码执行
- 计算机总线:总线让 CPU、存储器与外设共享一组通信线路
TL;DR
- I/O 接口在总线与外设之间缓冲和翻译
- CPU 可以等待设备,也可以让设备准备好后通知自己
- 大量数据可以由 DMA 直接在设备与主存之间搬运
正文
到现在为止,机器一直在关起门来计算。它没有键盘可听,没有屏幕可说,也无法把自己算出的东西告诉外面的世界。前面留下的输入与输出,终于轮到我们补上。
先加一个翻译者
CPU 的节奏很快,键盘可能几百毫秒才来一个按键;而硬盘一次又会送来一大块数据。让 CPU 亲自去适应每一种设备,会把控制器做得又乱又重。
所以在设备与总线之间,先加一位翻译者——I/O 接口。它负责:
- 暂存数据,缓和两边的速度差
- 把设备信号翻译成总线上的统一格式
- 保存设备当前是忙、就绪还是出错
有了接口,CPU 只需和接口打交道,不必关心键盘下面的按键究竟是怎样弹回来的。又是“加一层”:在计算机里,没有什么问题是加一层解决不了的。
怎么知道设备准备好了
最简单粗暴的办法是查询:CPU 反复读取状态,“好了吗?好了吗?”设备一就绪,再传数据。它容易实现,却把 CPU 的时间大量浪费在空等上。
更自然的办法,是让设备准备好后主动通知 CPU——这就是中断(interrupt)。CPU 可以先去忙别的事,听到通知再回来处理。
如果硬盘要搬一大批数据,连每个字节都让 CPU 转一次手也很浪费。于是有了 DMA(直接存储器访问):DMA 控制器直接在设备与主存之间搬运,CPU 只负责告诉它从哪里搬、搬多少,并在完成时收到通知。
从查询,到中断,再到 DMA,CPU 亲手参与搬运的程度越来越低。这背后是一条清晰的主线:把 CPU 从繁琐的等待和搬运中解放出来,让它专注在真正需要它的计算上。
不过,“设备突然通知 CPU”意味着要打断正在运行的程序。下一章,我们就来看看机器怎样暂时离开一会儿,又如何准确地回到原处。
思考题 1
键盘更适合让 CPU 持续查询,还是在按键到来时发出中断?为什么?
思考题 2
查询、中断、DMA 三者其实都在回答同一个问题:“这段时间谁来盯着设备?”它们各自的答案是什么?
小结
知识点
- I/O 接口负责缓冲、转换与状态管理
- 查询会让 CPU 主动等待
- 中断让设备主动通知 CPU
- DMA 适合大批量数据传输
参考资料
- Wikipedia(zh):输入/输出:计算机与外界交换数据的方式
- Wikipedia(zh):直接存储器访问:设备与主存之间直接搬运数据
思考题答案(仅供参考)
思考题 1
通常适合中断。人的按键相对 CPU 极慢,而且到达时间完全不确定,让 CPU 持续查询会浪费大量周期。改成按键到来时再通知,CPU 平时就能继续执行其他工作。
思考题 2
查询的答案是“CPU 自己盯着”;中断的答案是“设备盯着,好了再喊 CPU”;DMA 的答案是“专门的小搬运工盯着并搬,CPU 只在完工时签字”。盯的人越来越专职,CPU 也就越来越自由。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪