vault backup: 2026-06-15 22:39:56

This commit is contained in:
2026-06-15 22:39:57 +08:00
parent b307d9e22a
commit f8fb8553d3
10 changed files with 1480 additions and 0 deletions
@@ -0,0 +1,31 @@
---
tags:
- 计算机系统结构
- 复习
- 索引
create time: 2026-06-15 10:00
---
# 计算机系统结构复习文档索引
## 概述
本文档为「计算机系统结构」课程复习材料索引。内容基于 A 卷和 B 卷两套历年试题的高频考点梳理,涵盖系统结构基础、指令系统、流水线、Cache 存储系统、总线与 I/O、多处理器与并行处理六大核心板块。
> [!tip] 使用建议
> 建议先通读 [[计算机系统结构基础与定量原理]] 夯实基础,再依次学习 [[指令系统设计]]、[[流水线技术]]、[[存储系统与Cache]] 三大核心专题。**流水线调度**和 **Cache 命中率计算**是历年考试的最高频考点,务必重点突破。[[总线与I/O系统]] 和 [[多处理器与并行处理]] 适合考前快速回顾。
## 复习文档目录
| 序号 | 文档 | 核心考点 |
|:----:|------|----------|
| 1 | [[计算机系统结构基础与定量原理]] | 系统结构定义、Flynn分类、Amdahl定律、CPU性能公式、局部性原理 |
| 2 | [[指令系统设计]] | 定长/扩展操作码、指令格式设计、RISC vs CISC、寻址方式 |
| 3 | [[流水线技术]] | 冲突类型、预约表调度、冲突向量、状态转移图、时空图 |
| 4 | [[存储系统与Cache]] | 映像方式、替换策略、命中率计算、17种优化技术、不命中类型 |
| 5 | [[总线与I/O系统]] | 分离事务总线、I/O性能评价、DMA与中断 |
| 6 | [[多处理器与并行处理]] | 存储一致性、MSI协议、远程访问性能、计算/通信比 |
## 关联笔记
- [[计算机系统结构/index|试题册索引]]
@@ -0,0 +1,129 @@
---
tags:
- 计算机系统结构
- 复习
- 并行处理
create time: 2026-06-15 10:00
---
# 多处理器与并行处理
## 概述
本文档讲解多处理器系统的基本概念、存储一致性模型、通信开销分析以及并行系统性能评估。多处理器和并行处理是现代计算机系统结构的重要方向,涉及软硬件协同设计的多个层面。
> [!tip] 考试重点
> 存储一致性的三个条件是论述题高频考点。远程访问对并行系统性能影响的计算(CPI 分析)在综合题中出现。
## 正文
### 一、多处理器系统概述
#### 1.1 分类
| 类型 | 特征 | Flynn 分类 | 典型代表 |
|------|------|:----------:|----------|
| 单处理器 | 单指令单数据 | SISD | 传统 PC |
| 向量处理器 | 单指令多数据 | SIMD | GPU、TPU |
| **多处理器** | 多指令多数据,共享内存 | MIMD | 服务器集群 |
| 多计算机 | 多指令多数据,分布式内存 | MIMD | 超算集群 |
#### 1.2 SIMD vs MIMD
| 特性 | SIMD | MIMD |
|------|------|------|
| 指令流 | 单一控制流 | 多个独立控制流 |
| 数据流 | 同一操作作用于多个数据 | 各处理器独立处理不同数据 |
| 适用场景 | 规则的数据并行(矩阵运算) | 不规则的并行任务 |
| 灵活性 | 低(需同步) | 高(独立执行) |
### 二、存储一致性(Cache Coherence)
#### 2.1 问题背景
在多处理器系统中,每个处理器都有自己的 Cache。当多个处理器访问共享数据时,可能出现**数据不一致**的问题。
```
处理器 P 写入 X = 1
↓ (Cache 更新)
处理器 Q 的 Cache 中 X 仍为旧值
```
#### 2.2 一致性定义
一个存储系统如果满足以下三个条件,则称是一致的:
> [!important] 存储一致性的三个条件
>
> **条件 1(写后读一致性)**:处理器 P 写 X 后又读 X,若期间无其他处理器写 X,则 P 读到的是自己写入的值。
>
> **条件 2(写传播一致性)**:处理器 P 写 X 后,处理器 Q 读 X,若期间无其他写操作,则 Q 读到的是 P 写入的值。
>
> **条件 3(写顺序一致性)**:对 X 的两次写之间若无其他处理器写 X,则最后写入的值保留(写顺序对所有处理器可见)。
#### 2.3 一致性协议
| 协议 | 原理 | 适用场景 |
|------|------|----------|
| **监听协议**(Snooping) | 所有 Cache 监听总线上的事务 | 小规模多处理器(总线互连) |
| **目录协议**(Directory) | 用目录记录每个内存块的状态 | 大规模多处理器(交叉开关互连) |
**MSI 协议**(监听协议的基础):
| 状态 | 含义 |
|:----:|------|
| **M**(Modified) | 该行已被修改,与主存不一致,只有本 Cache 有最新副本 |
| **S**(Shared) | 该行未被修改,多个 Cache 可能有副本 |
| **I**(Invalid) | 该行无效 |
> [!question] 监听协议为什么不适合大规模系统?
> 监听协议要求所有 Cache 监听总线,总线带宽成为瓶颈。当处理器数量增加时,总线冲突急剧增加,监听协议的可扩展性很差。目录协议通过点对点通信避免了这个问题。
### 三、并行系统性能分析
#### 3.1 远程访问的影响
在分布式共享内存系统中,远程内存访问的延迟远高于本地访问。
**CPI 计算**:
$$CPI = CPI_{base} + \text{远程访问率} \times \text{远程访问延迟(时钟数)}$$
> [!example] 远程访问性能影响
> 32 个处理器的集群,本地执行时间 10ns,CPI = 1.0。若有 0.5% 指令需远程访问(2000ns):
>
> 远程访问时钟 $= 2000 / 10 = 200$
>
> $CPI = 1.0 + 0.5\% \times 200 = 2.0$
>
> **结论**:0.5% 的远程访问使 CPI 翻倍,性能下降 50%。
#### 3.2 并行计算的挑战
| 挑战 | 说明 | 应对方法 |
|------|------|----------|
| **并行性有限** | Amdahl 定律限制了并行加速的上限 | 优化串行部分、提高并行比例 |
| **通信开销** | 处理器间数据交换的延迟 | 优化通信模式、减少同步 |
| **负载不均衡** | 各处理器工作量不等 | 动态调度、任务细分 |
#### 3.3 计算/通信比
$$\text{计算/通信比} = \frac{\text{计算量}}{\text{通信量}}$$
- 随数据规模增加而**增大**(计算量增长快于通信量)
- 随处理器数目增加而**减小**(每个处理器分到的计算减少,但通信开销相对增加)
> [!tip] 提高并行效率的关键
> 尽量提高计算/通信比:增大问题规模、优化通信模式(减少全局通信)、使用高带宽低延迟的互连网络。
### 四、设计定量原理在并行系统中的应用
1. **以经常性事件为重点**:优化本地访问路径(高频事件),而非远程访问
2. **Amdahl 定律**:并行加速受限于串行部分的比例
3. **CPU 性能公式**:远程访问增加了有效 CPI
4. **局部性原理**:数据局部性越好,远程访问越少,并行效率越高
## 关联笔记
- [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]]
- [[计算机系统结构/复习文档/存储系统与Cache]]
- [[计算机系统结构/index|试题册索引]]
@@ -0,0 +1,140 @@
---
tags:
- 计算机系统结构
- 复习
- Cache
create time: 2026-06-15 10:00
---
# 存储系统与 Cache
## 概述
本文档系统讲解存储层次结构、Cache 的工作原理(映像方式、替换策略、写策略)、命中率计算以及 17 种 Cache 优化技术。Cache 是计算机系统结构的核心考点,几乎每年都有大分值的计算和分析题。
> [!tip] 考试重点
> Cache 命中率计算、平均访存时间计算、分离 Cache vs 混合 Cache 的性能对比是必考内容。17 种优化技术的分类和代表性技术需熟记。
## 正文
### 一、存储层次结构
```mermaid
graph TD
A["Register"] --> B["L1 Cache"]
B --> C["L2 Cache"]
C --> D["Main Memory"]
D --> E["Disk/SSD"]
style A fill:#ff8a80
style B fill:#ff80ab
style C fill:#ea80fc
style D fill:#82b1ff
style E fill:#80d8ff
```
| 层次 | 容量 | 速度 | 价格/位 | 管理方式 |
|:----:|:----:|:----:|:-------:|:--------:|
| 寄存器 | KB | 最快 | 最贵 | 编译器 |
| L1 Cache | 32~64 KB | ~1 ns | 较贵 | 硬件 |
| L2 Cache | 256 KB~1 MB | ~5 ns | 中等 | 硬件 |
| 主存 | 4~64 GB | ~100 ns | 便宜 | OS+硬件 |
| 磁盘 | TB 级 | ~10 ms | 最便宜 | OS |
> [!question] 为什么存储系统要分层?
> 单一存储器无法同时满足"大容量、高速度、低价格"的要求。分层设计利用**局部性原理**,将频繁访问的数据放在快速但小的上层,不常用的放在慢速但大的下层,以较低成本获得接近最快速度的平均性能。
### 二、Cache 基本原理
#### 2.1 映像方式
| 映像方式 | 原理 | 优点 | 缺点 |
|----------|------|------|------|
| **直接映像** | 主存块只能映射到 Cache 的固定位置 | 简单、命中时间短 | 冲突不命中率高 |
| **全相联** | 主存块可映射到 Cache 任意位置 | 冲突不命中率最低 | 硬件开销大、查找慢 |
| **组相联** | 折中方案,分为 $2^n$ 组,组内全相联 | 平衡性能和开销 | 复杂度适中 |
> [!note] 组相联 Cache 的命名
> "$n$ 路组相联"表示每组有 $n$ 个 Cache 行。2 路组相联 = 每组 2 行,4 路组相联 = 每组 4 行。
#### 2.2 替换策略
| 策略 | 原理 | 特点 |
|------|------|------|
| **LRU**(最近最少使用) | 替换最久未被访问的块 | 最常用,效果好 |
| **FIFO** | 替换最早进入的块 | 简单,但可能替换活跃块 |
| **随机** | 随机选择替换块 | 实现简单,效果尚可 |
#### 2.3 写策略
| 策略 | 命中时 | 不命中时 | 一致性 |
|------|--------|----------|--------|
| **写直达** | 同时写 Cache 和主存 | Write-Allocate 或 No-Write-Allocate | 简单但总线流量大 |
| **写回** | 只写 Cache,标记为脏 | Write-Allocate | 复杂但总线流量小 |
### 三、Cache 性能计算
#### 3.1 命中率与不命中率
$$\text{不命中率} = w_I \times mr_I + w_D \times mr_D$$
其中 $w_I$、$w_D$ 分别为指令和数据的访问占比,$mr_I$、$mr_D$ 为各自的不命中率。
#### 3.2 平均访存时间
$$\text{平均访存时间} = \text{命中时间} + \text{不命中率} \times \text{不命中开销}$$
> [!example] 分离 Cache vs 混合 Cache
>
> **分离 Cache**(指令 16KB + 数据 16KB):
> - 指令不命中率 1%,数据不命中率 5%
> - 命中时间均为 1 周期,不命中开销 40 周期
> - 平均访存时间 $= 78\% \times (1 + 1\% \times 40) + 22\% \times (1 + 5\% \times 40) = 1.752$ 周期
>
> **混合 Cache**(32KB):
> - 不命中率 1.5%,但 load/store 命中时间 +1 周期
> - 平均访存时间 $= 78\% \times (1 + 1.5\% \times 40) + 22\% \times (2 + 1.5\% \times 40) = 1.782$ 周期
>
> **结论**:分离 Cache 更优(1.752 < 1.782)
#### 3.3 CPU 时间与 Cache 的关系
$$CPU 时间 = IC \times (CPI_{exe} + \frac{\text{访存次数}}{指令} \times mr) \times \tau$$
### 四、17 种 Cache 优化技术
| 分类 | 技术 | 基本思想 | 影响 |
|:----:|------|----------|------|
| **降低不命中率**(8种) | 增大块大小 | 利用空间局部性 | 块过大会增加不命中开销 |
| | 增大 Cache 容量 | 利用时间局部性 | 增加命中时间 |
| | 提高相联度 | 减少冲突不命中 | 增加命中时间 |
| | 伪相联 Cache | 降低冲突不命中 | 复杂度适中 |
| | 硬件预取 | 提前调入数据 | 增加总线流量 |
| | 编译器控制预取 | 编译器插入预取指令 | 增加指令开销 |
| | 编译优化 | 优化访问模式 | 依赖编译器能力 |
| | Victim Cache | 小全相联 Cache 保存替换出的块 | 减少冲突不命中 |
| **减少不命中开销**(5种) | 非阻塞 Cache | 不命中时允许后续请求 | 提高流水线效率 |
| | 写合并 | 合并多次写操作 | 减少写缓冲区占用 |
| | 请求字优先 | 优先传输请求的字 | 减少等待时间 |
| | 写缓冲 | 写操作进入缓冲区异步执行 | 减少写延迟 |
| | 早重启 | 不命中时尽早返回请求字 | 减少等待时间 |
| **减少命中时间**(4种) | 小容量简单 Cache | 降低命中时间 | 适用于 L1 Cache |
| | 虚拟 Cache | 用虚拟地址直接索引 | 增加别名问题 |
| | 流水化 Cache 访问 | Cache 访问分段流水化 | 提高时钟频率 |
| | 路预测 | 预测 Cache 行所在路 | 预测错误时需重取 |
> [!warning] 优化技术的权衡
> 几乎每种优化技术都存在"收益-代价"权衡。例如增大块大小降低了强制性不命中,但增加了不命中开销;提高相联度降低了冲突不命中,但增加了命中时间。设计时需要根据具体场景权衡。
### 五、不命中的三种类型
| 类型 | 原因 | 解决方法 |
|------|------|----------|
| **强制性不命中**(Compulsory) | 首次访问某块 | 增大块大小、预取 |
| **容量不命中**(Capacity) | Cache 容量不足 | 增大 Cache 容量 |
| **冲突不命中**(Conflict) | 映射冲突 | 提高相联度、Victim Cache |
## 关联笔记
- [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]]
- [[计算机系统结构/复习文档/总线与I/O系统]]
- [[计算机系统结构/index|试题册索引]]
@@ -0,0 +1,113 @@
---
tags:
- 计算机系统结构
- 复习
- 总线
- IO系统
create time: 2026-06-15 10:00
---
# 总线与 I/O 系统
## 概述
本文档讲解总线的基本概念、分离事务总线的工作原理,以及 I/O 系统的性能评价指标。总线是连接处理器、存储器和 I/O 设备的通信通道,其设计直接影响系统整体性能。
> [!tip] 考试重点
> 分离事务总线的概念和别称常以选择题出现。I/O 系统性能评价指标需理解各维度的含义。
## 正文
### 一、总线基础
**总线**(Bus)是计算机系统中多个功能部件之间共享的通信通道,由一组导线和相关的控制逻辑组成。
#### 1.1 总线分类
| 分类方式 | 类型 | 说明 |
|----------|------|------|
| 按用途 | 数据总线、地址总线、控制总线 | 分别传输数据、地址、控制信号 |
| 按层次 | 系统总线、I/O 总线 | 系统总线连接 CPU 和主存,I/O 总线连接外设 |
| 按控制 | 同步总线、异步总线 | 同步靠时钟,异步靠握手信号 |
#### 1.2 总线性能指标
- **总线带宽**:单位时间内传输的数据量(MB/s)
- **总线宽度**:数据线的位数(如 64 位)
- **总线频率**:总线时钟频率(如 800 MHz)
### 二、分离事务总线
**核心思想**:将一个总线事务分成**请求**和**响应**两个阶段,在请求和响应之间的空闲时间内,总线可以供给其他 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 系统性能
#### 3.1 性能评价维度
| 维度 | 含义 | 衡量指标 |
|------|------|----------|
| **连接特性** | 设备连接能力和带宽 | 设备数量、通道数 |
| **容量** | 存储空间大小 | TB、PB |
| **响应时间** | 从请求到完成的延迟 | ms、μs |
| **吞吐率** | 单位时间处理的 I/O 量 | IOPS、MB/s |
> [!question] I/O 系统性能为什么重要?
> 随着处理器速度远超 I/O 设备速度,I/O 瓶颈日益突出。一个 I/O 操作可能耗时数毫秒,而 CPU 一个时钟周期仅数纳秒,巨大的速度差使得 I/O 系统可能成为整个系统的瓶颈。
#### 3.2 I/O 系统的瓶颈问题
```
CPU 速度: ~GHz (纳秒级)
内存速度: ~100ns
磁盘速度: ~10ms (毫秒级)
```
速度差距达到 **5~6 个数量级**,因此:
- I/O 系统的性能对 CPU 利用率影响巨大
- I/O 和 CPU 的性能不匹配时,I/O 系统成为瓶颈
- 需要通过缓存、缓冲、异步 I/O 等技术缓解
### 四、DMA 与中断
| 方式 | 原理 | CPU 参与度 | 适用场景 |
|------|------|:----------:|----------|
| 程序查询 | CPU 轮询 I/O 状态 | 高 | 简单系统 |
| 中断 | I/O 完成后通知 CPU | 中 | 低速设备 |
| **DMA** | 直接内存访问,不经过 CPU | 低 | 高速设备 |
DMA 的工作流程:
1. CPU 设置 DMA 传输参数(源地址、目的地址、传输长度)
2. DMA 控制器接管总线,直接在设备和内存间传输数据
3. 传输完成后,DMA 控制器向 CPU 发中断通知
## 关联笔记
- [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]]
- [[计算机系统结构/复习文档/存储系统与Cache]]
- [[计算机系统结构/index|试题册索引]]
@@ -0,0 +1,96 @@
---
tags:
- 计算机系统结构
- 复习
- 指令系统
create time: 2026-06-15 10:00
---
# 指令系统设计
## 概述
本文档讲解指令系统(ISA)的设计原则与编码技术,包括指令格式设计、操作码编码(定长/扩展)、RISC vs CISC 的核心差异。指令系统是软硬件的分界面,其设计直接影响计算机的性能和可编程性。
> [!tip] 考试重点
> 扩展操作码的指令格式设计是分析题高频考点,需掌握定长操作码与等长扩展码的计算方法。RISC 原则常以选择题形式出现。
## 正文
### 一、指令格式设计
一条指令通常由**操作码**和**地址码**组成:
```
┌──────────┬──────────┬──────────┬──────────┐
│ 操作码 │ 地址1 │ 地址2 │ 地址3 │
└──────────┴──────────┴──────────┴──────────┘
```
**指令字长** = 操作码位数 + 各地址码位数之和
> [!question] 为什么指令格式设计需要权衡?
> 操作码越长,可表示的指令种类越多,但地址码空间被压缩;地址码越多,寻址能力越强,但指令字长增加,取指开销增大。
### 二、操作码编码方式
#### 2.1 定长操作码
所有指令的操作码位数相同,格式规整,译码简单。
**例**:指令字长 16 位,地址字段 6 位,双地址指令需 $16 - 6 \times 2 = 4$ 位操作码 → 最多 $2^4 = 16$ 条指令。
#### 2.2 扩展操作码(变长操作码)
通过在操作码中设置**扩展标志位**,使不同类型的指令拥有不同长度的操作码,从而在固定指令字长下支持更多指令。
**设计原则**:
1. 使用频率高的指令分配短操作码
2. 使用频率低的指令分配长操作码
3. 短操作码不能是长操作码的前缀
> [!example] 例:12 位指令字长,3 位地址字段
>
> | 类型 | 操作码 | 地址数 | 可用编码空间 |
> |:----:|:------:|:------:|:----------:|
> | 三地址 | 3 位 | 3 | $2^3 = 8$(用 4 个) |
> | 二地址 | 6 位 | 2 | 余下 4 个 × $2^3 = 32$(用 8 个) |
> | 单地址 | 9 位 | 1 | 余下编码 × $2^3 = 190$ 条 |
### 三、RISC vs CISC
| 特性 | RISC | CISC |
|------|------|------|
| 指令数量 | 少(< 200) | 多(数百~上千) |
| 指令长度 | **等长**(通常 32 位) | 变长 |
| 寻址方式 | 少(2~3 种) | 多(十几种) |
| 执行周期 | **单周期**为主 | 多周期 |
| 访存方式 | **Load-Store**(仅 load/store 访存) | 任意指令可访存 |
| 控制方式 | **硬连线**(速度快) | 微程序(灵活) |
| 寄存器 | 多(32+ 通用寄存器) | 少 |
| 编译器 | 依赖编译器优化 | 硬件承担更多 |
> [!warning] RISC 的常见误解
> - RISC 不是"指令功能简单",而是"指令数量少、格式规整"
> - RISC 的单周期是指理想情况,Cache 不命中等仍会导致多周期
> - RISC 使用 Load-Store 架构,ALU 操作只在寄存器间进行
> [!question] 为什么 RISC 采用 Load-Store 架构?
> 将访存操作限制在专用的 load/store 指令中,使得其他所有指令都只访问寄存器,速度更快、时序更简单,有利于流水线实现。同时,编译器可以更方便地调度指令顺序来隐藏访存延迟。
### 四、寻址方式
| 寻址方式 | 有效地址 | 适用场景 |
|----------|----------|----------|
| 立即寻址 | 操作数在指令中 | 常量赋值 |
| 寄存器寻址 | EA = R | 高速操作 |
| 直接寻址 | EA = A | 全局变量 |
| 间接寻址 | EA = (A) | 指针 |
| 基址寻址 | EA = R + A | 数组基址 |
| 变址寻址 | EA = A + R | 数组下标 |
## 关联笔记
- [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]]
- [[计算机系统结构/复习文档/流水线技术]]
- [[计算机系统结构/index|试题册索引]]
@@ -0,0 +1,138 @@
---
tags:
- 计算机系统结构
- 复习
- 流水线
create time: 2026-06-15 10:00
---
# 流水线技术
## 概述
本文档系统讲解指令流水线的基本原理、冲突类型(结构/数据/控制)、流水线调度策略(预约表与冲突向量)以及时空图分析。流水线是提升处理器吞吐率的核心技术,也是历年考试的高频难点。
> [!tip] 考试重点
> 流水线调度(预约表→禁止表→冲突向量→状态转移图)是分析题的核心考点,需完整掌握从预约表到最优调度策略的全过程。数据相关的三种类型(RAW/WAR/WAW)也常考。
## 正文
### 一、流水线基本概念
**核心思想**:将指令执行过程分成多个阶段(段),不同指令的不同阶段可以**重叠执行**,从而提高吞吐率。
```mermaid
graph LR
A["IF: Fetch"] --> B["ID: Decode"] --> C["EX: Execute"] --> D["MEM: Memory"] --> E["WB: Write Back"]
```
**性能指标**:
| 指标 | 公式 | 说明 |
|------|------|------|
| 吞吐率 | $TP = n / T_k$ | $n$ 个任务在 $T_k$ 时间内完成 |
| 加速比 | $S = T_{seq} / T_k$ | 串行 vs 流水线 |
| 效率 | $E = S / k$ | 流水线的利用率($k$ 为段数) |
### 二、流水线冲突
#### 2.1 结构冲突(Structural Hazard)
多条指令在同一时钟周期争用**同一硬件资源**。
> [!example] 典型场景
> 指令和数据共用一个存储端口,取指和访存同时发生冲突。**解决方案**:分离指令 Cache 和数据 Cache。
#### 2.2 数据冲突(Data Hazard)
后续指令需要使用前面指令的运算结果,但结果尚未写回。
| 类型 | 全称 | 含义 | 示例 |
|:----:|------|------|------|
| **RAW** | Read After Write | 后读前写(真数据相关) | `ADD R1,... ; MOV R2,R1` |
| **WAR** | Write After Read | 后写前读(反相关) | `MOV R2,R1 ; ADD R1,...` |
| **WAW** | Write After Write | 后写前写(输出相关) | `ADD R1,... ; SUB R1,...` |
**解决方案**:
- **数据前推/旁路**(Forwarding):将结果直接从 EX/MEM 传递到下一条指令的 EX 输入
- **插入气泡**(Stall):暂停流水线等待数据就绪
- **编译器调度**:重排指令顺序避免冲突
> [!question] 定向传送(旁路)为什么不能完全消除数据冲突?
> Load-use 冲突:从内存 Load 的数据在 EX 段结束时才可用,但下一条指令可能需要在 EX 段开始时就使用它,此时必须插入一个气泡。
#### 2.3 控制冲突(Control Hazard)
分支指令的执行结果决定后续取指方向,但在分支确定前已经预取了后续指令。
**解决方案**:
- **暂停**:等待分支结果确定后再取指(最简单但性能差)
- **预测**:静态预测(总预测不跳转/总预测跳转)或动态预测(分支历史表)
- **延迟分支**:在分支指令后填充一条必定执行的指令(延迟槽)
### 三、流水线调度(非线性流水线)
#### 3.1 预约表
记录一个任务在各时钟周期对各段的占用情况,是调度分析的起点。
#### 3.2 禁止表
从预约表中提取同一段被**两次以上占用**的时间间隔,构成禁止表 $F$。
#### 3.3 冲突向量
根据禁止表构建初始冲突向量 $C_0$:
- 冲突向量的第 $i$ 位为 1 表示间隔 $i$ 个周期不能进入新任务
- 位数 = 最大禁止间隔
#### 3.4 状态转移图
对每个状态(冲突向量),计算允许的间隔 $j$ 对应的新状态:
$$C_{new} = SHR^{(j)}(C) \lor C_0$$
其中 $SHR^{(j)}$ 表示右移 $j$ 位,$\lor$ 表示按位或。
> [!example] 调度示例
> 禁止表 $F = \{1, 3, 4, 6\}$,则 $C_0 = 101101$
>
> - $j=2$:$SHR^{(2)}(101101) \lor 101101 = 001011 \lor 101101 = 101111 = C_1$
> - $j=5$:$SHR^{(5)}(101101) \lor 101101 = 000001 \lor 101101 = 101101 = C_0$
>
> 在 $C_1$ 状态:$j=2$ 得 $C_1$,$j=5$ 得 $C_0$
#### 3.5 最优调度策略
在状态转移图中找出所有**闭合回路**,计算每个回路的平均延迟:
$$\text{平均延迟} = \frac{\text{回路中各间隔之和}}{\text{回路长度}}$$
平均延迟最小的回路即为最优调度策略。
| 调度策略 | 平均延迟 |
|:--------:|:--------:|
| (5) | 5 |
| (2, 5) | 3.5 |
| (2, 7) | 4.5 |
最优策略为 **(2, 5)**,平均延迟 3.5 拍。
### 四、时空图分析
时空图是分析流水线性能的直观工具,横轴为时间(时钟周期),纵轴为流水线段或功能部件。
**绘图步骤**:
1. 确定每个任务的各段执行时间
2. 根据调度策略确定任务间的间隔
3. 注意数据相关的约束(无定向传送时需插入气泡)
4. 计算总完成时间和吞吐率
## 关联笔记
- [[计算机系统结构/复习文档/计算机系统结构基础与定量原理]]
- [[计算机系统结构/复习文档/存储系统与Cache]]
- [[计算机系统结构/index|试题册索引]]
@@ -0,0 +1,126 @@
---
tags:
- 计算机系统结构
- 复习
- 定量原理
create time: 2026-06-15 10:00
---
# 计算机系统结构基础与定量原理
## 概述
本文档覆盖计算机系统结构课程的基石内容:系统结构的定义与层次、Flynn 分类法、四大定量原理(Amdahl 定律、CPU 性能公式、以经常性事件为重点、程序局部性原理)。这些概念是后续学习流水线、Cache、指令系统等专题的理论基础。
> [!tip] 考试重点
> Amdahl 定律的计算题几乎每年必考,需熟练掌握公式推导和应用。Flynn 分类、系统结构定义常以选择题出现。
## 正文
### 一、计算机系统结构的定义
Amdahl 提出的经典定义:**计算机系统结构是机器语言程序员所见到的计算机属性**,即指令集架构(ISA)层面。
| 层次 | 程序员类型 | 所见属性 |
|:----:|:----------:|----------|
| 应用语言 | 应用程序员 | 应用语言虚拟机 |
| 高级语言 | 高级语言程序员 | 高级语言虚拟机 |
| **系统结构** | **机器语言程序员** | **指令集架构 ISA** |
| 组成 | 逻辑设计员 | 数据通路、控制、存储接口 |
| 实现 | 硬件工程师 | 电路、芯片、工艺 |
> [!question] 为什么系统结构的定义以"机器语言程序员"为基准?
> 因为 ISA 是软件和硬件的分界面。机器语言程序员直接与指令集打交道,而 ISA 之上的软件可以在不同硬件实现上运行,ISA 之下的硬件变化不影响软件兼容性。
### 二、Flynn 分类法
按照**指令流**和**数据流**的多倍性进行分类:
| 类型 | 指令流 | 数据流 | 典型代表 |
|:----:|:------:|:------:|----------|
| **SISD** | 单 | 单 | 传统单处理器 |
| **SIMD** | 单 | 多 | 向量处理器、GPU |
| **MISD** | 多 | 单 | **理论分类,无实际计算机** |
| **MIMD** | 多 | 多 | 多处理器、集群 |
> [!note] MISD 为何不存在?
> MISD 要求同一个数据被多条不同指令同时处理,这在冯·诺依曼架构下没有实际应用场景。某些容错系统(如航天计算机)被部分学者归为 MISD,但学界主流观点认为 MISD 仅为理论分类。
### 三、四大定量原理
#### 3.1 以经常性事件为重点
**核心思想**:对经常发生的情况赋予优先的处理权和资源使用权,从而获得更大的总体改善。
> [!example] 实例
> CPU 中加法操作远多于除法操作,因此将加法器设计得尽可能快,比优化除法器更能提升整体性能。
#### 3.2 Amdahl 定律
$$S = \frac{1}{(1-f) + \frac{f}{n}}$$
| 符号 | 含义 |
|:----:|------|
| $S$ | 系统加速比 |
| $f$ | 被改进部分在原系统中所占时间比例 |
| $n$ | 被改进部分的性能提升倍数 |
**关键结论**:
- 当 $n \to \infty$ 时,$S_{max} = \frac{1}{1-f}$,加速比有上限
- 系统性能受限于**最慢的部件**(瓶颈)
> [!question] 某功能占系统时间 20%,提升 15 倍,加速比是多少?
> $S = \frac{1}{0.8 + 0.2/15} = \frac{1}{0.8133} \approx 1.23$。即使将该功能提升到无限快,加速比上限也只有 $1/0.8 = 1.25$。
#### 3.3 CPU 性能公式
$$CPU 时间 = IC \times CPI \times \tau$$
| 符号 | 含义 | 单位 |
|:----:|------|------|
| $IC$ | 指令条数(Instruction Count) | 条 |
| $CPI$ | 每条指令平均时钟周期数 | 周期/条 |
| $\tau$ | 时钟周期时间 | 秒/周期 |
**派生指标**:
- $MIPS = \frac{f}{CPI \times 10^6}$($f$ 为主频,单位 Hz)
- $MIPS = \frac{IC}{T \times 10^6}$($T$ 为执行时间,单位 秒)
> [!warning] MIPS 的局限性
> 不同指令集的 MIPS 不可直接比较。RISC 机器 MIPS 通常高于 CISC,但不代表性能更优——RISC 需要更多指令完成同样任务。
#### 3.4 程序局部性原理
程序在执行时所访问的地址空间分布不是随机的,而是**相对地聚集**。
- **时间局部性**:最近被访问的地址很可能再次被访问(如循环变量)
- **空间局部性**:与当前访问地址相邻的地址很可能被访问(如数组遍历)
> [!tip] 局部性原理的应用
> Cache、虚拟内存、预取技术都建立在局部性原理之上。理解局部性是理解整个存储层次设计的关键。
```mermaid
graph LR
A["Time Locality"] --> B["Loop Variables"]
A --> C["Stack Access"]
D["Space Locality"] --> E["Array Traversal"]
D --> F["Sequential Code"]
B --> G["Cache Design"]
E --> G
```
### 四、性能评价指标汇总
| 指标 | 公式 | 适用场景 |
|------|------|----------|
| 执行时间 | $T = IC \times CPI \times \tau$ | 通用 |
| MIPS | $f / (CPI \times 10^6)$ | 同一 ISA 比较 |
| MFLOPS | 浮点操作数 / $(T \times 10^6)$ | 科学计算 |
| 加速比 | $T_{old} / T_{new}$ | 优化前后对比 |
## 关联笔记
- [[计算机系统结构/复习文档/流水线技术]]
- [[计算机系统结构/复习文档/存储系统与Cache]]
- [[计算机系统结构/index|试题册索引]]