--- tags: - 计算机系统结构 - 复习 - 总线 - IO系统 create time: 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)协调通信。典型的四周期握手协议如下: ```mermaid 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 设备使用。 ```mermaid 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 响应中断的完整过程如下: ```mermaid 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 占用率将大幅飙升。 ## 关联笔记 - [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]] - [[计算机系统结构/复习文档/存储系统与Cache]] - [[计算机系统结构/index|试题册索引]]