Files
final-exam/计算机系统结构/复习文档/总线与IO系统.md
T

270 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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|试题册索引]]