输入输出系统
复习
- 第二章:了解了计算机由输入设备、存储器、运算器和输出设备组成
- 第四十章:学习了计算机总线如何连接各个部件
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 和设备打交道。它的职责有三样:
- 数据缓冲:设备慢,CPU 快,接口先攒着,凑够再传,两边都不必迁就对方
- 格式转换:把设备的数据格式,翻译成计算机内部认得的格式,反之亦然
- 控制与状态管理:接收 CPU 的命令去驱动设备,同时把设备的忙闲状态汇报回去
你可以把它想象成翻译官兼收发室:外面的人(设备)和里面的人(CPU)说的话不一样、快慢也不一样,全靠它居中转达。
CPU 怎么和设备打交道
接口搭好了,接下来是“CPU 何时、以何种方式跟设备传数据“。历史上有三种典型做法:
- 程序查询:CPU 不停地问“好了没?好了没?“,设备就绪才传。
- 简单,但 CPU 大把时间浪费在傻等上
- 中断:设备准备好了,主动去“叫“CPU。
- CPU 不用傻等,利用率高——这正是第四十二章的主角
- DMA(直接存储器访问):让设备直接和内存搬数据,CPU 只负责开头和结尾。
- 效率最高,适合硬盘这类大批量传输,代价是需要专门的硬件支持
一条规律很清楚:从查询到中断再到 DMA,CPU 参与得越来越少,效率越来越高。 谁也不想让昂贵的 CPU 去做搬砖的活。
即插即用
你大概有过这样的体验:USB 设备一插上,电脑“叮“一声,马上就能用了,根本不用手动配置。
这叫即插即用。设备内部存着一小段“自我介绍“(设备描述符),里面写着它是什么、谁家产的、型号多少。插入时,系统读一读这段介绍,就知道该加载哪个驱动、分配哪些资源。
再加上 USB、HDMI、蓝牙、Wi-Fi 这些标准化接口,以及热插拔、电源管理等智能机制,如今的 I/O 早就不是“插错了就冒烟“的年代了。
思考题
为什么现代计算机可以自动识别新插入的 USB 设备?它是如何知道这个设备的类型和该用哪个驱动程序的?
小结
知识点
- I/O 设备的速率分类
- I/O 接口的三项职责
- 三种 I/O 控制方式:程序查询、中断、DMA
- 即插即用与标准化接口
参考资料
- Wikipedia(zh):输入输出:计算机输入输出的基本概念
- Wikipedia(zh):USB:USB 接口的详细说明
- Wikipedia(zh):直接内存访问:DMA 的基本原理
思考题答案(仅供参考)
USB 设备内部有一小段存储区域,存着“设备描述符“。插入时,USB 控制器先读取这些描述符,就能知道设备的类型、厂商、产品 ID 等信息。操作系统再拿这些信息去匹配对应的驱动程序;如果本地没有,现代系统通常还会自动从网络下载。换句话说,设备在“自我介绍“,系统负责“对号入座“。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪