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