Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

输入输出系统

复习

  • 总线让 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 国际许可协议进行许可。

封面图

设计师 | 南国微雪