这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

总线和输入输出系统

本章在选择题中考察,需要了解总线和 I/O 的相关概念,看到题目能够选出来即可。
# 总线

## 总线

- 总线的基本概念
- 总线的组成和性能指标
- 总线事务和定时

## I/O接口

- I/O接口的功能和基本结构
- I/O端口和编址

## I/O方式

- 程序查询方式
- 程序中断方式
- DMA方式

1 - 总线

🔥 高优先级
本节几个概念是选择题常考点:总线类型总线事务总线定时总线指标

总线概念

总线 是一组电子导线或信号线,它们允许不同的硬件设备(如 CPU内存输入/输出 设备等)之间进行数据传输和通信。总线是计算机内部和外部设备之间的信息传递通道。

系统总线CPUCentral Processing Unit主存储器Memory (DRAM)总线控制器Bus Controller/ ChipsetGPU显卡 / Video CardSSD / 存储外存 / StorageI/O 接口键盘 / 鼠标 / 打印机 / 网络数据总线 (Data Bus)地址总线 (Address Bus)控制总线 (Control Bus)

总线类型

总线可以按照不同的角度进行分类:

  • 功能,可分为数据总线、地址总线和控制总线;
  • 连接对象和用途,可分为核内总线、系统总线和通信总线;
  • 数据传送方式,可分为串行总线和并行总线;
  • 时序控制方式,可分为同步总线和异步总线。

这些分类标准彼此独立,同一条总线可以同时具有多种属性。例如,PCIe 按连接对象属于系统总线,按数据传送方式属于串行总线;某条系统总线也可能采用同步或异步的时序控制方式。因此,不能将“数据总线”“系统总线”“串行总线”“同步总线”等概念视为互斥的同级分类。

功能

系统总线 通常由 数据总线地址总线控制总线 三部分组成。也有些总线没有单独的地址线,而是采用 地址/数据复用 的方式,即地址线和数据线共用同一组物理线路。

  1. 数据总线(Data Bus):用于在计算机各部件之间 传输数据。通常由多条并行线路组成,每条线路传输一个数据位(bit)。
    • 数据总线的宽度通常与 机器字长存储字长 有关,常见为 8 位、16 位、32 位、64 位等。
  2. 地址总线(Address Bus):用于传输 内存地址I/O 设备地址,以确定数据的存储位置或目标设备。
    • 地址总线的宽度决定了系统能够寻址的地址空间大小,地址线越多,可访问的内存或设备越多。
  3. 控制总线(Control Bus):用于传输各种 控制信号状态信号,协调各硬件部件之间的数据传输。
    • 常见控制信号包括 读/写信号时钟信号中断信号复位信号 等。
注意

功能分类与总线架构的关系:

  • 单总线结构 中,数据总线、地址总线和控制总线共享同一条物理传输通道,通过不同的控制方式完成各自功能。
  • 多总线结构 中,不同类型的信息可能通过不同的物理总线传输,例如专门的数据总线、地址总线,或独立的 I/O 总线、存储总线等,从而提高系统性能。

连接对象

三类总线结构示意图展示核内总线、系统总线与通信总线三者的层级关系计算机系统系统总线连接各部件CPU寄存器ALU指令部件核内总线主存I/O接口系统总线远程系统通信总线又称外部总线
  1. 核内总线:在处理器核内部各元件之间连线的总线,可连接核内寄存器、ALU、指令部件等。
  2. 系统总线:连接 CPU、主存和 I/O 接口 等主要部件的总线,通常所说的总线就是指这类在系统主要模块之间互连的总线。下面介绍的也主要是这种 系统总线
  3. 通信总线:计算机系统之间,或计算机系统与其他系统(如远程通信设备、测试设备)之间进行通信的总线,又称 外部总线

数据传送方式

总线 的数据传输方式包含 串行并行 两种:

b1
b0
b2
b4
b3
b5
b6
b7
b0
b1
b2
b3
b4
b5
b6
b7
并行总线
串行总线
集中传输多位
逐位传输数据
  1. 串行总线:只含有一条双向数据线或两条单向数据线,数据按位分时传送。适合远距离通信,大多数 通信总线 属于 串行总线
  2. 并行总线:含有多条双向数据线,可实现多位同时传送;但相邻数据线之间会相互干扰,距离变长或频率提高后难以保持各位同步,因此更适合短距离传输。大多数 系统总线 属于 并行总线

试题中常常考查 哪些总线是串行总线,哪些总线是并行总线

这里核心把握一点:现代高速通信几乎都使用串行总线(PCIe、USB、SATA、DisplayPort),而并行总线主要用于内存、老式设备或非常短距离的高速通信。

常见的串行总线 如下表所示:

总线类型简介
USB(通用串行总线)广泛用于外设连接,如鼠标、键盘、U 盘。支持热插拔;本质是串行总线,不能理解为“同时传输 2 位数据”。
PCI Express(PCIe)高速内部总线,连接显卡、SSD 等,采用点对点串行通信。
SATA(串行 ATA)硬盘、SSD 与主板间通信,取代并行 ATA(PATA)。
Thunderbolt基于 PCIe 和 DisplayPort 的高速接口,可同时传输视频和数据。
DisplayPort、HDMI、DVI显示器接口,本质上都是高速串行通信。

常见的并行总线 如下表所示:

总线类型简介
PCI(老式)并行总线,早期主板与扩展卡连接标准,已被 PCIe 取代。
ISA(工业标准架构)更早期的并行总线,现已淘汰。
IDE / PATA(并行 ATA)老式硬盘接口,已被 SATA 取代。
内存总线(DDR 等)DRAM 模块仍通过多条并行数据线传输数据,例如 DDR4 数据总线宽度为 64 位。

时序控制方式

同步总线与异步总线时序对比左侧展示同步总线的统一时钟定时,右侧展示异步总线的四线握手协议,并附有关键特性说明总线时序控制方式同步总线CLKADDR地址DATA数据1周期统一时钟 · 并行传输 · 速度受最慢设备限制时钟偏移 → 总线不能过长适合存取时间相近的部件异步总线REQDATA数据有效ACKREQ↓ACK↓主→发送 REQ从→回应 ACK主→撤销 REQ从→撤销 ACK无公共时钟 · 四线握手 · 适配不同速度设备串行传输 → 无位偏斜 · 总线可更长灵活性高,但握手开销略大现代高速接口多采用此方式对比特性同步总线异步总线定时方式公共时钟握手信号传输方式并行(8/16/32/64位)串行为主总线长度受时钟偏移限制,较短无偏移问题,可更长速度上限最慢设备决定各设备按自身速度协商实现复杂度简单较复杂(握手协议)典型应用内存总线(早期)PCIe / USB / SATA
  1. 同步总线:采用统一的时钟信号进行定时,挂接在总线上的所有设备都从时钟线上获得定时信号。
    • 总线定时以 最慢设备 的访问时间为标准,因此适用于存取时间相近的多个部件之间通信。
    • 由于时钟偏移问题,同步总线长度不能过长,否则会降低传输效率。
    • 同步总线通常采用 并行传输,如 8 位、16 位、32 位或 64 位数据总线。
  2. 异步总线:各设备没有统一时钟,而是依靠各自内部定时,通过 握手信号 协调数据传输。
    • 当传输距离较长或速率较高时,同步并行总线容易因各位到达时间不同而产生时序偏差,因此现代高速通信更多采用 异步串行方式,既能提高传输速率,又不会受到多条并行线路之间同步问题的影响。
注意

总线的“同步/异步”与后文“总线定时”的关系:

这里的“同步总线 / 异步总线”是按 总线整体的时序特征 进行分类;后文 总线定时 一节介绍的是同一条总线内部 主从设备之间如何协调数据传输时刻 的具体机制(同步定时、异步定时),两者属于同一套思想在不同层次上的描述,应结合理解,而不要孤立记忆。

总线架构方式

总线 架构方式可以分成 单总线多总线 以及 分层结构 三种。

单总线结构

外部设备1
外部设备2
外部设备n
CPU
主存
I/O 接口
I/O 接口
I/O 接口
单总线结构
  • 单总线结构 中,所有处理器、主存储器和 I/O 设备 共用一条总线进行通信
  • 优点是结构简单、实现成本低,适用于设备数量少、通信量低的系统。
  • 缺点是所有设备必须轮流访问总线,存在通信冲突和带宽瓶颈,性能扩展性差。

多总线结构

磁盘
打印机
I/O 接口
I/O 接口
通道/IO 处理器
CPU
主存
多总线结构
系统总线
存储总线
I/O 总线
键盘
I/O 接口
DMA 总线
高速外设
高速外设
  • 多总线结构单总线 的基础上进行拓展,引入多条功能分化的总线,例如系统总线、I/O 总线、存储器总线等。
  • 常见做法是将 处理器与主存之间的数据传输 放在一条专用总线(如 CPU-主存总线),而 I/O 设备通过桥接芯片连接至另一条总线(如 I/O 总线)。
  • 这样可以显著减轻主总线负载,提高系统并发性和吞吐能力。

分层总线结构

现代计算机系统广泛采用 分层总线结构,其核心思想是在 多总线结构 的基础上进一步 细化总线的功能与等级,以更好适应不同设备对带宽和延迟的需求。

核心特点

  • 将总线按速率和用途分层,如高速、中速、低速总线;
  • 各层通过 桥接控制器(如 PCH)进行协调;
  • 高速设备尽量绕过中间桥接器,直连 CPU 提高性能。
分层总线架构图展示现代计算机分层总线架构,包括CPU、内存总线、PCIe总线和PCH低速总线三个层次CPUIMC · PCIe控制器 · PCH接口高速层内存总线(DDR4/5)由 IMC 控制,超低延迟内存(DIMM)PCIe 高速通道直连 CPU,吞吐密集型设备显卡 GPUNVMe SSDDMI 总线(CPU ↔ PCH)PCH(平台控制器集线器)集中管理低速设备,简化主板设计低速层USB 控制器SATA 接口音频编解码器板载网卡PCIe(经 PCH)键盘 / 鼠标 / U盘SATA SSD / HDD低速扩展卡直连 CPU 高速路径经 PCH 低速路径DMI 总线
  • 高速设备的连接方式
    • 内存总线 :使用 DDR4/DDR5 等内存通道,由集成在 CPU 内部的内存控制器(IMC)控制,实现低延迟高速访问;
    • 显卡 :通过 PCIe 高速通道,直接连接到 CPU 的 PCIe 控制器,适用于图形、大数据等吞吐密集型场景;
    • 高速存储 (如 NVMe SSD) :通过 PCIe/NVMe 通道连接,可直连 CPU 或走 PCH
  • 低速或通用设备的连接方式
    • 低速设备(如 USBSATA、音频、网卡等)大多连接至 平台控制器集线器PCH) 或 南桥芯片,再通过 DMI(Direct Media Interface)总线 与 CPU 通信;
    • 这些设备不要求极高带宽,通过桥接方式集中管理,可简化主板设计并降低成本。

总线事务

总线事务

总线事务(Bus Transaction)是一次完整的数据交换过程,也是总线工作的一个 基本单位。一次总线事务通常完成一次 读操作写操作

在一次总线事务中,会涉及两个角色:

  • 主设备(Master):主动发起总线访问、申请总线控制权,并负责发出 地址控制信号(如读/写信号)的设备。
  • 从设备(Slave):响应主设备发出的地址和控制信号,在被选中后完成数据的读取或写入。

主设备获得总线控制权后,会按照一定时序依次发出 地址控制信号,并完成 数据传输;从设备识别地址后,根据控制信号返回数据(读操作)或接收数据(写操作),一次总线事务随之结束。

总线事务(Bus Transaction)主设备 Master发起事务 · 发出地址/数据控制读写信号从设备 Slave识别地址 · 响应读写交换数据 · 发确认地址总线数据总线总线事务的五个阶段1请求Request主设备发出总线传输请求2仲裁Arbitration多设备竞争时按优先级裁决3寻址Addressing放出目标地址指定从设备4传输Transfer读/写数据交换发生5终止Termination确认完成撤销总线控制总线事务是总线操作的基本单位:主设备控制总线,从设备识别地址并完成数据交换仲裁阶段仅在多个设备同时竞争总线时需要;简单系统可省略一个总线事务可包含一次或多次(突发)数据传输

通常情况下:

  • CPU 执行访存时,CPU 是主设备,内存或 I/O 接口是从设备
  • DMA 控制器进行数据传输时,DMA 控制器成为主设备,CPU 暂时让出总线,而内存和 I/O 接口仍作为从设备参与数据交换。

总线周期

总线事务 从时间上看,对应的就是一个 总线周期总线周期(Bus Cycle)是一次总线事务在时间上的体现,即主设备通过总线与从设备完成一次数据传输所经历的时间。一个总线周期通常包含多个时钟周期,在许多同步总线中可划分为四个阶段(对应四个时钟周期 ):

  1. 请求/申请分配(Request) :若主设备尚未获得总线控制权,则需要申请总线;若多个设备同时竞争总线,还需经过 仲裁(Arbitration)决定总线控制权的归属。
  2. 寻址(Addressing) :主设备将目标地址放到地址总线上,以指定事务的目的地,如特定的内存地址或 I/O 设备。
  3. 传输(Transfer) :地址稳定后,主设备发出读命令或写命令,主、从设备按照总线时序完成数据交换。
  4. 结束/终止(Termination) :数据传输完成后,主设备撤销地址和控制信号,并释放总线控制权(若需要),本次总线周期结束。
注意

总线事务 强调的是一次数据交换过程总线周期 强调的是完成这次数据交换所经历的时间

突发总线传输事务

突发(Burst)总线传输事务 是指主设备(如 CPU 或 DMA 控制器)获得总线控制权后,在无需为每个数据单元单独进行地址仲裁或握手的情况下,连续传输多个数据单元(通常是字节或字)。

突发传输的本质是:一次寻址,多次数据传输。 主设备仅在开始时发送一次起始地址,后续数据通过地址自动递增(或固定地址)连续完成传输,从而减少地址和控制信号的开销,提高总线的有效数据传输率。

其主要优点包括:

  1. 减少地址/控制总线占用:仅在开始时发送一次地址和控制信号,后续数据连续传输,减少了总线控制开销。
  2. 提高有效数据传输率:减少了地址传送和握手等待时间,使总线更多时间用于实际的数据传输。
  3. 适用于块数据传输:如高速缓存行填充、内存块拷贝、DMA 数据搬迁等场景,突发传输尤其高效。
突发(Burst)总线传输事务❌ 普通传输方式(非突发)每次传输都需要重新发送地址,浪费总线带宽时钟周期:ADDR1DATA1ADDR2DATA2ADDR3DATA3ADDR4DATA4T1T2T3T4T5T6T7T8事务 ①事务 ②事务 ③事务 ④总耗时:8 个时钟周期每传输 1 个数据 = 1 个地址周期 + 1 个数据周期,总线利用率仅 50%✅ 突发传输方式(Burst)仅发送一次起始地址,后续地址自动递增时钟周期:ADDR1DATA1DATA2DATA3DATA4空闲T1T2T3T4T5地址自动递增(无需占用总线)一次完整的突发总线事务总耗时:5 个时钟周期(1 次地址 + 4 次连续数据)总线利用率:4/5 = 80%,相比普通方式节省 3 个地址周期突发长度越大,总线利用率越高,传输效率越好
注意

提高总线数据传输率的常见手段,真题常给出几种改进措施,要求判断哪些能够提高同步总线的数据传输率,哪些不能:

  • 增大总线宽度提高总线工作频率采用突发(猝发)传输:三者都能直接提高总线的数据传输率。
  • 地址线和数据线复用:本质是用同一组物理线在不同时刻分别传输地址和数据,目的是减少总线信号线数量、降低成本,而不是提高传输率;由于地址和数据不能同时传输,反而可能增加一次传输所需时间。
  • 分离式事务(Split Transaction):将一次总线事务拆分为"请求"和"应答"两个独立子事务,在等待从设备准备数据期间释放总线控制权,使其他设备能够继续使用总线,从而提高总线利用率,但并不直接提高单次数据传输率。

可以概括为:提高传输率 关注的是单位时间传输更多数据;提高利用率 关注的是减少总线空闲等待时间,两者并不等价。

总线定时

总线定时

根据 时钟周期 一节可知,计算机中的各个设备可能工作在不同的速度下,即使采用相同的时钟频率,也可能具有不同的数据准备时间。因此,在设备之间通过总线交换数据时,必须在时间上进行协调,以保证双方能够正确完成数据传输。

这种控制数据传输时序的过程称为 总线定时(Bus Timing),即规定一次总线周期中各个阶段(如申请、寻址、传输、结束)在时间上的先后关系和持续时间。

根据是否采用统一的时钟信号,总线定时可分为 同步定时异步定时 两种方式。

同步定时方式

同步定时方式 中,所有设备共用同一个 中央时钟源(通常由主时钟源或总线控制器提供)的时钟信号,并按照统一的时钟节拍完成各阶段操作。

每个总线周期的持续时间是固定的,主设备和从设备都必须在规定的时间内完成各自的操作,因此同步定时实现简单、控制方便。

T1
T2
T3
T4
总线传输周期
时钟
地址
读命令
数据
  • 上升沿:主设备发送地址;
  • 上升沿:主设备发送读命令;
  • 上升沿:从设备提供数据;
  • 上升沿:主设备撤销读命令,从设备撤销数据,本次总线周期结束。

同步定时适用于总线较短、设备速度相近的系统。若某个从设备速度较慢,无法在规定时间内准备好数据,则必须延长总线周期或插入等待周期(Wait State),从而降低整个总线的传输效率。

异步定时方式

异步定时方式 中,没有统一的中央时钟来规定数据传输节拍,而是由通信双方通过 握手信号 协调数据交换过程。

通常将通信双方称为 主设备从设备

  • 主设备发出 请求(Request) 信号,表示准备开始数据传输;
  • 从设备准备好数据或接收到数据后,返回 回答(Acknowledge) 信号;
  • 双方依据请求和回答信号完成一次数据交换,而无需依赖固定的时钟周期。
总线定时的异步方式:请求/回答握手信号时序图主设备与从设备通过请求(REQ)和回答(ACK)信号完成握手,无统一时钟节拍主设备Master从设备Slave请求 REQ回答 ACKREQACK1234t① 主设备发出请求(REQ)信号,表示准备传输数据② 从设备准备好数据后返回回答(ACK)信号③ 主设备收到ACK后撤销REQ信号④ 从设备检测到REQ撤销后撤销ACK,一次交换完成

由于数据传输速度完全取决于双方的响应速度,因此异步定时能够适应速度差异较大的设备,但控制逻辑相对更加复杂。

根据请求信号和回答信号的撤销方式,异步定时可分为三种:

  • 不互锁:主设备发送请求后保持一段固定时间,然后自动撤销,不等待从设备确认;从设备也默认请求已经送达。
  • 半互锁:主设备收到从设备的回答后才撤销请求;从设备发送回答一段固定时间后自动撤销。
  • 全互锁:在半互锁基础上,从设备只有在确认主设备已经撤销请求后,才撤销回答,实现双方互相确认,可靠性最高。
不互锁
半互锁
全互锁
主设备
从设备

在实际计算机系统中,同步定时和异步定时各有适用场景。下表总结了两种总线定时方式的主要区别:

同步定时异步定时
控制依据统一时钟信号REQ/ACK 握手信号
节拍固定(由时钟决定)不固定(由握手完成情况决定)
优点控制简单、实现方便能适应速度差异较大的设备
缺点速度受限于最慢设备(除非插入等待周期)控制逻辑复杂

同步看时钟,异步看握手。

总线指标

总线指标
总线通信指标图解① 时钟频率(Clock Frequency)时钟信号(100MHz → 周期 T = 10ns)T = 10 ns每个脉冲上升 / 下降 = 1 个时钟周期时钟频率 = 1 / T (单位:Hz)② 总线传输周期(Bus Transfer Cycle)一次完整数据传输 = 多个时钟周期(示例:N = 4)申请寻址传输数据结束TTTT总线传输周期 = N × T(N = 4)包含四个阶段:🔹 申请 — 设备请求总线使用权🔹 寻址 — 指定目标地址🔹 传输 — 实际数据传送🔹 结束 — 释放总线③ 总线工作频率(Bus Operating Frequency)SDR(单倍数据率)每周期 1 次传输 → 工作频率 = 时钟频率DDR(双倍数据率)上升沿 + 下降沿各 1 次→ 工作频率 = 2 × 时钟频率QDR(四倍数据率)每周期传 4 次→ 工作频率 = 4 × 时钟频率上升沿采样下降沿采样通用公式:工作频率 = 时钟频率 / N (N = 总线传输周期所含时钟周期数)
时钟频率

时钟频率 指总线所依赖的时钟信号的频率。它表示的是“时钟脉冲”产生的快慢。

时钟频率 单位 为 Hz,常见如 100MHz、133MHz 等。

总线传输周期

总线传输周期 即上面 总线事务与总线周期 一节中的总线周期,指一次完成总线数据传输所需的时间,包括申请、寻址、传输和结束阶段。

一个完整的传输周期可能需要 多个时钟周期。

总线工作频率

工作频率 指总线 实际传输数据 的频率。

一般来说,工作频率与时钟频率相同,但有些总线为了提高带宽,会采用 倍频/分频 机制:

  • SDR(单倍数据率):每个时钟周期只在一个边沿传输数据,工作频率 = 时钟频率。
  • DDR(双倍数据率):在上升沿和下降沿各传输一次,工作频率 = 2 × 时钟频率。
  • QDR(四倍数据率):一个周期传四次,工作频率 = 4 × 时钟频率。

更加泛化地说,若总线传输周期 = N 个时钟周期,则总线的工作频率 = 时钟频率 / N。

总线宽度 & 总线带宽 图解① 总线宽度(Bus Width)总线上能同时传输的数据位数 = 数据线的根数8 位总线(8 根数据线)101100108 根 → 每次传 1 字节32 位总线(32 根数据线)32 根 → 每次传 4 字节(位宽越宽,单次传输越多)位宽决定"并行通道数"8 位 → 1 字节 / 次16 位 → 2 字节 / 次32 位 → 4 字节 / 次64 位 → 8 字节 / 次② 总线带宽(Bus Bandwidth)单位时间内总线能传输的最大数据量(MB/s 或 GB/s)带宽 = (总线宽度 / 8)× 工作频率单位:(bits / 8) × Hz = Bytes/s → 换算为 MB/s示例 A宽度 = 32 位工作频率 = 100 MHz= (32/8) × 100M= 400 MB/s示例 B(DDR)宽度 = 64 位工作频率 = 2 × 100 MHz= (64/8) × 200M= 1600 MB/s示例 C(宽度翻倍)宽度 = 64 位工作频率 = 100 MHz= (64/8) × 100M= 800 MB/s频率×2位宽×2
总线宽度

总线宽度 也叫做总线位宽,是总线上 能同时传输的数据位数,通常指的是数据总线的根数,如 32 根称为 32 位总线。

总线带宽

总线带宽 指单位时间内总线能传输的最大数据量,通常用 MB/s、GB/s 表示,计算公式为:

其中 总线宽度 通常以 bit 为单位,代入带宽公式前要除以 8 换算成 Byte;工作频率 指实际完成数据传输的频率,不一定等于时钟频率。

注意

总线指标计算题的统一思路

  1. 先判断题目问的是 带宽/最大传输率,还是 传输一个数据块所需时间
  2. 若问带宽,用:

例如 DDR 在时钟上升沿和下降沿都传输数据,每个时钟周期传输次数为 2;三通道内存还要再乘以 3。

  1. 若问一次块传输时间,要区分 突发传输非突发传输(定义见 突发总线传输事务):
    • 突发传输 :通常只在开始时传一次地址,后续连续传输多个数据单元,时间按“地址/准备开销 + 连续数据传输周期数”计算。
    • 非突发传输 :每传输一个数据单元都要重新经历地址、准备和数据传输过程,不能只按数据总量除以带宽。
  2. 若题目给出“总线传输周期 = N 个时钟周期”,则工作频率是时钟频率除以 N;若题目给出“每周期传输 M 次”,则工作频率是时钟频率乘以 M。不要把 时钟频率工作频率总线传输周期 混成同一个量。

常见总线标准

需要熟练掌握一些会考察的 总线标准 的名称:PCISATAISAIDEUSB,并且能够和其他计算机领域的专业名词区分开来:

  1. PCIPCI 总线 是一种用于连接内部扩展卡(如显卡、网卡、声卡等)到主板的标准。PCI 总线 存在多个版本,包括 PCIPCI-XPCI ExpressPCIe),它们在带宽、速度和适用范围上有所不同。
  2. SATASATA 是一种用于连接存储设备(如硬盘驱动器和光盘驱动器)到计算机的总线标准。它广泛应用于个人电脑和服务器中。
  3. ISA/EISAISA(工业标准架构)是 16 位体系结构,只能支持 16 位的 I/O 设备;EISA 是其 32 位扩展版本。两者都是已经被淘汰的插槽接口。
  4. IDEIDE 是早期计算机中用于连接硬盘驱动器和光盘驱动器的 总线 标准,现在已经被 SATA 所取代。
  5. USBUSB 是一种通用的总线标准,用于连接各种外部设备(如键盘、鼠标、打印机、存储设备等)到计算机。USB 有多个版本,包括 USB 1.0USB 2.0USB 3.0USB 3.1USB 3.2,它们在传输速度和功能上有所区别。USB 也是目前 外部设备接入 I/O 控制器 最主流的通用总线标准,而 PCI/AGP/PCIe 主要用于内部扩展卡或显卡这类板级设备,不用来连接外部设备。
注意

总线标准 vs 干扰项 :真题常把 ISA、EISA、PCI、PCI-Express 这类真实存在的总线标准,和 CRT(显示器件)、CPI(每指令周期数)、RAM(存储器件)、MIPS(性能指标)等看似相似但完全不属于总线标准的名词放在一起考查缩写辨析,做题时先排除这些不是总线标准的干扰项。

PCI
Peripheral Component Interconnect

长条形插槽,通常为长方形,长度较长,内部有多个金属触点,呈平行排列,用于插入扩展卡。边缘有一缺口,用于固定卡的位置。

SATA
Serial Advanced Technology Attachment

较小的 L 形连接器,扁平且细长,端口一侧有明显的 L 形弯角,内部有几根细小金属针脚,用于连接存储设备(如硬盘驱动器和光盘驱动器)到计算机。

USB
Universal Serial Bus

矩形接口,较为紧凑,内部有金属触点,常见为USB-A的扁平长方形设计,端口内部有塑料隔板和触点,用于连接各种外设如鼠标、键盘或U盘。

总线、协议、接口的区别

这三个概念是经常被混淆的概念,这里还是多提一嘴。简单来说,接口 是硬件插入的位置,协议 是软件层面用于通信的规则,总线 是硬件之间的数据通路。下表给出一些常见例子来说明:

实际例子插槽/接口协议总线
SATA SSDSATA 接口AHCI 协议SATA 总线
M.2 SATA SSDM.2 插槽AHCI 协议SATA 总线
M.2 NVMe SSDM.2 插槽NVMe 协议PCIe 总线
PCIe 显卡PCIe 插槽PCIe 协议PCIe 总线
USB U盘USB-A 接口USB 协议(2.0/3.0/3.1 等)USB 总线

需要注意的是,有些名词(比如 SATAPCIeUSB)是 混合性术语,既可以是 总线,也代表了协议和接口;有些名词(比如 M.2) 仅仅是接口;有些名词(比如 NVMe)仅仅是协议。

2 - I/O 系统

🔥 高优先级

选择题高频考点,主要两点:1. IO 接口和端口。2. 几种 IO 方式的细节和区别

此外,在解答题中偶尔也会结合总线指标考查一些计算过程,所以需要深入了解几种 IO 方式的细节。

输入/输出系统

以主机为中心 来看,将信息从外部设备传送到 主机 的过程称为 输入;将信息从 主机 传送到外部设备的过程称为 输出

简单架构

让我们首先来看一个早期简易 I/O 系统的架构(一般考查的也就是这种架构):

CPU
设备控制器
(I/O 接口)
外设
(如键盘/打印机)
控制 / 地址 / 数据
控制 / 地址 / 数据线

在这个架构中,各部分的基本功能如下:

  • CPU 是整个计算机系统的控制和运算核心,它负责:发出控制命令(如读/写指令)以驱动外设;通过 I/O 总线 访问设备控制器,进行地址寻址、数据传输和状态监测;与 内存 协同,完成数据的读取、处理与存储
  • 外设 是计算机与外部世界交互的工具,例如键盘、打印机和磁盘等。它们接收来自 CPU 的输出(如打印任务),也能将物理信号(如按键动作)转换为数字信号传递给 CPU。
  • I/O 接口 是连接 主机外设 之间信息传输的桥梁,负责协调两者之间的同步、速度匹配和数据格式转换等问题。它在结构上包含两个部分:
    • 主机侧接口:作为 内部接口,通过系统总线与 CPU主存(内存)连接;
      • CPU ↔ 设备控制器:通过系统内部总线(如 PCI、PCIe)进行连接
    • 外设侧接口:作为 外部接口,通过 USB、串口、并口等电缆与具体 外设 连接。
      • 设备控制器 ↔ 外设:通过各种外部接口标准(如 USB、SATA、HDMI、VGA 等)进行连接

通过 I/O 接口,系统在 CPU内存外设 之间建立了一条高效的信息传输通路。这个通路大致如下:

CPU发出指令 / 处理数据内存存放程序与数据主机 (Host)I/O 总线地址线 · 数据线 · 控制线I/O 接口设备控制器控制逻辑 · 寄存器接口插座物理连接端口接口电缆USB · SATA · HDMI · VGA ...外设键盘鼠标显示器磁盘打印机主机侧系统总线桥接层外部线缆外设侧
补充

I/O 接口 和 设备控制器 的关系

设备控制器更强调控制逻辑与功能;I/O 接口更强调连接位置与通信角色。两者其实并不是严格等同,但在很多场景下它们是同一个物理实体的不同视角。可以将 I/O 接口视为设备控制器的一部分。

现代架构

现代 I/O 硬件系统的架构更加复杂,这节不会直接考查,了解即可:

  • 核心 / 缓存
  • IMC(内存控制器)
  • PCIe 控制器
  • DMA 控制器等
PCH / 芯片组
(南桥)
高速互联(如 DMI)
SATA 控制器
USB 控制器
硬盘 / SSD
鼠标 / 键盘 / U盘等
CPU (SoC)
主存(DDR4/DDR5)
内存总线
NVMe SSD
显卡
PCIe 总线
PCIe 总线

在现代系统中,CPU 本身集成了部分高速 I/O 控制逻辑(如 内存控制器PCIe 控制器DMI 接口等),而非核心的 I/O 控制被下放至 芯片组(PCH),也就是过去所谓的“南桥”。这将 CPU 从大量外围管理工作中解放出来,提升性能并降低功耗。

  • CPU 内部
    • 包含 内存控制器 和部分 PCIe 控制器
    • PCH 之间通过高速互连(如 DMI / Direct Media Interface)通信
  • PCH(Platform Controller Hub)
    • 管理几乎所有非高速设备(如 USB、SATA、音频、网卡等)
    • 是现代主板上的中心管理芯片,连接大量外设控制器

硬件和软件层

上文提到的是 I/O 系统的 硬件层次,除了硬件部分,I/O 系统还包括一系列的 软件组件,用以管理和调度外设资源、提供抽象接口、增强设备的可用性和通用性。主要的 软件层次 如下:

  • 用户层 I/O 软件
  • 设备独立性软件
  • 设备驱动程序
  • 中断处理程序

软硬件协同使得 I/O 操作既可高效运行,又具有高度的可移植性和扩展性。操作系统通过抽象和分层,使得新的设备只需添加驱动程序即可兼容原有的 I/O 系统,而不需要修改上层软件。

I/O 接口

结构

CPU
数据缓冲
寄存器
状态寄存器
控制寄存器
I/O 控制逻辑
地址译码器及
设备选择电路
外设
接口
控制
逻辑
地址线
控制线
数据线
地址信号
控制信号
设备
地址
交互数据
设备状态
控制命令
外设1
控制
状态
数据
外设
接口
控制
逻辑
外设1
控制
状态
数据
外设
接口
控制
逻辑
外设1
控制
状态
数据
I/O 接口
  • 数据缓冲:CPU 寄存器、主存 等主机部件的存取速度比外设快很多,因此为了速度匹配,可将数据提前存到 I/O 接口 中的数据缓冲区,用以中和高速系统组件和低速外部设备之间的速度差异
  • 数据格式转换:主机和外设的数据格式不同,I/O 接口 提供数据格式的相互转换,如串并转换、数模转换等
  • 控制和定时:为来自系统总线的控制信号和定时信号提供控制和定时逻辑,对内部资源及外设间动作的先后关系进行协调,并对数据通信过程进行控制
  • 错误或状态检测:提供可以保存各种状态信息的状态寄存器,CPU 通过读取这些寄存器来了解接口和外设的出错情况或状态
  • 与主机和设备通信:上述四个功能都必须通过主机与 I/O 接口之间和 I/O 接口 与 外设 之间的通信来完成

I/O 端口

I/O 端口(Input/Output Port)是指 I/O接口电路中CPU可直接访问的寄存器。CPU通过向这些端口发送命令、读取状态或交换数据,来实现对外部设备的间接控制。I/O端口是连接主机与外设的 软件可编程窗口,是操作系统和设备驱动程序进行I/O操作的核心对象。

I/O 端口
I/O 端口
CPU
I/O  总线
I/O 接口
I/O 控制器
I/O  设备
基本分类

根据寄存器所承担的功能不同,I/O端口通常分为以下三类:

  • 数据端口:用于存放CPU与外设之间待传输的实际数据,可读可写。
  • 状态端口:用于存放外设或接口自身的状态信息(如“忙/闲”“就绪/未就绪”),通常为只读。
  • 控制端口:用于接收CPU发出的控制命令(如“启动”“停止”“复位”),通常为只写。
CPU
设备
I/O 接口
控制寄存器
状态寄存器
输入寄存器
输出寄存器
编址方式

为了方便 CPU 对于 I/O 端口的访问,需要对各个端口进行编号,每个端口对应一个端口地址。

编址方式主要分为 统一编址独立编址 两种。

内存地址
(共960KB)
端口地址
(共64KB)
0
EFFFFH
F0000H
FFFFFH
内存地址
(共960KB)
端口地址
(共64KB)
0
FFFFH
0
FFFFFH
统一编址
独立编址
统一编址

统一编址也叫做 内存映射 I/O(Memory-Mapped I/O,MMIO),具备如下特点:

  • I/O 设备的寄存器 直接映射到内存地址空间,CPU 将设备寄存器当作普通内存来访问。
  • CPU 使用普通的内存访问指令(如 MOVLDRSTR 等)即可完成读写,不需要专门的 I/O 指令。
  • 优点是 统一寻址、编程方便、指令通用性强,但会占用一部分主存地址空间。

例如,假设某设备的控制寄存器映射到了地址 0xF0001000,CPU 可以像访问普通变量一样:

MOV EAX, [0xF0001000]    ; 读取设备寄存器
MOV [0xF0001000], EBX    ; 向设备寄存器写数据

实际上访问的是设备寄存器,而不是 RAM。

现代计算机(如 ARMRISC-V、以及 x86 中的大多数 PCIe 设备)几乎都采用 MMIO

独立编址

独立编址也叫做 端口映射 I/O(Port-Mapped I/O,PMIO),具备如下特点:

  • I/O 地址空间与内存地址空间 完全分离,CPU 维护一套独立的 I/O 地址。
  • CPU 不能使用普通内存读写指令,而必须使用专门的 INOUT 指令访问 I/O 端口。
  • 每个设备被分配一组 固定的端口号,例如传统 PC 中:
    • 键盘控制器:0x600x64
    • 串口 COM1:0x3F8
    • 并口 LPT1:0x378

例如,在 x86 中读取键盘控制器的数据:

IN  AL, 0x60     ; 从端口 0x60 读取一个字节

向串口发送一个字节:

OUT 0x3F8, AL    ; 将 AL 中的数据写入串口

由于 IN/OUT 指令只能访问 I/O 端口,因此普通的内存地址不能使用这两条指令进行访问。


下表给出了 MMIOPMIO 这两种方式的对比:

编址方式别名地址空间访问方式是否占用主存地址空间是否使用 IN/OUT
统一编址内存映射 I/O(MMIO)与内存共享普通内存读写指令(如 MOV✅ 是❌ 否
独立编址端口映射 I/O(PMIO)独立 I/O 地址空间专用 IN/OUT 指令❌ 否✅ 是
提示

对于考研来说,核心掌握两点即可:

  • MMIO:设备寄存器映射到内存地址空间,使用普通内存读写指令访问。
  • PMIO:设备拥有独立的 I/O 地址空间,只能使用 IN/OUT 等专用 I/O 指令访问。

现代处理器(如 ARM、RISC-V)几乎只支持 MMIO;而传统 x86 为了兼容早期 PC,至今仍同时支持 MMIOPMIO

I/O 方式

I/O 设备的速度通常远低于 CPU,如果 CPU 一直等待设备完成操作,将会造成大量时间浪费。

因此,操作系统和硬件提供了多种 I/O 方式,核心目的都是:

  • 协调 CPU 与 I/O 设备之间的速度差异;
  • 尽可能减少 CPU 等待 I/O 的时间,提高系统整体效率。

根据 CPU 在数据传输过程中参与程度 的不同,常见的 I/O 方式可分为四种:

I/O 方式CPU 是否负责数据搬运CPU 是否需要等待设备特点
程序查询方式✅ 不断轮询)实现最简单,但 CPU 利用率最低
程序中断方式设备完成后主动通知 CPU
DMA 方式❌(DMA 控制器负责)CPU 只负责初始化,效率高
通道方式❌(通道负责)大型计算机使用,可管理多个设备

下面分别介绍这四种 I/O 方式。

程序查询方式

程序查询方式不断轮询设备状态以判断其是否可以进行数据传输,数据从 设备 → CPU → 主存。

给 I/O 模块发出
读命令
读 I/O 模块的
状态
检查状态
从 I/O 模块中
读取字
往存储器中
写入字
完成?
CPU → I/O
I/O → CPU
错误条件
I/O → CPU
CPU → 存储器
下一条指令
未准备好
准备好
CPU 向控制器
发出命令
将 I/O 状态信息
读入 CPU 寄存器
设备可能出现错误
将数据寄存器的内容
读入 CPU 寄存器
将 CPU 寄存器中的内容
写到内存中

程序查询方式包含以下步骤:

  1. 查询:CPU 定期查询或检查 I/O 设备的状态寄存器,查看设备是否准备就绪。
  2. 判断:如果设备未就绪,CPU 会继续执行其他任务或持续轮询;如果设备就绪,则进行数据传输。
  3. 数据传输:CPU 直接与 I/O 设备交换数据,可以是读操作或写操作。
  4. 结束:数据传输完成后,CPU 继续执行其他任务,同时继续轮询 I/O 设备状态。

程序中断方式

在程序中断方式中,当 I/O 设备 准备好 进行数据传输时,会触发一个 中断 来通知 CPU。CPU 会暂停当前正在执行的任务,处理中断,然后恢复执行被中断的任务。

相比于轮询方式,CPU 在执行程序中断之前不需要一直检查 I/O 设备的状态,这提升了效率。

给 I/O 模块发出
读命令
读 I/O 模块的
状态
检查状态
从 I/O 模块中
读取字
往存储器中
写入字
完成?
CPU → I/O
I/O → CPU
错误条件
I/O → CPU
CPU → 存储器
下一条指令
准备好
CPU 向控制器
发出命令
将 I/O 状态信息
读入 CPU 寄存器
设备可能出现错误
将数据寄存器的内容
读入 CPU 寄存器
将 CPU 寄存器中的内容
写到内存中
中断
做其他事情

DMA 方式

DMA(Direct Memory Access,直接内存访问)是一种计算机系统的 I/O(输入/输出)方式,它允许 外部设备直接与主内存交换数据,而无需 CPU 在数据传输过程中逐次参与。

有了上面的 程序中断方式,虽然在 一定程度上 实现了 CPU 和外设的并行工作,但这种并行并不彻底。CPU 只是在外设准备数据期间可以继续执行其他程序,而当外设完成一次数据准备后,仍需响应中断,进入中断服务程序,将数据从 I/O 接口寄存器 搬运到 主存

由于一次中断通常只能完成少量数据的传输,因此面对高速 I/O 设备或大量数据传输时,CPU 需要频繁地暂停现行程序,不断进入中断服务程序完成数据搬运。这不仅增加了中断处理的开销,也使 CPU 花费大量时间充当 数据搬运者,影响了系统的整体性能。

中断驱动I/O方式展示中断驱动I/O的数据通路和中断服务处理流程,并列出该方式的局限性I/O设备I/O接口寄存器CPU寄存器主存1NCPU依次响应中断请求从I/O读数据存入CPU寄存器写入内存↻ 返回主程序,继续检测下一个中断中断驱动方式的局限· 中断频繁,开销大· CPU频繁切换执行上下文· CPU参与每次数据搬运,成为"搬运工"· 一次搬运数据量小,效率低· CPU占用时间多,并行性差

DMA 方式正是为了解决程序中断方式的这一缺陷而提出的。它通过增加 DMA 控制器(DMA Controller),使数据能够直接在 I/O 接口主存 之间传输,CPU 只需在传输开始前完成参数配置,在整个数据传输过程中无需参与具体的数据搬运,仅在传输结束后接收一次完成中断即可。因此,DMA 不仅实现了 数据传输过程与主程序真正并行工作,还大幅减少了 CPU 的数据搬运开销和中断次数,从而显著提高了高速、大批量数据传输的效率。

原理
CPU运行主程序(与 DMA 并行)① 预处理④ 后处理仅参与首尾两端DMA 控制器接管总线 · 自动搬运MAR · DR · DC · CR② 初始化参数地址/长度/方向③ 完成中断通知 CPU 校验/收尾外设如:磁盘 / 网卡内存主存 (RAM)数据通路(不经过 CPU 寄存器/执行单元)核心思想① 预处理:CPU 配置 DMA 参数(源地址、目标地址、长度、方向)② 数据传输:DMA 控制器接管总线,在外设与内存之间直接搬运数据,CPU 同时执行其他指令③ 后处理:传输完成后 DMA 发中断,CPU 进行数据校验与收尾⇒ CPU 只在两端参与,数据传输与主程序并行进行,适用于块设备的高吞吐传输

DMA 让数据传送直接在 外设和内存之间 开辟一条 数据通路,使得数据传送期间不再需要占用 CPU 时间处理中断、保护断点和恢复 CPU 现场等繁琐操作。

在 DMA 方式中,CPU 只参与预处理(CPU 通过初始化程序来设置 DMA 控制器的各参数寄存器的初始值,如内存首地址、字计数值等)和后处理过程(传送完成后 CPU 会进行数据校验等工作)。通常适用于以块读写的设备。

这意味着在 DMA 方式下,CPU 的核心计算资源几乎不受数据传输的影响。

注意

通过 DMA 方式,外设和内存之间进行数据传输是否还需要经过 CPU?

外设写入内存时,数据“绕过了 CPU 的寄存器和执行单元”,但仍然必须“经过 CPU 芯片内部的互连与 内存控制器”来完成写入,整个过程由 CPU 授权和调度,不占用 CPU 核心计算资源。

比如我们通过下表对该过程进行 更加精细化的分解 🔍 :

层次是否经过说明
CPU 的 寄存器 / 执行单元❌ 否DMA 不用 CPU 寄存器搬数据,也不打断指令流
CPU 的 互连结构(SoC Fabric)✅ 是所有 I/O 访问在 CPU 芯片内都要通过互连
CPU 的 内存控制器(IMC)✅ 是最终访问内存必须经过内存控制器,现代 CPU 内部集成
CPU 的 授权 / 控制路径✅ 是DMA 之前需配置地址、长度、权限等控制结构
DMA 控制器
DR
MAR
DC
CR
I/O
与块设备
的接口
CPU
DMA 控制器
内存
系统总线
主机-控制器接口
块设备-控制器接口
磁盘

DMA 控制器是实现 DMA 传输的专用硬件,其主要负责接收 CPU 的配置、申请系统总线控制权,并在 I/O 接口主存 之间自动完成数据传输。其主要组成如下:

  • 主机 - 控制器接口
    • DR(数据寄存器):暂存一次总线传输的数据。
    • MAR(内存地址寄存器):保存当前主存地址,每完成一次数据传输后自动更新。
    • DC(数据计数器):记录剩余待传输的数据量,每完成一次数据传输后自动递减。
    • CR(命令/状态寄存器):保存 CPU 配置的 DMA 工作参数(如传输方向、工作方式等),同时记录 DMA 的工作状态。
  • I/O 控制逻辑
  • 块设备 - 控制器接口

教材中常说 DMA 以"块"为单位进行传输,这里的"块"并不是指 DMA 在一次总线周期内就传输完整块数据。实际上,DMA 底层仍然按照总线传输单位(如字节、字、Cache Line 等)逐次完成数据交换,每完成一次传输都会自动更新 MARDC。所谓"块传输",是指 CPU 只需配置一次 DMA 控制器,DMA 便能够自动、连续地完成整块数据的传输,而无需 CPU 在每次数据搬运时参与

举个例子,对于 MAR = 0x100000DC = 4096,那么 DMA 的逻辑就类似于以下代码描述的流程:

while (DC > 0) {
    搬一个总线传输单位;
    MAR += unit;
    DC  -= unit;
}

当 DC 减到 0 时,DMA 传输结束,通过一个中断告诉 CPU 传输完成。

注意

DMA 控制器和 CPU 的关系

上图展示的是早期计算机系统中的一种典型实现。在传统的单总线结构中,DMA 控制器(DMAC) 是一个独立于 CPU 的硬件模块,通过系统总线连接主存和 I/O 控制器。当需要进行 DMA 传输时,DMA 控制器首先向 CPU 申请系统总线的控制权,随后接管总线,在 I/O 接口主存 之间直接完成数据传输。

现代计算机中,DMA 功能通常已经集成到 CPU、芯片组(PCH)、I/O 控制器,甚至 PCIe 网卡、SSD、GPU 等高速设备内部,因此现代系统更多是集成的 DMA 引擎(DMA Engine),而不是独立的 DMA 芯片。不过,它们的工作原理与早期 DMA 控制器基本一致。

步骤

DMA 方式与中断 I/O 方式都采用“请求—响应”的工作机制,但二者请求的对象不同:

  • 中断 I/O 方式请求 CPU 暂停当前程序,进入中断服务程序处理数据传输。
  • DMA 方式主要请求系统总线的控制权,由 DMA 控制器代替 CPU 完成外设与主存之间的数据传输。

如下图所示,为进程 P1 通过 DMA 在磁盘和主存之间进行数据交换的过程:

地址信息
数据信息
主线控制
缓冲区
1
3
2
4
5
处理器
DMA 控制器
总线
磁盘控制器
主存

一次完整的 DMA 传输通常可以分为 预处理、数据传输和后处理 三个阶段。

  1. 预处理

    CPU 首先对 DMA 控制器进行初始化,设置本次传输所需的参数,主要包括:

    • 外设地址或 I/O 接口地址;
    • 主存起始地址;
    • 数据传输长度;
    • 数据传输方向;
    • DMA 的工作方式。

    设置完成后,CPU 启动外设和 DMA 控制器,随后便可以继续执行其他程序。

  2. DMA 请求

    当外设准备好数据,或者具备接收数据的条件后,外设向 DMA 控制器发出 DMA 请求

    DMA 控制器接收到请求后,向 CPU 或总线仲裁器申请获得系统总线的控制权。

  3. 取得总线控制权

    CPU 在完成当前总线周期后,向 DMA 控制器发出总线响应信号,并暂时让出总线控制权。

    DMA 控制器取得总线控制权后,开始执行 DMA 传输周期。

  4. 数据传输

    DMA 控制器直接在 I/O 接口和主存 之间传输数据,不需要 CPU 逐次参与数据搬运。

    每传输一个数据单位,DMA 控制器通常会自动:

    • 修改主存地址;
    • 更新传输计数;
    • 判断本次传输是否已经完成。

    在 DMA 传输期间,CPU 仍可继续执行不依赖该总线的操作;当 CPU 与 DMA 控制器同时需要使用总线时,需要通过总线仲裁决定使用权。

  5. 释放总线控制权

    当规定数量的数据全部传输完成后,DMA 控制器结束 DMA 操作,并释放系统总线,使总线控制权重新交还给 CPU。

  6. 后处理

    DMA 传输完成后,DMA 控制器通常向 CPU 发出一次 完成中断

    CPU 响应中断后进入相应的中断服务程序,完成后续处理,例如:

    • 检查 DMA 传输是否成功;
    • 读取并清除 DMA 状态;
    • 更新进程或 I/O 请求的状态;
    • 唤醒等待数据传输完成的进程;
    • 启动下一次 I/O 操作。

因此,在 DMA 方式下,CPU 主要负责传输前的初始化和传输后的处理,而大批量数据的实际搬运由 DMA 控制器完成。

使用总线方式

在 DMA 方式中,DMA 接口和 CPU 共享主存,因此它们同时访问主存时,会出现总线的争用问题,为了实现主存的分时复用,有以下三种方法:

  1. 总线独占 (Bus Mastering):
    • 在这种模式下,DMA 控制器会取得对总线的 独占控制权。在传输期间,CPU 将无法访问内存,因为总线已经被 DMA 控制器占用了。
    • 在独占期间,CPU 通常会执行不涉及内存访问的指令,如计算或寄存器操作,或者进入等待状态直到 DMA 操作完成。
  2. 周期挪用 (Cycle Stealing,也叫做循环窃取):
    • 在循环窃取模式下,DMA 控制器会 逐个窃取总线周期 来进行数据传输,而不是一次性占据所有的总线周期。
    • 这意味着 CPU 在 DMA 控制器未使用总线时仍然可以访问内存。因此,DMA 和 CPU 会交替使用总线,通常不会显著影响 CPU 的操作。
  3. 分时多路复用 (Time-Division Multiplexing):
    • 在分时多路复用模式下,DMA 控制器和 CPU 会在 预定的时钟周期内轮流使用总线
    • 这种方式确保了 CPU 和 DMA 控制器都可以在它们的时隙内访问内存,但都无法全时段访问。
周期挪用方式
总线分时复用
总线独占
DMA 独占总线
总线时钟周期
DMA 使用总线
CPU 使用总线
注意

CPUDMA 控制器哪一个对于 总线访问的优先级更高

当 CPU 和 DMA 都需要访问主存时,DMA 控制器可以优先获得总线使用权

因为磁盘一旦开始读写,就必须按时完成数据传送,否则数据缓冲区中的数据会发生丢失。

通道方式

通道方式(Channel I/O)是在 DMA 的基础上进一步发展而来的 I/O 方式,主要用于大型机和早期高性能计算机。

DMA 方式虽然能够实现 设备与主存之间直接传输数据,但 每完成一次 DMA 传输,CPU 都需要重新启动下一次 DMA 操作。当系统同时管理大量高速 I/O 设备时,CPU 仍需要频繁参与各个 DMA 的初始化工作。

为了解决这一问题,引入了 通道(Channel)

CPU下达 I/O 任务 · 执行主程序主存数据缓冲区 · 通道程序通道(I/O Processor)独立执行通道程序 · 管理多个设备又称通道处理机下达 I/O 命令(通道程序首地址)结束中断(任务完成通知)数据直接读写主存设备控制器Device Controller设备控制器Device Controller设备控制器Device Controller磁盘磁带打印机控制中断数据

通道本质上是一种 专门负责 I/O 的处理器(又称 I/O Processor),能够独立执行一系列 I/O 指令,因此也称为 通道处理机

CPU 只需向通道下达一次 I/O 命令,之后整个 I/O 过程都由通道负责完成,无需 CPU 再参与具体的数据传输和设备控制。

因此,数据传输路径变为:设备 ↔︎ 通道 ↔︎ 主存

CPU 与通道之间仅交换控制信息,而数据在设备和主存之间直接传输。

工作过程
CPU通道设备主存时间① 启动通道下达通道程序首地址CPU 并行执行其他程序(不参与 I/O)通道独立工作期间,CPU 可执行其他任务② 依次执行通道程序中的 I/O 指令自动控制设备完成数据传输③ 数据传输(设备 ↔ 主存,不经过 CPU)数据缓冲区读/写控制数据④ 发送结束中断通知 CPU 任务完成响应中断进行收尾处理阶段 1:初始化阶段 2:通道执行阶段 3:数据传输阶段 4:结束中断

通道方式通常包含以下几个步骤:

  1. CPU 初始化:CPU 将通道程序(Channel Program)的首地址告诉通道,并启动通道工作。
  2. 通道执行:通道依次执行通道程序中的各条 I/O 指令,自动控制设备完成数据传输。
  3. 数据传输:数据直接在 设备 ↔ 主存 之间传输,不经过 CPU。
  4. 结束中断:整个 I/O 操作完成后,通道向 CPU 发出中断,通知任务结束。

整个过程中,CPU 可以一直执行其他程序,只需在开始和结束时参与。

通道程序

通道程序(Channel Program)是一组存放在主存中的 通道指令

这些指令规定了:

  • 操作哪个设备;
  • 数据存放的位置;
  • 数据传输长度;
  • 下一条通道指令的位置等。

CPU 不负责执行这些指令,而是由 通道 独立解释和执行。

通道与 DMA 的区别
比较项DMA通道
控制者DMA 控制器通道(I/O 处理机)
是否具有执行指令能力❌ 没有✅ 有,可执行通道程序
CPU 参与程度每次 DMA 都需 CPU 初始化CPU 只需启动一次通道程序
能否管理多个设备一般较弱✅ 可以同时管理多个设备
应用场景微机、PC、服务器大型机、高性能计算机
注意

四种 I/O 方式可以理解为 CPU 参与程度逐渐降低的过程:

  • 程序查询:CPU 负责等待 + 数据搬运。
  • 程序中断:CPU 不等待,但仍负责数据搬运。
  • DMA:CPU 不等待,也不负责数据搬运,只负责初始化 DMA。
  • 通道:CPU 连 DMA 的启动细节都交给通道,只负责下达 I/O 任务。