Appearance
通道方式
2026 大纲 六(三)I/O 方式只列程序查询、程序中断、DMA 三条,没有通道方式。留着这一节,是因为通道是 DMA 之上的一层,把这个层级关系搞清楚,反过来能把仍在纲内的 DMA 的能力边界看得更准。本节读一遍建立层级感即可,不必记忆细节。
DMA 卸掉了搬运,没卸掉组织
DMA 把数据搬运整个从 CPU 手里拿走了,但有一样东西没拿走:组织。每一次块传送的主存首址、传送个数、传送方向,仍然要 CPU 一个个写进 DMA 控制器的寄存器;这一块传完了接着传哪一台、传到哪里去,也还是 CPU 在安排。一台设备时这点开销不算什么,可大中型机上挂着几十上百台外设——每台配一个专用的 DMA 接口,硬件成本高、冲突仲裁逻辑膨胀,光是初始化就能吃掉大量 CPU 时间。
于是再往前推一层:把"组织"也交出去。做法是让那个部件不再只是执行一组固定参数,而是能自己从主存里取出一段程序来执行。这就是通道。
通道与 DMA 控制器的分界,只有这一条:能不能自己取指令执行。 DMAC 是定制硬件,行为完全由 CPU 预先写进 AR / WC / CR 的参数决定,做完一次就停下来等下一次设置,它不取指令;通道有自己的指令系统,CPU 只发一条启动命令,它就从主存取出一段通道程序执行,自主完成设备选择、数据传送、缓冲管理、错误处理,整批任务做完才发一次中断。能否自己取指令执行,就是"控制器"与"处理器"的分水岭,本篇后面的其余差别全是这一条的推论。
不过通道也不是一个完整的处理器,三条限制把它按在从属位置上:指令类型单一(基本只有与 I/O 有关的指令)、没有自己的内存(通道程序放在主存里,与 CPU 共享)、必须由 CPU 的 I/O 指令来启动、停止或改变工作状态,不能独立工作。
一、通道是什么
通道是负责管理 I/O 设备、实现主存与 I/O 设备之间交换信息的部件,可以视为一种具有特殊功能的处理器——按上面那条分界,它是从属于 CPU 的一个专用处理器。
二、通道指令与 I/O 指令不是一回事
| I/O 指令 | 通道指令 | |
|---|---|---|
| 属于谁的指令系统 | CPU 的指令系统的一部分 | 通道自身的指令 |
| 由谁译码执行 | CPU | 通道 |
| 存放在哪 | 用户 / 内核程序里,和普通指令混排 | 由管理程序放在主存中,由通道取出执行 |
| 干什么 | 在有通道的机器里,不实现数据传送;只负责启 / 停 I/O 设备、查询通道与设备状态 | 实现真正的 I/O 操作:读、写、磁带走带、磁盘找道等 |
| 又称 | — | 通道控制字(CCW) |
一条通道指令通常要指明:参与传送的数据在主存中的首地址、传送的字节数(或末地址)、所选设备的设备码、以及本次操作的命令码,位数因此比普通指令长得多。若干条通道指令组成一段通道程序,完成"某台外设与主存之间传送一批信息"这样一个完整任务。
三、层级关系:一层管一层
| 层级 | 执行什么 | 负责什么 |
|---|---|---|
| CPU | I/O 指令 | 发出"启动通道"命令,之后不再过问 |
| 通道 | 通道程序 | 选设备、组织数据传送、缓冲管理、错误处理 |
| 设备控制器 | 通道命令 | 直接驱动某台设备完成传送 |
| I/O 设备 | — | 物理读写 |
这是一棵扇出的树:一个通道可以连多个设备控制器,一个设备控制器又可以控制若干台同类型设备。CPU 面对的不再是几十个接口,而是几个通道。
扇出带来的好处是明显的,但它也埋着一个反直觉的问题:通道少反而会成为瓶颈。通道价格昂贵、数量有限,某台设备通往主存的路径上只要有一个通道或控制器已被占用,这台设备就启动不了——哪怕它自己是空闲的。解法不是简单地加通道,而是增加设备到主机之间的通路(多通路 I/O 系统),让同一台设备有多条路可走,既缓解瓶颈又提高可靠性。
四、三种通道及其适用场景
通道按信息交换方式分三种,差别可以用一个问题串起来:同一时刻,通道能不能同时为多台设备服务?
- 字节多路通道:按字节交叉方式工作,内含许多非分配型子通道(可达几十到数百个),每个子通道接一台设备,各子通道以时间片轮转共享主通道——A 传完一个字节让给 B,B 传完让给 C,轮完一圈再回到 A。送往主机的数据流因此是交织的:
- 选择通道(数组选择通道):按数组(成块)方式传送,可连接多台高速设备,但只含一个分配型子通道——一段时间内只能执行一道通道程序、只为一台设备服务,某台设备一旦占用就独占到底。
- 数组多路通道:既按数组方式传送(保住高速率),又含多个非分配型子通道(保住分时并行),某台设备传完一块就让出通道。
| 通道类型 | 传送粒度 | 同时服务多台设备 | 子通道类型 | 适用设备 |
|---|---|---|---|---|
| 字节多路 | 字节 | 是(字节交叉轮转) | 非分配型,数量多 | 大量低速设备 |
| 选择 | 数据块 | 否(独占) | 分配型,仅一个 | 少数高速设备 |
| 数组多路 | 数据块 | 是(按块交替) | 非分配型,多个 | 多台高、中速设备 |
一句话串起来:字节多路牺牲速率换并行,选择通道牺牲并行换速率,数组多路把粒度调到"块"这一档,两头都要。
两处代价值得点明。字节多路的问题在于:一台设备两次被服务之间,要等其余所有子通道轮完一圈——设备速率一高,等不及就会丢数据,所以它只能接低速设备。选择通道的问题在于:独占是彻底的,某台设备占住通道之后即使中途暂时无数据可传、通道在空转,别的设备也进不来,通道利用率因此很低。数组多路正是同时避开这两处:按块传送保住速率,块与块之间让出通道保住并行。
五、I/O 系统演进的四个阶段
| 阶段 | 形态 | CPU 从中脱身的部分 |
|---|---|---|
| 一 | 直接连接(早期,无接口) | — |
| 二 | 接口模块与 DMA | 中断使 CPU 与外设并行;DMA 让数据不经过 CPU |
| 三 | 通道结构 | 组织 I/O 的工作也交出去,CPU 只发启动命令 |
| 四 | I/O 处理机(外围处理机) | 基本独立于主机工作,还能做码制变换、格式处理、数据块检错纠错 |
每一步的方向都是同一个:降低 CPU 在 I/O 中的介入程度。这条轴的完整刻度见 I/O 方式对比。
考点速记
- DMA 卸掉了"搬运"、没卸掉"组织",这是通道出现的动因;通道 = 能执行通道程序的专用处理器,与 DMA 控制器的分界是能否自己取指令执行。
- 通道不是完整处理器(指令类型单一、无自己的内存、必须由 CPU 启动);I/O 指令属于 CPU(在有通道的机器里只负责启停与查状态),通道指令属于通道、又称 CCW,它才实现真正的数据传送;层级是 CPU → 通道 → 设备控制器 → 设备。
- 三种通道:字节多路(字节交叉轮转,接大量低速设备)/选择(成块但独占,利用率低,接少数高速设备)/数组多路(成块 + 按块交替,接多台高中速设备,最实用)。
这一节在真题里的位置:
2026 大纲的「六(三)I/O 方式」只列了程序查询、程序中断、DMA 三条,不含通道方式,因此本篇没有对应的真题、也不设考法清单——下方「真题练习」是空的,这不是漏挂标签。
那么这一篇要读到什么程度?只需要在别处读到"通道"这个词时,知道它是什么、站在哪一层:它是 DMA 之上的一层,与 DMA 控制器的唯一分界是能不能自己取指令执行;I/O 指令归 CPU、通道指令归通道,两者不是一回事。上面三条速记读一遍建立层级感即可。
复习优先级:不必投入。 三种通道的适用场景、子通道是分配型还是非分配型、通道程序怎么组织,这些细节不用记。这一篇真正的价值是反过来的——把通道这一层看清楚,才能准确判断 DMA 的能力边界:DMA 到底卸掉了什么、没卸掉什么。仍在纲内的那部分在 DMA 方式。
提示:本篇内容不在 2026 大纲范围内。若 9 月发布的新大纲有调整,以新大纲为准。
教材出处
- I/O 系统发展的四个阶段(直接连接、接口模块与 DMA、通道结构、I/O 处理机);大中型机中 DMA 方式的两个问题;通道的定义"可以视为一种具有特殊功能的处理器……有专用的通道指令,能独立地执行用通道指令所编写的输入输出程序,但不是一个完全独立的处理器":唐朔飞《计算机组成原理》第 3 版 §5.1,印刷页 p156~p157
- 通道指令与 I/O 指令的区别、通道指令又称通道控制字(CCW)、通道程序;一个通道可连多个设备控制器、一个控制器可连多台设备:同书 §5.1,印刷页 p158
相关知识
DMA 方式|程序查询方式与程序中断方式|I/O 方式对比|I/O 系统概述
真题练习
通道方式已不在现行大纲内,题库中没有对应题目。相关练习请转到仍在纲内的 DMA 方式 与 程序查询方式与程序中断方式。