Appearance
I/O系统概述
2026 大纲 六(二)I/O 接口(I/O 控制器)(接口的功能和基本结构、I/O 端口及其编址)与 六(三)I/O 方式(程序查询、程序中断、DMA)。本篇是这两条的入口。
CPU 从来没跟键盘说过一句话
写 scanf 的时候感觉像是程序在直接读键盘,但机器里根本不存在这样一条通路。键盘每秒送出几十个字节,SSD 每秒送出几个 GB;键盘送的是一串串行的扫描码,磁盘送的是并行的数据块;驱动磁盘要先寻道再找扇区,驱动打印机要送字符再发启动信号。速度、信号格式、控制协议三样全对不上,而系统总线只有一套时序与电气规范——它迁就不了几十种脾气各异的设备。
所以中间必须加一层:每类外设配一个专属部件,对上说总线的话,对下说设备的话。这个部件就是 I/O 接口,也叫设备控制器、适配器、接口卡。完整的通路是:
CPU 对话的对象永远是控制器,够不到设备本体。 而且它连整个控制器都看不全——它能碰的只有控制器内部那几个专门开放出来的寄存器,叫 I/O 端口。于是"设备 / 接口 / 端口"就成了必须分清的三个层次:设备是完成物理动作的本体(显示器、键盘、磁盘驱动器),接口是夹在设备与总线之间的控制部件(显卡、网卡、磁盘控制器),端口是接口内部可被 CPU 访问的那批寄存器。有一条现成的判据:名字里带"控制器""适配器""卡"的基本都在接口层,带"驱动器""显示器"这类设备名的在设备层。
装上接口之后,主机与外设物理上通了,但还剩一个问题没人管:设备什么时候准备好?CPU 怎么知道? 外设是异步的——按键何时被按下、磁头何时转到目标扇区,CPU 事先无从知晓。接口解决的是"能不能连",不解决"何时传"。 围绕后一个问题的四种答案(查询、中断、DMA、通道),就是本章余下几篇的全部内容,而它们其实是同一条轴上的四个刻度,轴量的是CPU 介入 I/O 的程度。
一、外设与主机之间的三重不匹配
三条不匹配都成立,就意味着外设不可能直接接到系统总线上。于是必须在中间加一层:每类外设配一个专属的部件,对上说总线的话,对下说设备的话。这个部件就是 I/O 接口,也叫设备控制器、I/O 控制器、适配器、接口卡。

图 8.3 外设、设备控制器和 CPU 及主存的互连
这张整机图把接口层的位置画得很清楚:CPU 经处理器总线与存储器总线连主存;外设则通过各自的控制器挂在 I/O 总线上——USB 控制器之于鼠标键盘、以太网卡之于网线、磁盘控制器之于硬盘。由此得到贯穿全章的一条通路:
二、CPU 看得见的只有端口
接口内部会有一批寄存器,其中允许 CPU 访问的那些统称 I/O 端口。三类端口不是随便定的——它们正好一一对应上面三重不匹配:
| 端口 | 存什么 | CPU 的操作 | 对应哪种不匹配 |
|---|---|---|---|
| 数据端口 | 待传输的数据 | 可读可写 | 速度(缓冲)、格式(串并转换) |
| 状态端口 | 设备状态:就绪 / 忙 / 出错 | 只读 | 速度(让 CPU 知道何时能动手) |
| 命令端口 | CPU 下发的控制命令 | 只写 | 协议(把"读扇区"这类动作翻译给设备) |
这张表还划出了一条边界:主存地址不属于任何一类端口。查询与中断方式下,数据是经 CPU 中转的——从数据端口读进寄存器,再由 CPU 写进主存,主存地址全程只在 CPU 内部周转,从不出现在接口上。只有 DMA 方式要让控制器自己去访存,才需要把主存起始地址交给它。所以"某接口的端口里存着主存地址"这句话,只在 DMA 控制器上成立。
端口怎么编号、CPU 用什么指令访问,见 I/O 接口与端口编址。顺带把两个容易被当成同义词的东西分开:总线是公共的传输通路,接口是挂在总线上的一个部件——一条 I/O 总线上挂着许多接口,各伺候一类设备。
三、接口解决了"能不能连",没解决"何时传"
装上接口以后,主机与外设物理上通了,但还剩一个问题没人管:设备什么时候准备好?CPU 怎么知道? 围绕这一个问题的不同答案,就长出了不同的 I/O 方式:
| 谁来解决"何时" | 做法 | 名称 | CPU 介入程度 |
|---|---|---|---|
| CPU 自己反复去问 | 循环读状态端口,直到"就绪"位置 1 | 程序查询方式 | 全程占用,等待期间什么别的都干不了 |
| 设备主动来报 | 设备就绪时发中断请求,CPU 在指令边界响应 | 程序中断方式 | 每传一个数据介入一次,等待期间去跑别的程序 |
| 连搬运也不劳驾 CPU | 控制器自己拿总线、自己访存,整块传完才报一次 | DMA 方式 | 每传一块介入两次(开头设参数、结尾收中断) |
| 连组织都交出去 | 专用处理器执行通道程序,自主完成一串 I/O 任务 | 通道方式(纲外) | 每发一次 I/O 指令介入一次 |
这不是四个并列的知识点,而是同一条轴上的四个刻度。横向的定量对比见 I/O 方式对比。
不过"越靠后越好"这句话要接住三条限定:
其一,省下的 CPU 时间是拿硬件换的。 中断方式要中断控制器与判优电路,DMA 要一整套能主控总线的控制器,通道要一个能取指执行的专用处理器。低速简单设备用查询方式不是落后,是成本与收益算下来更划算。
其二,"DMA 只适用于高速设备"是把典型场景说成了硬约束。 给慢速设备配 DMA 完全合法,只是收益不大、不值得。反过来的说法才是硬的:高速设备不能用中断方式——中断频率会高到 CPU 处理不过来,甚至丢数据。判一句话是不是错,先看它说的是"适合不适合"还是"能不能"。
其三,用了 DMA 仍然要用中断。 DMA 传完一整块之后,靠一次中断通知 CPU 做后处理。它把中断从"每传一个数据一次"降到"每传一块一次",不是把中断取消掉。
四、I/O 系统的软硬件构成
I/O 硬件:外部设备、I/O 接口(设备控制器)、I/O 总线。
I/O 软件:I/O 指令(属于 CPU 指令系统,且是特权指令)、中断服务程序、设备驱动程序、与设备无关的 I/O 管理软件。特权指令的完整清单见 异常和中断机制。
外部设备按数据流向分为输入设备(键盘、鼠标、扫描仪)、输出设备(显示器、打印机)和既能读又能写的外存储设备(磁盘、SSD、光盘)。按速率则从每秒几十字节到每秒几个 GB 不等——这个跨度本身就是 I/O 系统要设计成分层结构的原因:不可能用一套机制同时伺候好键盘和固态盘。
考点速记
- 外设与主机存在速度、信号格式、控制协议三重不匹配,因此必须经 I/O 接口才能接入总线;完整通路是 CPU 和主存 — I/O 总线 — I/O 接口 — 电缆 — 外设,CPU 永远不直接对话设备本体。
- 接口中可被 CPU 访问的寄存器称 I/O 端口,分数据/状态/命令三类,正好对应三重不匹配;主存地址不属于接口内容,只有 DMA 方式才把它交给控制器。
- 接口不解决"设备何时就绪",四种 I/O 方式是同一条轴上的刻度,轴量的是 CPU 介入 I/O 的程度;往后走省下的 CPU 时间是用硬件复杂度换的。
这一节在真题里被考过的形式:
- 给四个部件,问哪个不属于 I/O 接口(2021-20)。答磁盘驱动器——它是设备本体,其余三个(打印机适配器、网络控制器、可编程中断控制器)都在接口层。这道题考的正是本篇开篇那个三层划分,判据是现成的:名字里带"适配器""控制器"的在接口层,带"驱动器"的在设备层。⚠️ 可编程中断控制器容易被排除掉,因为"它不接哪台具体设备"——但接口层的定义是"介于设备与 I/O 总线之间的控制部件",中断控制器负责收集与判优各设备的中断请求,同样属于这一层。
- 问 I/O 指令实现的数据传送发生在哪两者之间(2017-21)。答通用寄存器与 I/O 端口之间。四个选项恰好把三个层次的各种错配组合都摆了出来:I/O 指令够不到设备本体(排除 A、B),也不能在两个端口之间直接搬(排除 C,两个操作数不能同时是外部单元)。答这道题只需要回到本篇那句话:CPU 看得见的只有端口,而 CPU 那一侧的落点是通用寄存器。
复习优先级:这一篇是全章的入口,本身只产出概念判断题(两道都是 2 分档)。它真正的价值是把设备 / 接口 / 端口三层和 CPU 介入程度这条轴立起来——后面四篇(接口与端口编址、查询与中断、方式对比、DMA)的所有考点都挂在这两样东西上。
易错:把磁盘驱动器、显示器这类设备本体当成 I/O 接口。带"驱动器""显示器"的在设备层。
易错:以为 I/O 指令能直接读写设备。它只能打到端口这一层。
易错:认为接口的端口里存着主存地址。查询与中断方式下主存地址只在 CPU 内部周转,只有 DMA 控制器才拿到它。
易错:把"DMA 适用于高速设备"读成"DMA 只能用于高速设备"。硬约束在另一边——高速设备不能用中断方式。
易错:以为用了 DMA 就不需要中断。传完一块仍要发一次中断请求做后处理。
教材出处
- 基于总线的互连结构、外设经设备控制器接入 I/O 总线(图 8.3):袁春风《计算机组成与系统结构》第 3 版 §8.3.2,印刷页 p280
- I/O 接口的功能、内部接口与外部接口、"CPU 和内存—I/O 总线—I/O 接口—电缆—外设"这条通路:同书 §8.3.3,印刷页 p283~p284
- I/O 指令只能在内核底层 I/O 软件中使用,是一种特权指令:同书 §8.3.4,印刷页 p286
相关知识
I/O 接口与端口编址|程序查询方式与程序中断方式|DMA 方式|I/O 方式对比|通道方式|总线概述