Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

中央处理器

复习

  1. 第三十六章:了解了程序、程序计数器与指令译码
  2. 第三十七章:了解了控制器如何产生控制信号、协调各部件

TL;DR

  • CPU 主要由运算器(ALU)、控制器和寄存器组三部分构成
  • 它按“取指 → 译码 → 执行 → 写回“的循环不停工作
  • 前面造的 ALU、寄存器、存储器、控制器,到这里终于拼成了整机的大脑

正文

终于凑齐了

  回头看看这一路:我们造出了 ALU(第十八章)、寄存器和存储器(第十八、二十二章)、时钟(第二十五章)、控制器(第三十七章)。它们各自都能干活,但一直散落着。这一章,把它们装到一起——这就是中央处理器(CPU,Central Processing Unit)

  CPU 的核心部件有三块:

  1. 运算器:就是 ALU,负责算术和逻辑运算
  2. 控制器:负责译码指令、按节拍发出控制信号
  3. 寄存器组:包括通用寄存器,以及程序计数器(PC)、指令寄存器(IR)、状态寄存器(PSW)等专用寄存器

  再加上连接它们的数据通路,一台能“执行程序“的机器就成型了。

指令执行周期

  CPU 的工作,说白了就是不断重复下面这个循环:

  1. 取指:按照 PC 的地址,从存储器里把指令取出来,放进 IR,同时让 PC 指向下一条
  2. 译码:控制器分析 IR 里的指令,搞清“要做什么运算、操作数在哪“
  3. 执行:驱动 ALU 或其他部件完成运算
  4. 访存(不一定有):如果指令要读/写内存,就访问存储器
  5. 写回:把结果写回寄存器或内存,更新状态标志

  然后,回到第 1 步,继续下一条。这个循环快得惊人——现代 CPU 每秒能重复几十亿次。

数据通路

  数据在各部件之间怎么流动,由数据通路决定。典型路径有:

  • 寄存器 ↔ ALU:操作数送进 ALU,结果送回寄存器
  • 存储器 ↔ 寄存器:取指令、读写数据
  • 控制器 → 各部件:控制信号决定“谁开门、谁关门“

  可以把它想象成城市的道路网,数据是车,控制信号是红绿灯。

一个完整的例子

  来算 (a + b) * c,其中 a = 2、b = 3、c = 4:

MOV R1, #2     ; a = 2
MOV R2, #3     ; b = 3
MOV R3, #4     ; c = 4
ADD R4, R1, R2 ; R4 = a + b = 5
MUL R5, R4, R3 ; R5 = R4 * c = 20

  CPU 会这样一步步走:

取指 MOV R1,#2 → 执行 R1 = 2
取指 MOV R2,#3 → 执行 R2 = 3
取指 MOV R3,#4 → 执行 R3 = 4
取指 ADD R4,R1,R2 → 执行 R4 = 5
取指 MUL R5,R4,R3 → 执行 R5 = 20

  不管程序多复杂,拆开来都是这样一条条指令首尾相接。

分支与循环

  程序不总是老老实实往下走。遇到 iffor 时,就需要跳转:

CMP R1, #0     ; 比较 R1 和 0
BLE ELSE       ; 若 R1 <= 0,跳到 ELSE
MOV R2, #1     ; 否则 y = 1
JMP END
ELSE:
MOV R2, #0     ; y = 0
END:

  CMP 会设置状态标志,BLE 根据标志决定要不要修改 PC。一旦 PC 被改成别处,程序就跳走了。循环本质上就是“往回跳“。

让 CPU 更快

  照上面的流程,一条指令要好几拍才走完,听着就慢。工程师们想了两条路:

  1. 流水线:让多条指令的不同阶段重叠起来,就像工厂流水线一样,同一时刻有好几道工序在忙。这是第三十九章的内容。
  2. 缓存:CPU 比内存快太多,每次去内存取数据都要等半天。把常用数据放进缓存(第三十一章),能大幅减少等待。

  这两招是现代 CPU 性能的两大支柱,后面都会讲到。

思考题

  假设 CPU 按“取指 → 译码 → 执行 → 写回“四步执行,每一步要 1 个时钟周期。那么一条指令要 4 个周期,1000 条指令要 4000 个周期。

  如果让这四步像工厂流水线一样重叠起来,理想情况下 1000 条指令大约需要多少个周期?为什么?

小结

知识点

  • CPU 的三大组成部分
  • 指令执行周期:取指、译码、执行、访存、写回
  • 数据通路的概念
  • 分支与循环的硬件实现
  • 性能优化的两个方向:流水线与缓存

参考资料

  1. Wikipedia(zh):中央处理器:CPU 的基本概念和工作原理
  2. Wikipedia(zh):指令周期:CPU 执行指令的基本过程
  3. Wikipedia(zh):数据通路:数据通路的概念

推荐

思考题答案(仅供参考)

  理想情况下约需要 1000 + 4 - 1 = 1003 个周期。因为流水线填满后,每个时钟周期都能完成一条指令,只有最开始“填流水线“的那几拍是额外的。相比 4000 个周期,速度提升了近 4 倍,这正是流水线的威力——也是第三十九章要展开的内容。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪