中央处理器 CPU
CPU结构、数据通路、控制器原理、异常中断、流水线技术与多处理器架构
1. CPU 功能与结构
中央处理器(CPU)是计算机系统的核心部件,由运算器和控制器两大部分组成,负责解释和执行指令。
1.1 CPU 的基本功能
- 指令控制:程序的顺序控制,保证指令按规定顺序执行
- 操作控制:产生每条指令的操作控制信号,送往相应部件
- 时间控制:对各种操作信号进行时间上的控制
- 数据加工:对数据进行算术和逻辑运算处理
1.2 CPU 的基本结构
控制器(CU核心):负责指挥协调各部件工作,是CPU的指挥中心
1.3 运算器与控制器组成
🔢 运算器组成
- 算术逻辑单元 ALU
- 累加寄存器 ACC
- 程序状态字寄存器 PSW
- 通用寄存器组
- 暂存寄存器
🎮 控制器组成
- 程序计数器 PC
- 指令寄存器 IR
- 指令译码器 ID
- 控制单元 CU(核心)
- 时序系统
- 中断系统
2. 指令执行过程
CPU执行一条指令的时间称为指令周期。不同指令的指令周期不同,通常由若干个机器周期组成。
2.1 指令周期的基本概念
- 指令周期:CPU从主存取出一条指令并执行这条指令的时间
- 机器周期(CPU周期):通常用从主存读取一条指令的最短时间作为基准,如取指周期、间址周期等
- 时钟周期(节拍):CPU操作的最小时间单位,一个机器周期包含若干时钟周期
指令周期 > 机器周期 > 时钟周期
一个指令周期 = 若干个机器周期
一个机器周期 = 若干个时钟周期(节拍)
2.2 指令周期的四个阶段
一个完整的指令周期可能包含以下四个机器周期:
📥 取指周期
任务:从主存取出指令
PC → MAR → 主存 → MDR → IR
PC + 1 → PC(指向下条指令)
所有指令都有取指周期
🔍 间址周期
任务:取有效地址
IR地址码 → MAR → 主存
读出有效地址 → MDR / Ad(IR)
只有间址寻址的指令才有
⚡ 执行周期
任务:执行指令操作
不同指令操作不同
如加法、传送、跳转等
所有指令都有执行周期
🚨 中断周期
任务:处理中断请求
保存断点、关中断
向量地址 → PC
只有中断时才有
• 最简单的指令(如空操作NOP):取指周期 + 执行周期
• 间址寻址的指令:取指周期 + 间址周期 + 执行周期
• 有中断时:执行周期后还有中断周期
• 不是每条指令都有四个周期,取指和执行是必须的
3. 数据通路
数据通路是指数据在功能部件之间传送的路径,以及实现这些路径的控制逻辑。
2.1 单周期数据通路
单周期CPU中,一条指令在一个时钟周期内完成。所有指令的执行时间相同,等于最慢指令的时间。
2.2 专用寄存器
| 寄存器 | 英文名 | 作用 | 用户可见 |
|---|---|---|---|
| PC | Program Counter | 存放下一条指令地址,自动加1 | 否(用户不可直接访问) |
| IR | Instruction Register | 存放当前正在执行的指令 | 否 |
| MAR | Memory Address Register | 存放访存地址 | 否 |
| MDR | Memory Data Register | 存放从主存读出/写入的数据 | 否 |
| ACC | Accumulator | 累加器,存放操作数或结果 | 是 |
| PSW | Program Status Word | 程序状态字,存放标志位(Z/C/V/S等) | 部分可见 |
4. 控制器功能与原理
控制器是CPU的指挥中心,负责协调计算机各部件有序地工作,是整个计算机系统的核心控制单元。
4.1 控制器的功能
- 取指令:从主存中取出一条指令,并指出下一条指令在主存中的位置(PC自动增量或跳转)
- 分析指令(译码):对指令进行译码,分析指令的操作性质和操作数来源,产生相应的控制信号
- 执行指令:指挥各部件按指令要求完成操作,包括数据传送、运算、控制转移等
- 控制数据通路:产生各种控制信号,控制数据在各部件之间正确流动
4.2 硬布线控制器
硬布线控制器又称组合逻辑控制器,控制信号由硬件电路直接产生。
🔧 工作原理
1. 指令寄存器IR的内容送入指令译码器,产生对应的译码信号
2. 时序系统产生节拍信号(时钟周期)
3. 译码信号 + 节拍信号 + 状态条件(PSW)输入组合逻辑电路
4. 组合逻辑电路输出各种微操作控制信号
• 指令译码器:识别指令类型,输出对应的译码信号
• 时序系统:产生节拍电位和工作脉冲
• 组合逻辑电路:根据输入产生控制信号
• 状态条件:来自PSW和ALU的状态标志
4.3 微程序控制器
微程序控制器用存储逻辑代替组合逻辑,控制信号存放在控制存储器中。
每条机器指令对应一段微程序,存放在控制存储器(ROM)中。
• 微操作:执行一个微命令的操作
• 微指令:一组微命令的集合,存放在控存的一个单元中
• 微程序:微指令的有序集合,对应一条机器指令的执行过程
• 控制存储器(CM):存放微程序的ROM,通常几十KB~几百KB
4.4 微指令的格式
| 格式类型 | 结构 | 特点 | 适用场景 |
|---|---|---|---|
| 水平型微指令 | 操作控制字段 + 顺序控制字段 | 并行能力强,微指令短,控存容量大 | 高性能CPU、指令简单 |
| 垂直型微指令 | 微操作码 + 目的地 + 源地址 | 类似机器指令格式,并行能力弱,控存容量小 | 指令复杂、控存受限 |
| 混合型微指令 | 两者结合 | 折中方案,兼顾并行性和控存容量 | 现代CPU常用 |
4.5 硬布线与微程序控制器对比
| 对比项 | 硬布线控制器 | 微程序控制器 |
|---|---|---|
| 工作原理 | 组合逻辑电路产生控制信号 | 微程序解释机器指令,控存提供控制信号 |
| 执行速度 | 速度快(硬件直接产生) | 速度慢(需读控存,增加访存时间) |
| 设计难度 | 设计复杂,电路庞大,验证困难 | 设计规整,类似程序设计,易于实现 |
| 修改扩展 | 修改困难,需重新设计电路 | 易于修改,只需修改控存内容 |
| 灵活性 | 不灵活,指令系统固定 | 灵活,易于实现复杂指令 |
| 适用场景 | RISC(指令简单、数量少) | CISC(指令复杂、数量多) |
| 核心部件 | 组合逻辑电路网络 | 控制存储器(ROM)+ 微指令寄存器 |
| 成本 | 硬件成本高 | 控存成本,但整体成本较低 |
• 微程序控制器中,控存用ROM实现,断电后内容不丢失
• 微指令的地址由:下址字段、操作码译码、增量方式等决定
• 现代CPU往往结合两种方式:简单指令用硬布线,复杂指令用微程序
5. 异常和中断机制
异常和中断是CPU处理突发事件和外部请求的重要机制,是现代计算机系统实现并发、实时处理的关键技术。
5.1 异常与中断的分类
🚨 内中断(异常/Exception)
来源:CPU内部正在执行的指令引起
特点:与当前指令直接相关,指令执行过程中产生
检测:在指令执行过程中检测
举例:非法操作码、除数为零、溢出、缺页故障
⚡ 外中断(中断/Interrupt)
来源:CPU外部硬件设备产生
特点:与当前指令无关,外部事件引起
检测:在指令执行结束后检测(中断周期)
举例:时钟中断、I/O中断、硬件故障中断
5.2 异常的详细分类
| 异常类型 | 英文 | 特点 | 典型举例 | 返回行为 |
|---|---|---|---|---|
| 故障(Fault) | Fault | 指令执行中检测到错误,可以修复后重新执行 | 缺页故障、段故障、除零 | 返回到引起故障的指令,重新执行 |
| 陷阱(Trap) | Trap | 有意安排的异常,用于系统调用 | 系统调用、断点设置、调试陷阱 | 返回到下一条指令,继续执行 |
| 终止(Abort) | Abort | 严重错误,无法恢复,程序终止 | 硬件错误、非法地址访问、控制器出错 | 终止程序,不返回 |
• 陷阱:有意的,返回下条指令继续(如int指令触发系统调用)
• 终止:不可恢复,程序被迫终止(如硬件故障)
5.3 中断的详细分类
| 中断类型 | 特点 | 响应方式 | 典型举例 |
|---|---|---|---|
| 可屏蔽中断(INTR) | 可通过IF标志位屏蔽,CPU可选择是否响应 | IF=1时响应,IF=0时忽略 | 键盘、鼠标、磁盘I/O中断 |
| 不可屏蔽中断(NMI) | 必须响应,不能被IF屏蔽 | 立即响应,优先级最高 | 电源掉电、硬件故障、内存错误 |
5.4 异常和中断的检测与响应过程
5.5 中断向量与中断优先级
📋 中断向量
定义:中断服务程序的入口地址
中断向量表:存放所有中断向量的表,每个中断对应一个向量号
位置:通常在主存低地址区(如x86的0~1023号)
作用:快速定位中断处理程序,实现硬件自动响应
⭐ 中断优先级
作用:多个中断同时请求时,决定响应顺序
优先级原则:硬件故障 > 不可屏蔽 > 可屏蔽
实现方式:硬件排队器、软件查询、中断控制器
典型顺序:NMI > 硬件故障 > 时钟 > I/O > 用户程序
5.6 中断嵌套
条件:开中断(IF=1),新中断优先级高于当前处理的中断。
注意:中断嵌套层数有限,过多嵌套可能导致栈溢出。
• 故障返回当前指令重执行,陷阱返回下条指令,终止不返回
• 中断向量是中断服务程序的入口地址,向量表在主存低地址区
• 中断嵌套要求新中断优先级高于当前中断,且开中断(IF=1)
6. 指令流水线
指令流水线是指将一条指令的执行过程分解为若干阶段,每个阶段由不同的功能部件完成,从而实现多条指令的重叠执行。
6.1 五级流水线
经典的MIPS五级流水线将指令执行分为五个阶段:
6.2 流水线时空图动画演示
点击播放,观看5条指令在五级流水线中的执行过程。
6.3 流水线性能指标
加速比 = n×k / (k + n - 1),当n很大时,加速比趋近于k(级数)
7. 流水线冒险
流水线冒险是指流水线中某些指令不能在下一个时钟周期执行,导致流水线暂停的现象。
7.1 三种冒险类型
类型:RAW(写后读,最常见)、WAR(读后写)、WAW(写后写)
解决:数据旁路(转发/直通 Forwarding)、插入气泡(暂停)、编译器调度
解决:分支预测、分支延迟槽、提前计算分支目标、插入气泡
7.2 数据冒险与转发演示
观察存在数据依赖的指令序列,以及转发(Forwarding)技术如何解决数据冒险。
三条指令都依赖$1,存在RAW数据冒险。使用转发技术可消除大部分停顿。
注意:load-use 数据冒险(Load指令后紧跟使用其结果的指令)无法完全用转发解决,需要插入1个气泡。
8. 超标量与动态流水线
为了进一步提高指令级并行度,现代CPU采用了超标量、超流水线、动态流水线等技术,实现更高的IPC(每周期指令数)。
8.1 超标量处理器的基本概念
超标量(Superscalar):处理器在一个时钟周期内可以发射多条指令,拥有多个独立的执行单元。
🚀 超标量的特点
• 多个执行单元并行工作
• 每周期可发射多条指令
• IPC理论上可达发射宽度
• 硬件负责指令调度和冒险检测
• 空间并行(增加硬件资源)
⚙️ 典型结构
• 多个取指单元和译码单元
• 多个ALU(整数、浮点)
• 多个Load/Store单元
• 保留站(Reservation Station)
• 重排序缓冲区(ROB)
8.2 三种提高并行度的技术对比
| 技术 | 基本思想 | 特点 | IPC |
|---|---|---|---|
| 普通流水线 | 单发射,每个周期发射1条指令 | 五级流水线,每周期最多完成1条 | ≤ 1 |
| 超标量 | 多套功能部件,每周期发射多条指令 | 空间并行,硬件复杂度高 | > 1 |
| 超流水线 | 把流水线段分得更细,主频更高 | 时间并行,周期短,级数多 | ≈ 1 |
| VLIW超长指令字 | 一条指令包含多个操作,编译器调度 | 硬件简单,依赖编译器 | > 1 |
8.3 动态流水线与动态调度
动态流水线:流水线的各段可以按不同功能连接方式工作,多种运算可以同时进行。
| 类型 | 定义 | 特点 | 优缺点 |
|---|---|---|---|
| 静态流水线 | 同一时间内各段只能按同一种功能连接方式工作 | 指令按序发射、按序执行、按序完成 | 控制简单,效率低,冒险多 |
| 动态流水线 | 同一时间内各段可以按不同功能连接方式工作 | 多功能并行,提高效率 | 控制复杂,硬件成本高 |
🎯 动态调度(Dynamic Scheduling)
定义:硬件在运行时决定指令的执行顺序,而非编译时静态决定。
核心思想:指令可以不按程序顺序执行,只要操作数就绪就可以开始执行。
目的:避免因数据冒险导致的流水线停顿,提高指令级并行度。
关键技术:保留站(Reservation Station)、寄存器重命名、重排序缓冲区(ROB)。
8.4 乱序执行与推测执行
指令I2可能因等待数据而停顿,I3如果操作数就绪可以先执行,提高流水线利用率。
🔀 乱序执行(Out-of-Order Execution)
原理:指令可以不按程序顺序执行
条件:操作数就绪即可执行,无需等待前序指令
保证:结果必须按序提交(通过ROB)
好处:减少数据冒险造成的停顿
典型算法:Tomasulo算法、Scoreboard算法
🔮 推测执行(Speculative Execution)
原理:在条件不确定时提前执行指令
场景:分支预测后,提前执行预测路径的指令
机制:预测正确则提交结果,错误则丢弃
关键:分支预测的准确率
应用:现代高性能CPU普遍采用
8.5 与基本流水线的对比
| 对比项 | 基本流水线 | 超标量流水线 | 动态流水线 |
|---|---|---|---|
| 指令发射 | 单发射(每周期1条) | 多发射(每周期多条) | 动态调度,可乱序发射 |
| 执行顺序 | 按序执行 | 可乱序执行 | 乱序执行,按序完成 |
| 执行单元 | 单一执行单元 | 多个并行执行单元 | 多个 + 保留站 |
| IPC | ≤ 1 | > 1(可达2~4) | > 1(实际更高) |
| 硬件复杂度 | 低 | 高 | 非常高(ROB、保留站) |
| 冒险处理 | 停顿/转发 | 硬件检测 + 转发 | 动态调度避免停顿 |
8.6 相关技术
🔮 分支预测
预测分支是否跳转,提前取指
静态预测:总是跳/总是不跳
动态预测:根据历史记录预测
提高流水线效率,减少分支损失
📦 寄存器重命名
用物理寄存器重命名逻辑寄存器
消除WAR和WAW名相关
支持乱序执行和指令重排
Tomasulo算法的核心思想
• 超流水线:流水线级数更多、主频更高、IPC ≈ 1,时间并行
• 动态调度:硬件运行时决定指令顺序,避免数据冒险停顿
• 乱序执行:按序发射、乱序执行、按序完成(ROB保证)
• 推测执行:分支预测后提前执行,预测错误则丢弃结果
9. 多处理器基本概念
多处理器系统通过并行处理提高计算性能,是现代高性能计算机系统的核心架构。
9.1 Flynn分类法:SISD、SIMD、MIMD
| 类型 | 指令流 | 数据流 | 特点 | 典型应用 |
|---|---|---|---|---|
| SISD | 单指令流 | 单数据流 | 单处理器,串行执行,传统冯·诺依曼结构 | 单核CPU、传统微处理器 |
| SIMD | 单指令流 | 多数据流 | 一条指令控制多个数据并行处理,数据并行 | 向量处理器、GPU、MMX/SSE/AVX |
| MIMD | 多指令流 | 多数据流 | 多个处理器独立执行不同指令,任务并行 | 多核CPU、集群、分布式系统 |
| MISD | 多指令流 | 单数据流 | 多条指令处理同一数据(理论模型,实际少见) | 容错系统(如航天控制) |
9.2 向量处理器的基本概念
📊 向量处理器(Vector Processor)
定义:专门设计用于高效处理向量运算(数组运算)的处理器,属于SIMD类型。
核心特点:一条向量指令可以同时对多个数据元素执行相同操作。
结构:向量寄存器(存放多个数据元素)、向量运算单元、向量流水线。
优势:向量运算效率高,特别适合科学计算、数值模拟、图像处理。
典型产品:早期Cray系列向量机,现代CPU中的SIMD扩展(MMX、SSE、AVX等)。
🚀 向量运算优势
• 减少指令数量(一条指令处理多个数据)
• 减少循环开销
• 流水线效率高(无分支冒险)
• 内存访问效率高(连续访问)
⚡ SIMD扩展指令集
• MMX:64位向量,整数运算
• SSE:128位向量,浮点运算
• AVX:256位向量,更宽的并行度
• AVX-512:512位向量,高性能计算
9.3 硬件多线程的基本概念
硬件多线程技术允许单个处理器在多个线程间快速切换,提高资源利用率。
| 类型 | 切换时机 | 特点 | 优缺点 |
|---|---|---|---|
| 细粒度多线程 | 每时钟周期切换线程 | 轮转执行,流水线利用率高 | 切换开销小,但单个线程执行慢 |
| 粗粒度多线程 | 遇到长延迟事件时切换 | 只在停顿时切换,如Cache缺失 | 切换开销较大,但单个线程执行快 |
| 同时多线程(SMT) | 同一周期执行多个线程的指令 | 利用超标量的多个执行单元 | 资源利用率最高,Intel超线程技术 |
🧵 同时多线程(SMT / Hyper-Threading)
原理:一个物理核心同时执行多个线程,线程共享执行单元,提高资源利用率。
Intel超线程:一个物理核心虚拟成两个逻辑核心,理论性能提升30%左右。
条件:线程间互补使用资源,如一个线程访存时,另一个线程计算。
适用场景:多任务处理、服务器应用、并发程序。
9.4 多核处理器的基本概念
核心2~4个(低端)到64+个(高端服务器),共享片上Cache和内存接口。
🔧 多核结构特点
• 多个独立的处理器核心
• 共享L3 Cache(或私有L2)
• 共享内存控制器和I/O接口
• 片上互连网络(总线、交叉开关)
• 线程级并行(TLP)
⚡ 多核优势
• 真正的并行执行
• 吞吐率提高(多任务)
• 功耗效率提高
• 降低时钟频率压力
• 更适合多线程程序
9.5 共享内存多处理器(SMP)
SMP(Symmetric Multi-Processing):对称多处理器,多个处理器共享同一物理内存,所有处理器地位平等。
🌐 SMP基本特征
共享内存:所有处理器访问同一物理内存,地址空间统一。
对称性:所有处理器地位平等,无主从关系,任意处理器可执行任意任务。
单一操作系统:一个操作系统管理所有处理器,进程可在任意处理器上运行。
通信方式:通过共享内存通信,无需显式消息传递。
Cache一致性:需要维护各处理器Cache的一致性(MESI协议等)。
| 对比项 | SMP共享内存 | 分布式系统 |
|---|---|---|
| 内存 | 共享物理内存 | 各自私有内存 |
| 通信 | 共享变量、内存读写 | 消息传递(MPI) |
| 一致性 | 需要Cache一致性协议 | 无Cache一致性问题 |
| 扩展性 | 有限(总线瓶颈) | 好(可扩展到数百节点) |
| 编程 | 简单(多线程) | 复杂(消息传递) |
• 向量处理器:一条指令处理多个数据,适合科学计算
• 硬件多线程:细粒度(周期切换)、粗粒度(停顿切换)、SMT(同时执行)
• 多核处理器:多个核心共享片上Cache,线程级并行
• SMP:共享内存、对称性、单一OS,需要Cache一致性协议(如MESI)