713 字
4 分钟
计算机组成原理:从门电路到一个能跑 Linux 的 CPU

计算机组成原理:从门电路到 CPU#

从晶体管到逻辑门#

CPU 的最底层是 MOSFET 晶体管。一个 N 沟道 MOSFET 就是一个电压控制的开关:栅极电压高于阈值 → 导通,否则关断。

CMOS 反相器只用两个晶体管:

VDD ──[PMOS]── OUT ──[NMOS]── GND
│
IN

IN=0 → PMOS 导通,OUT=VDD(1) IN=1 → NMOS 导通,OUT=GND(0)

所有的逻辑门——NAND、NOR、XOR——都是这个结构的变体。NAND 需要 4 个晶体管,一个完整 CPU 需要数十亿个。

组合逻辑 → 时序逻辑#

组合逻辑的输出仅取决于当前输入。加入触发器(Flip-Flop)后,电路有了”记忆”:

  • D 触发器:在时钟沿采样 D 输入,保存到 Q 输出
  • 寄存器:一组 D 触发器的集合(32 位寄存器 = 32 个 DFF)
  • 寄存器堆:多个寄存器的阵列,通过地址选择读写

CPU 的本质就是:组合逻辑做计算 + 寄存器存状态 + 时钟驱动节奏。

五级流水线 CPU#

经典 RISC 五级流水线:

取指(IF) → 译码(ID) → 执行(EX) → 访存(MEM) → 写回(WB)

每一级做的事:

阶段动作关键硬件
IFPC → 指令存储器 → 取出指令指令 Cache、PC 寄存器
ID解码指令,读寄存器堆寄存器堆(2 读 1 写端口)
EXALU 计算,地址生成ALU、前推多路选择器
MEM数据存储器读写数据 Cache
WB结果写回寄存器寄存器堆写端口

冒险处理#

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

add r1, r2, r3 # r1 = r2 + r3
sub r4, r1, r5 # r4 = r1 - r5 ← 需要 r1,但 r1 还未写回

解决方案——前推(Forwarding):ALU 的结果在 EX 阶段就旁路到下一条指令的 EX 输入,无需等待写回。

控制冒险:分支指令导致取指地址不确定。用分支预测——BTB(Branch Target Buffer)+ 两位饱和计数器——现代 CPU 的预测准确率 > 95%。

Cache 层次结构#

访存是 CPU 最大的瓶颈。现代 CPU 的 Cache 层次:

L1 Cache: 32KB, 1-2 cycles 延迟
L2 Cache: 256KB-1MB, 10-20 cycles
L3 Cache: 8-32MB, 30-50 cycles
DRAM: 8-64GB, 100-300 cycles

Cache 的核心参数:块大小、相联度、替换策略(LRU)、写策略(write-back/write-through)。

缓存一致性(MESI 协议)#

多核系统的经典问题:Core 1 修改了地址 X,Core 2 的 L1 Cache 中 X 的副本过时了。

MESI 协议用 4 个状态解决此问题:

  • Modified:独占且已修改
  • Exclusive:独占且干净
  • Shared:多核共享
  • Invalid:无效

理解计算机体系结构不需要记住所有的细节。需要建立的是一种”分层抽象”的思维习惯——每一层对上层隐藏细节,对下层提出要求。带着这种思维去理解任何复杂系统,都会豁然开朗。

计算机组成原理:从门电路到一个能跑 Linux 的 CPU
https://mizuki.mysqil.com/posts/computer-architecture-basics/
作者
AI庄周会不会梦到电子蝴蝶
发布于
2025-05-05
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00