前置知识: 计算机基础

计算机组成原理

7 minIntermediate2026/6/14

计算机组成原理:指令系统、CPU数据通路、控制器设计、存储体系与I/O系统

1. 计算机系统层次结构

计算机系统从底向上分为多个层次:

应用软件层

系统软件层(操作系统、编译器)

指令集架构层(ISA)

微架构层(数据通路、控制器)

数字逻辑层(逻辑门、寄存器)

电路层(晶体管、连线)

指令集架构(ISA) 是软件和硬件之间的接口,定义了指令格式、寻址方式、寄存器组等。

2. 指令系统

2.1 指令格式

指令由操作码和操作数组成:

┌──────────┬──────────┬──────────┐
│ 操作码   │ 源操作数  │ 目标操作数 │
│ (opcode) │ (src)    │ (dst)    │
└──────────┴──────────┴──────────┘

指令字长分类

特点代表
定长指令所有指令长度相同RISC(MIPS、ARM)
变长指令指令长度可变CISC(x86)

2.2 寻址方式

寻址方式有效地址特点
立即寻址操作数在指令中最快,操作数范围有限
直接寻址EA=AEA = A简单,地址空间受限
间接寻址EA=(A)EA = (A)灵活,需两次访存
寄存器寻址EA=RiEA = R_i最快,寄存器数量有限
寄存器间接EA=(Ri)EA = (R_i)灵活,一次访存
偏移寻址EA=(Ri)+AEA = (R_i) + A适合数组、结构体
相对寻址EA=PC+AEA = PC + A适合转移指令

2.3 RISC vs CISC

特性RISCCISC
指令数量少(<200)多(>300)
指令长度定长变长
寻址方式
执行周期1个周期多个周期
流水线易实现难实现
寄存器
代表MIPS、ARM、RISC-Vx86

3. CPU 数据通路

3.1 单周期数据通路

单周期处理器每条指令在一个时钟周期内完成:

PC → 指令存储器 → 译码 → 执行 → 数据存储器 → 写回

关键组件:

  • PC(程序计数器):存储下一条指令地址
  • 指令存储器:存放指令
  • 寄存器文件:32个通用寄存器
  • ALU:算术逻辑单元
  • 数据存储器:读写数据
  • 多路选择器:选择数据来源

时钟周期:取指 + 译码 + 执行 + 访存 + 写回中最慢路径的延迟。

3.2 多周期数据通路

将指令执行拆分为多个时钟周期:

阶段操作所需周期
IF取指令1
ID指令译码/读寄存器1
EX执行/计算地址1
MEM访问存储器0~2
WB写回寄存器0~1

优势:不同指令使用不同周期数,硬件资源可复用。

3.3 ALU 设计

ALU 支持的基本运算:

ALU 结果={A+B加法AB减法A AND BA OR BAB异或A<B?1:0比较\text{ALU 结果} = \begin{cases} A + B & \text{加法} \\ A - B & \text{减法} \\ A \text{ AND } B & \text{与} \\ A \text{ OR } B & \text{或} \\ A \oplus B & \text{异或} \\ A < B ? 1 : 0 & \text{比较} \end{cases}

标志位

  • Z(Zero):结果为零
  • N(Negative):结果为负
  • C(Carry):进位
  • V(Overflow):溢出

4. 控制器设计

4.1 硬布线控制器

通过组合逻辑电路直接产生控制信号:

控制信号=f(指令操作码,当前状态,标志位)\text{控制信号} = f(\text{指令操作码}, \text{当前状态}, \text{标志位})

优点:速度快 缺点:设计复杂,不易修改和扩展

4.2 微程序控制器

将控制信号编码为微指令,存储在控制存储器中:

指令操作码 → 微地址形成部件 → 控制存储器 → 微指令 → 控制信号

微指令格式

  • 水平型:每位对应一个控制信号,并行度高
  • 垂直型:编码表示操作,指令短但需译码

优点:灵活,易于修改 缺点:速度较慢(需访问控制存储器)

5. 流水线技术

5.1 基本流水线

五级流水线:

IF → ID → EX → MEM → WB
     IF → ID → EX → MEM → WB
          IF → ID → EX → MEM → WB

理想情况下,nn 条指令执行时间:

Tpipeline=(k+n1)×ΔtT_{pipeline} = (k + n - 1) \times \Delta t

其中 kk 为流水线级数,Δt\Delta t 为时钟周期。

5.2 流水线冒险

数据冒险:后续指令需要前一条指令的结果。

解决方案:

  • 数据转发(Forwarding/Bypassing)
  • 插入气泡(Stall)
  • 指令重排序(编译器优化)

控制冒险:分支指令改变执行流。

解决方案:

  • 分支预测(静态/动态)
  • 延迟分支
  • 提前计算分支结果

结构冒险:多条指令同时访问同一硬件资源。

解决方案:

  • 哈佛架构(指令/数据分离)
  • 资源复制

5.3 分支预测

静态预测

  • 总是预测不跳转
  • 总是预测跳转
  • 根据方向预测(向后跳则跳转)

动态预测

1-bit 预测器:记录上次分支结果

2-bit 预测器(饱和计数器):

强不跳转(00) → 弱不跳转(01) → 弱跳转(10) → 强跳转(11)

预测准确率:

P2bit>P1bitP_{2bit} > P_{1bit}

6. 存储体系

6.1 存储层次结构

寄存器(~1ns, <1KB)

L1 Cache(~1ns, 32~64KB)

L2 Cache(~5ns, 256KB~1MB)

L3 Cache(~10ns, 2~64MB)

主存 DRAM(~50ns, 4~128GB)

SSD(~100μs, 256GB~4TB)

HDD(~10ms, 1~20TB)

6.2 Cache 映射方式

直接映射

Cache 行号=主存块号modCache 行数\text{Cache 行号} = \text{主存块号} \mod \text{Cache 行数}

全相联映射:主存块可映射到任意 Cache 行。

组相联映射

组号=主存块号mod组数\text{组号} = \text{主存块号} \mod \text{组数}

每组 nn 路,称为 nn 路组相联。

6.3 Cache 性能

命中率

h=Cache 命中次数总访问次数h = \frac{\text{Cache 命中次数}}{\text{总访问次数}}

平均访问时间

tavg=h×tcache+(1h)×tmemoryt_{avg} = h \times t_{cache} + (1-h) \times t_{memory}

替换策略:LRU、FIFO、Random、LFU

写策略

  • 写直达(Write Through):同时写 Cache 和主存
  • 写回(Write Back):只写 Cache,替换时写回主存

7. I/O 系统

7.1 I/O 控制方式

方式CPU 参与数据传送
程序查询全程参与CPU 逐字传送
中断方式启动后等待中断CPU 逐字传送
DMA仅初始化和结束DMA 控制器传送
通道方式仅启动通道处理器传送

7.2 DMA 传送

DMA(直接存储器存取)允许 I/O 设备直接与主存交换数据:

DMA 传送效率=数据量传送时间\text{DMA 传送效率} = \frac{\text{数据量}}{\text{传送时间}}

DMA 与 CPU 可能争用总线,解决方式:

  • 周期窃取(Cycle Stealing)
  • 交替访存
  • CPU 暂停模式

7.3 中断系统

中断处理流程:

1. 中断请求 → 2. 中断判优 → 3. 中断响应
→ 4. 保存现场 → 5. 中断服务 → 6. 恢复现场 → 7. 中断返回

中断优先级通常:机器错误 > 访管 > 程序性中断 > 外部中断 > I/O 中断