Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

输入输出系统

复习

  1. 第二章:了解了计算机由输入设备、存储器、运算器和输出设备组成
  2. 第四十章:学习了计算机总线如何连接各个部件

TL;DR

  • 输入输出(I/O)系统,负责计算机和外部世界交换数据
  • I/O 设备不能直接挂在总线上,要靠一个“翻译官“——I/O 接口
  • CPU 和设备打交道有三种方式:程序查询、中断、DMA
  • 现代计算机还能“即插即用“,自动识别新设备

正文

  到这里,CPU、内存、总线都齐了。可回头看看第二章那张四大部件图:输入和输出还空着。

  没有它们,计算机就是一个关起门来自娱自乐的盒子——它算得再快,也没法从外面拿数据,更没法把结果告诉任何人。这一章,我们把“手“和“口“接上。

设备有多快

  外部设备五花八门,速度天差地别:

  • 低速:键盘、鼠标、打印机、扫描仪,速率在 KB/s 级别
  • 中速:声卡、调制解调器,速率在 MB/s 级别
  • 高速:硬盘、固态硬盘、显卡、网卡,速率可达 GB/s 级别

  键盘敲一下,可能隔几百毫秒才来一个字符;而硬盘一秒钟能吞吐好几个 G。让 CPU 直接去伺候这些脾气迥异的家伙,显然不现实。

中间加一层:I/O 接口

  于是又用上了老办法——加一层

  I/O 设备不直接连总线,而是先接到一个 I/O 接口(也叫设备控制器)上,由它代表 CPU 和设备打交道。它的职责有三样:

  1. 数据缓冲:设备慢,CPU 快,接口先攒着,凑够再传,两边都不必迁就对方
  2. 格式转换:把设备的数据格式,翻译成计算机内部认得的格式,反之亦然
  3. 控制与状态管理:接收 CPU 的命令去驱动设备,同时把设备的忙闲状态汇报回去

  你可以把它想象成翻译官兼收发室:外面的人(设备)和里面的人(CPU)说的话不一样、快慢也不一样,全靠它居中转达。

CPU 怎么和设备打交道

  接口搭好了,接下来是“CPU 何时、以何种方式跟设备传数据“。历史上有三种典型做法:

  1. 程序查询:CPU 不停地问“好了没?好了没?“,设备就绪才传。
    • 简单,但 CPU 大把时间浪费在傻等上
  2. 中断:设备准备好了,主动去“叫“CPU。
    • CPU 不用傻等,利用率高——这正是第四十二章的主角
  3. DMA(直接存储器访问):让设备直接和内存搬数据,CPU 只负责开头和结尾。
    • 效率最高,适合硬盘这类大批量传输,代价是需要专门的硬件支持

  一条规律很清楚:从查询到中断再到 DMA,CPU 参与得越来越少,效率越来越高。 谁也不想让昂贵的 CPU 去做搬砖的活。

即插即用

  你大概有过这样的体验:USB 设备一插上,电脑“叮“一声,马上就能用了,根本不用手动配置。

  这叫即插即用。设备内部存着一小段“自我介绍“(设备描述符),里面写着它是什么、谁家产的、型号多少。插入时,系统读一读这段介绍,就知道该加载哪个驱动、分配哪些资源。

  再加上 USB、HDMI、蓝牙、Wi-Fi 这些标准化接口,以及热插拔、电源管理等智能机制,如今的 I/O 早就不是“插错了就冒烟“的年代了。

思考题

  为什么现代计算机可以自动识别新插入的 USB 设备?它是如何知道这个设备的类型和该用哪个驱动程序的?

小结

知识点

  • I/O 设备的速率分类
  • I/O 接口的三项职责
  • 三种 I/O 控制方式:程序查询、中断、DMA
  • 即插即用与标准化接口

参考资料

  1. Wikipedia(zh):输入输出:计算机输入输出的基本概念
  2. Wikipedia(zh):USB:USB 接口的详细说明
  3. Wikipedia(zh):直接内存访问:DMA 的基本原理

思考题答案(仅供参考)

  USB 设备内部有一小段存储区域,存着“设备描述符“。插入时,USB 控制器先读取这些描述符,就能知道设备的类型、厂商、产品 ID 等信息。操作系统再拿这些信息去匹配对应的驱动程序;如果本地没有,现代系统通常还会自动从网络下载。换句话说,设备在“自我介绍“,系统负责“对号入座“。

协议

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

封面图

设计师 | 南国微雪