Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

输入输出系统

复习

  • 控制器:控制器按时序发出控制信号,协调各部件
  • 中央处理器: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 适合大批量数据传输

参考资料

  1. Wikipedia(zh):输入/输出:计算机与外界交换数据的方式
  2. Wikipedia(zh):直接存储器访问:设备与主存之间直接搬运数据

思考题答案(仅供参考)

思考题 1

  通常适合中断。人的按键相对 CPU 极慢,而且到达时间完全不确定,让 CPU 持续查询会浪费大量周期。改成按键到来时再通知,CPU 平时就能继续执行其他工作。

思考题 2

  查询的答案是“CPU 自己盯着”;中断的答案是“设备盯着,好了再喊 CPU”;DMA 的答案是“专门的小搬运工盯着并搬,CPU 只在完工时签字”。盯的人越来越专职,CPU 也就越来越自由。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪