Files

12 KiB
Raw Permalink Blame History

tags, create time
tags create time
计算机系统结构
复习
总线
IO系统
2026-06-15 10:00

总线与 I/O 系统

概述

本文档讲解总线的基本概念、分类与仲裁方式、同步/异步总线的工作机制、分离事务总线的工作原理,以及 I/O 系统的核心组成——DMA 与中断机制。最后讨论 I/O 系统的性能评价与计算方法。总线是连接处理器、存储器和 I/O 设备的通信通道,其设计直接影响系统整体性能。

[!tip] 考试重点 分离事务总线的概念和别称常以选择题出现。DMA 三种工作模式的对比、中断处理流程是简答题高频考点。I/O 系统性能计算(总线带宽、CPU 占用率)是综合题常客。

正文

一、总线基础

总线(Bus)是计算机系统中多个功能部件之间共享的通信通道,由一组导线和相关的控制逻辑组成。

1.1 总线分类

分类方式 类型 说明
按用途 数据总线、地址总线、控制总线 分别传输数据、地址、控制信号
按层次 系统总线、I/O 总线 系统总线连接 CPU 和主存,I/O 总线连接外设
按控制 同步总线、异步总线 同步靠时钟,异步靠握手信号

1.2 总线性能指标

  • 总线带宽:单位时间内传输的数据量(MB/s)
  • 总线宽度:数据线的位数(如 64 位)
  • 总线频率:总线时钟频率(如 800 MHz)

三者之间的关系:

\text{总线带宽} = \text{总线宽度} \times \text{总线频率} \times \text{每个时钟传输次数}

[!question] 思考 一条 64 位宽、800 MHz 的总线,理论峰值带宽是多少?如果每个时钟周期传输 1 次,答案是 $64 \div 8 \times 800 = 6400\ \text{MB/s}$。若采用 DDR(双倍数据率)技术,带宽翻倍为 12800 MB/s。这就是为什么现代总线普遍采用 DDR 技术。

1.3 总线仲裁

多个设备可能同时请求使用总线,总线仲裁器(Arbiter)决定谁获得使用权。仲裁方式分为两大类:

仲裁方式 仲裁器位置 优点 缺点 典型策略
集中式仲裁 专用硬件仲裁器 决策快、确定性强 仲裁器是单点瓶颈 菊花链、轮询、独立请求
分布式仲裁 无集中仲裁器,各设备自行协商 可扩展性好 延迟不确定 自举分布式、冲突检测

集中式仲裁的三种策略:

  • 菊花链仲裁:Grant 信号沿设备链逐级传递,离仲裁器越近优先级越高。简单但不公平,低优先级设备可能饿死。
  • 轮询仲裁:仲裁器按固定顺序轮询各设备。公平但效率不高。
  • 独立请求仲裁:每个设备有独立的请求/应答线。速度快、灵活,但线数随设备数增加。

[!question] 思考 如果系统中有 16 个 I/O 设备,独立请求仲裁需要多少对请求/应答线?答案是 16 对。设备再多,线数就成了问题——这就是为什么大规模系统倾向于使用分布式仲裁或层级式仲裁。

二、同步总线与异步总线

总线通信的同步方式决定了设备间如何协调时序。

2.1 同步总线

所有操作由统一的时钟信号驱动。发送方和接收方在时钟边沿进行数据采样。

  • 优点:控制简单、速度快
  • 缺点:所有设备必须以同一时钟频率工作,灵活性差;总线长度受时钟偏移(clock skew)限制

2.2 异步总线

没有统一时钟,通过握手信号(Handshake)协调通信。典型的四周期握手协议如下:

sequenceDiagram
    participant S as "发送方"
    participant R as "接收方"

    S->>R: "1. 数据就绪 (Data Valid)"
    R->>S: "2. 数据接收 (Data Ack)"
    S->>R: "3. 撤销数据就绪"
    R->>S: "4. 撤销数据接收"
    Note over S, R: "一个完整的四周期握手完成"
  • 优点:允许不同速度的设备通信,灵活性高
  • 缺点:握手开销增加了延迟,速度比同步总线慢

[!note] 半同步总线 实际系统常采用半同步总线:以时钟为基本定时参考,但引入 Wait 信号允许慢速设备插入等待周期。兼顾了同步的效率和异步的灵活性。

三、分离事务总线

核心思想:将一个总线事务分成请求和响应两个阶段,在请求和响应之间的空闲时间内,总线可以供给其他 I/O 设备使用。

sequenceDiagram
    participant C as CPU
    participant B as Bus
    participant M as Memory

    C->>B: 请求阶段(发送地址+命令)
    B->>M: 内存准备数据
    Note over B: "总线空闲, 可服务其他请求"
    M->>B: 响应阶段(返回数据)
    B->>C: 数据到达

别称:

名称 说明
流水总线 因为请求和响应可以流水化
分离协议总线 因为协议将事务分离
交叉互连总线 不是分离事务总线的别称,是另一种总线拓扑
独占总线 不是分离事务总线的别称

[!note] 分离事务总线的优势 传统总线在一个事务完成前一直被占用,分离事务总线在等待内存响应时释放总线,允许多个设备并发使用,显著提高总线利用率。

四、I/O 系统性能

4.1 性能评价维度

维度 含义 衡量指标
连接特性 设备连接能力和带宽 设备数量、通道数
容量 存储空间大小 TB、PB
响应时间 从请求到完成的延迟 ms、μs
吞吐率 单位时间处理的 I/O 量 IOPS、MB/s

[!question] I/O 系统性能为什么重要? 随着处理器速度远超 I/O 设备速度,I/O 瓶颈日益突出。一个 I/O 操作可能耗时数毫秒,而 CPU 一个时钟周期仅数纳秒,巨大的速度差使得 I/O 系统可能成为整个系统的瓶颈。

4.2 I/O 系统的瓶颈问题

CPU 速度: ~GHz (纳秒级)
内存速度: ~100ns
磁盘速度: ~10ms (毫秒级)

速度差距达到 5~6 个数量级,因此:

  • I/O 系统的性能对 CPU 利用率影响巨大
  • I/O 和 CPU 的性能不匹配时,I/O 系统成为瓶颈
  • 需要通过缓存、缓冲、异步 I/O 等技术缓解

4.3 I/O 性能计算

[!example] 例题:总线带宽与 I/O 吞吐量 某计算机系统参数如下:

  • 总线宽度:64 位
  • 总线频率:200 MHz
  • 每个总线周期传输 1 次数据
  • 系统通过 DMA 将磁盘数据传入内存
  • DMA 采用块传输模式,每个总线事务的开销为 2 个周期(地址+命令 1 周期,数据传输 1 周期)

问题 1:总线的理论峰值带宽是多少?

解:

\text{理论带宽} = 64\text{bit} \times 200\text{MHz} = 1600\text{MB/s}

问题 2:考虑事务开销后,实际有效带宽是多少?

解:

每传输 64 bit(8 B)数据需要 2 个周期(1 个开销 + 1 个数据)

\text{有效带宽} = \frac{8\text{B}}{2 \times 5\text{ns}} = 800\text{MB/s}

问题 3:如果有 4 个磁盘控制器同时以 DMA 方式向内存写入数据,每个控制器持续传输速率为 150 MB/s,总线能否支持?

解:

总需求带宽:4 \times 150 = 600\text{MB/s}

有效带宽 800 MB/s > 600 MB/s,可以支持。但总线利用率已达 $600/800 = 75%$,余量不多。如果再增加设备或提高单设备速率,总线将成为瓶颈。

[!question] 思考 为什么分离事务总线能提高 I/O 系统的有效带宽?因为它在等待内存响应期间释放总线给其他设备使用,减少了总线空闲时间。在上例中,如果采用传统总线,每个 DMA 事务期间总线被独占(即使设备在准备数据),有效带宽会进一步下降。

五、DMA 与中断

5.1 三种 I/O 控制方式对比

方式 原理 CPU 参与度 适用场景
程序查询 CPU 轮询 I/O 状态 高 简单系统
中断 I/O 完成后通知 CPU 中 低速设备
DMA 直接内存访问,不经过 CPU 低 高速设备

5.2 DMA 工作流程

  1. CPU 设置 DMA 传输参数(源地址、目的地址、传输长度)
  2. DMA 控制器接管总线,直接在设备和内存间传输数据
  3. 传输完成后,DMA 控制器向 CPU 发中断通知

5.3 DMA 的三种工作模式

DMA 控制器在传输过程中根据总线使用权的不同,分为三种工作模式:

模式 总线使用方式 CPU 影响 传输效率 适用场景
单字传输(Cycle Stealing) 每传一个字就释放总线给 CPU 每个字都要"偷"一个总线周期,CPU 频繁被打断 低 CPU 对延迟敏感的场景
块传输(Block Transfer) 一次占用总线传完整个数据块 CPU 长时间无法使用总线 高 大块数据连续传输
请求传输(Demand Transfer) DMA 检查 DREQ 信号,设备未就绪则释放总线 仅在设备有数据时才占用总线 中等 设备速度不确定的场景

[!question] 思考 假设 CPU 每秒执行 1 亿条指令,DMA 以单字模式从磁盘读取数据,总线宽度 32 位,总线周期 100ns。每"偷"一个周期 CPU 损失一条指令的时间。若传输 1 MB 数据,CPU 会损失多少执行时间?答案:1\text{MB} \div 4\text{B} = 250000 个周期,损失 $250000 \times 100\text{ns} = 25\text{ms}$,占 1 秒的 2.5%。这就是为什么高速传输通常选择块传输模式。

5.4 中断处理的完整流程

当 I/O 设备完成操作后,通过中断通知 CPU。CPU 响应中断的完整过程如下:

flowchart TD
    A["中断请求"] --> B{"CPU 响应?"}
    B -- "否" --> A
    B -- "是" --> C["关中断"]
    C --> D["保护现场: 保存 PC, PSW 等"]
    D --> E["识别中断源: 确定哪个设备中断"]
    E --> F["跳转中断服务程序"]
    F --> G["执行中断服务: 处理 I/O 数据"]
    G --> H["恢复现场: 恢复 PC, PSW 等"]
    H --> I["开中断"]
    I --> J["返回断点继续执行"]

[!important] 关键步骤说明

  • 保护现场:必须保存程序计数器(PC)和程序状态字(PSW),确保中断返回后能正确继续执行。
  • 中断源识别:多个设备同时中断时,需要确定优先级。硬件向量法比软件轮询法快得多。
  • 嵌套中断:中断服务期间是否允许新的更高优先级中断嵌入?这取决于是否在服务程序中开中断。

5.5 中断 vs DMA 的 CPU 占用率计算

[!example] 例题:I/O 系统 CPU 占用率 一个系统中,CPU 时钟频率 500 MHz,磁盘控制器以 DMA 方式传输数据。

  • DMA 采用块传输模式,每次传输 4 KB 数据块
  • 传输前 CPU 需要 1000 个时钟周期设置 DMA 控制器
  • 传输完成后 DMA 中断 CPU,中断处理需要 500 个时钟周期
  • 磁盘持续数据传输速率为 40 MB/s

问题:CPU 用于该磁盘 I/O 的时间比例是多少?

解:

每个 4 KB 块需要 CPU 参与的周期数:1000 + 500 = 1500 个周期

每秒传输的块数:40\text{MB/s} \div 4\text{KB} = 10000 块/秒

每秒 CPU 花在 I/O 上的周期数:10000 \times 1500 = 1.5 \times 10^7 周期/秒

CPU 占用率:1.5 \times 10^7 \div 5 \times 10^8 = 3\%

结论:DMA 的 CPU 占用率仅 3%。如果采用中断方式逐字传输,每次传输 1 个字(4B)都需要一次中断,CPU 占用率将大幅飙升。

关联笔记