CO——CPU

5.1 CPU 的功能和基本结构

5.1.1 CPU 的功能

CPU 主要分为控制器运算器两大部件。

  1. 指令控制(控制器完成):保证指令按照程序预定顺序自动执行;保证取指、分析、执行指令按顺序完成。

  2. 操作控制(控制器完成):产生一条指令对应的全部操作信号,发送到 CPU 内部执行部件,控制部件完成规定操作。

  3. 时序控制(控制器完成):对操作信号定时,严格控制信号的产生时刻与持续时间。

  4. 中断控制(控制器完成):及时响应内部异常、外部中断请求,例如缺页异常、键盘中断。

  5. 数据加工(运算器完成):完成算术运算、逻辑运算。

5.1.2 CPU 基本结构

  1. 运算器

    1. 组成:ALU 算术逻辑单元、通用寄存器 GPR、程序状态字 PSW。

    2. 功能:完成算术运算、逻辑运算、逻辑测试。

  2. 控制器

    1. 组成:CU 控制单元、PC 程序计数器、IR 指令寄存器、ID 指令译码器、MAR 存储器地址寄存器、MDR 存储器数据寄存器。

    2. 功能:取指令,计算下一条指令地址;指令译码;生成控制信号序列;控制指令执行步骤与数据流动方向。

5.1.3 CPU 中的主要寄存器

(1)运算器内寄存器
  1. 通用寄存器 GPR:暂存、传送数据;参与算术逻辑运算,保存运算结果。

  2. 累加器 ACC:暂存 ALU 运算结果,运算器至少配置一个累加器。

  3. 暂存寄存器 :存放来自数据总线 / 通用寄存器的操作数,送给 ALU;对程序员透明(不可见)

ALU 两个输入端需要同时输入操作数;若无暂存寄存器,读取第二个操作数时,前一个操作数会被总线覆盖,ALU 无法得到两个输入,输出错误结果。

  1. 程序状态字 PSW:保存运算产生的各类标志位。

    1. 运算标志:SF 符号标志、CF 进位标志、OF 溢出标志、ZF 零标志。由触发器硬件保存。其他标志:中断允许标志 IF、系统工作标志。

    2. 作用:记录程序与机器运行状态,是控制程序流转的重要依据。

(2)控制器内寄存器
  1. 程序计数器 PC :存放下一条将要执行的指令地址

    1. PC 位宽与主存地址位宽相同。

    2. 取指令:将 PC 内容作为地址访问主存,读出指令送入 IR,之后更新 PC。

    3. 顺序执行:PC 自动自增;跳转执行:PC 载入跳转目标地址。

  2. 指令寄存器 IR:存放当前正在执行的指令;位宽等于指令字长;指令送入 ID 译码器译码,生成译码信号。

  3. 存储器地址寄存器 MAR:存放 CPU 访问的主存单元地址;位宽等价于地址总线宽度。

  4. 存储器数据寄存器 MDR:存放 CPU 与主存交互的数据 / 指令;位宽等价于数据总线宽度。

MAR、MDR 逻辑上属于主存,物理上集成在 CPU 内部,加快访存速度。

(3)寄存器分类:按程序员是否可见
  • 程序员可见(可编程访问):GPR、PC、PSW、ACC;可以编程使用,减少访存次数。

  • 程序员不可见:MAR、MDR、IR、暂存寄存器;由控制部件使用,操作系统特权程序可访问,普通用户无法编程。

5.2 指令执行过程

5.2.1 周期概念

  1. 指令周期:取出一条指令到执行完成的全部时间。

  2. 机器周期(CPU 周期) :指令周期内一次完整操作的时间;通常定义为取一个存储字的时间,等价于存取周期

存取周期:连续两次存储器读写的最小间隔;存取周期>存取时间

存储器(尤其是 DRAM、磁芯存储器)读写结束后,硬件不能立刻进行下一次操作,需要:

  • 电路电平恢复、电荷复位
  • 存储单元刷新稳定
  • 总线、读写电路复位

即还需要恢复时间。

一条指令周期可划分为:取指周期、间址周期、执行周期、中断周期。 CPU 上电后循环:取指令 → 执行指令。

  1. 取指周期:取出指令。

  2. 间址周期:获取操作数有效地址;只有间接寻址指令才需要。

  3. 执行周期:取操作数、运算、保存结果;不同指令执行周期长短不同。

  4. 中断周期:响应中断请求,保存断点,转入中断服务程序。

5.2.2 各周期数据流、控制流与控制信号

① 取指周期(所有指令公共周期,固定微操作)
  1. 数据流:PC → 内部总线 → MAR → 地址总线(AB)

  2. 控制流 :CU输出 PCout=1、MARin=1,一个时钟周期完成地址发送

  3. 数据流:CU发送存储器读命令,主存按地址输出数据

  4. 控制流 :CU输出 Read=1,启动主存读操作

  5. 数据流:主存存储字 → 数据总线(DB) → MDR

  6. 控制流 :CU输出 MDRin=1,锁存主存读出的指令

  7. 数据流:MDR → 内部总线 → IR

  8. 控制流 :CU输出 MDRout=1、IRin=1,保存当前执行指令

  9. 数据流:PC自增更新,指向下一条顺序指令地址

  10. 控制流 :CU输出 PC+1控制信号,硬件自动完成PC递增

② 间址周期(仅间接寻址指令需要,无间接寻址则跳过)

周期功能:根据指令形式地址,访存读出操作数的有效地址,完成寻址修正。

  1. 数据流:IR的地址码字段(形式地址) → MAR → 地址总线(AB)

  2. 控制流 :CU输出 IR_ADout=1、MARin=1,发送形式地址至主存

  3. 数据流:CU发送存储器读命令,主存对应单元输出有效地址

  4. 控制流 :CU输出 Read=1,启动主存读操作

  5. 数据流:主存有效地址 → 数据总线(DB) → MDR(最终得到操作数有效地址)

  6. 控制流 :CU输出 MDRin=1,锁存有效地址

③ 执行周期(不同指令微操作/控制信号不同)

周期功能:根据指令类型,完成访存读数、ALU运算、结果写回、跳转赋值等操作,同步更新PSW状态标志。

1. 加法指令

  1. Ad(IR) → MAR,CU发Read信号,M(MAR) → MDR

  2. MDR → 暂存器A

  3. R0、A同时送入ALU,执行ADD运算

  4. ALU运算结果 → ACC,刷新PSW标志位

  5. ACC结果写回R0

2. JUMP无条件跳转指令

  1. IR地址码字段 → PC,覆盖原有PC顺序地址

  2. 直接跳转至目标地址,结束本条指令执行,无访存、无运算

④ 中断周期

周期功能:响应中断、关中断、保存程序断点、载入中断服务程序入口地址

核心控制信号:SPout、MARin、Write、PCout、MDRin、MDRout、PCin、关中断信号

前置判断:执行周期结束后,CU检测中断请求,有请求则进入中断周期

5.2.3 三类指令执行方案

  1. 单周期处理器 :所有指令占用同一个时钟周期;时钟周期由最复杂指令决定;CPI=1;必须使用多总线结构。

  2. 多周期处理器:一条指令划分为多个时钟周期;不同指令周期数目不同;CPI>1;指令串行执行。

  3. 流水线处理器:指令并行重叠执行;理想状态 CPI=1。

5.3 数据通路功能与基本结构

CPU = 数据通路 + 控制部件。

  • 数据通路:数据流动路径以及路径上所有部件;其中完成运算的部件称为执行部件 / 功能部件。

5.3.1 数据通路两种结构

  1. CPU 内部总线方式

    1. 单总线:所有寄存器挂在同一条内部总线;同一时刻只能完成一次数据传输,容易发生总线冲突。

    2. 多总线:多条内部总线;同一时钟周期可以同时传输多组数据。

  2. 专用数据通路:不使用共享总线;无总线冲突,性能高;硬件成本大。

单周期处理器必须使用多总线单总线无法在一个周期完成一条指令全部操作

5.3.2 数据通路元件分类

  1. 组合逻辑元件(操作元件) :输出仅由当前输入决定,不受时钟控制;例:多路选择器、ALU、加法器、译码器。

  2. 存储元件(状态元件,时序逻辑):具备记忆功能;寄存器是典型代表,保存中间结果、状态。

5.3.3 微操作与微操作序列

微操作:比机器指令更小、最基础的硬件操作。同一个机器指令,不同数据通路对应的微操作序列不同。

节拍安排约束:

  1. 同一个节拍,同一个寄存器只能出现一次输出;

  2. 内部总线、AB、DB、CB 同一节拍只能使用一次;

  3. 同一个节拍最多访问一次主存或 ALU。

示例:加法指令、JUMP 无条件跳转指令,对应完整微操作序列(含控制信号)。

5.4 控制器的功能与硬件实现

控制器核心部件:CU 控制单元。控制器其余部件:PC、IR、指令译码器 ID、地址形成部件、中断控制逻辑。

控制器功能:

  1. 取指令,确定下一条指令地址;

  2. 指令译码,生成对应控制信号;

  3. 时序控制,控制信号时序;

  4. 中断事件响应。

地址形成部件:根据寻址方式,由地址码生成有效地址。

5.4.1 控制器两类硬件实现

本质区别:CU 控制单元实现方式不同,其余部件基本一致

  1. 硬布线控制器:组合逻辑电路直接生成控制信号。

  2. 微程序控制器:用软件思路解决硬件问题。

5.4.2 微程序控制器基础概念

  1. 机器指令 :程序员可见指令;每一条机器指令,对应一段微程序

  2. 微程序 :由多条微指令组成。

  3. 微指令:存放在控制存储器 CS;一条微指令由多个微操作组成。

  4. 微命令 :硬件控制信号;部件收到微命令完成对应的微操作

微命令与微操作一一对应。

控制存储器 CS vs 主存储器 MM

|------|---------|-------------------|
| 项目 | 主存 MM | 控制存储器 CS |
| 组成 | ROM+RAM | ROM(微指令固定,用户不可修改) |
| 位置 | CPU 外部 | CPU 内部 CU 中 |
| 访问方式 | 按地址访问 | 按地址访问 |
| 存储内容 | 机器指令、数据 | 微指令、微地址 |

  • 微周期:从控制存储器读出并执行一条微指令花费的全部时间。

  • 微指令寄存器 μIR:暂存当前正在执行的微指令。

  • 微地址寄存器:存放下一条待取微指令的地址。

5.4.3 微程序控制器工作流程

  1. 机器指令取指完成后,IR 操作码送入微地址形成部件(地址转移逻辑),生成该机器指令对应微程序入口微地址。

  2. 根据微地址访问 CS,读出微指令送入 μIR。

  3. 解析微指令:微操作控制字段、判别测试字段、下地址字段;输出微命令控制硬件。

5.4.4 微指令编码方式

  1. 直接控制法(位直接编码)

    1. 每一位对应一个微命令;1 有效,0 无效。需要的指令字往往较长。

      1. 优点:无需译码,简单直接;

      2. 缺点:微指令字很长,CS 容量开销大。

  2. 字段直接编码法

    1. 将微命令分组;组内互斥(同一微周期最多一个有效),组间相容;000 代表无操作。

      1. 优点:缩短微指令字长;

      2. 缺点:输出端需要译码器,增加硬件。

  3. 字段间接编码法

    1. 一个字段的微命令,需要由另一个字段辅助解释。

      1. 优点:进一步缩短字长;

      2. 缺点:削弱并行能力,时间开销增大。

5.4.5 后继微地址(微地址)形成方式

  1. 计数器方式(增量方式,类似 PC)

    1. 微指令不设置下址字段;顺序执行:微 PC+1;跳转:偏移量 / 操作码生成地址。

      1. 优点:简单,缩短微指令;

      2. 缺点:大量分支跳转,速度慢。

    2. 公共取指微程序入口由硬件固定生成。

  2. 断定方式 :微指令内部专门设置下址字段,直接给出后继微地址。

  3. 结合方式:同时使用增量 + 断定两种机制。

5.4.6 水平型微指令 & 垂直型微指令

  1. 水平型微指令:一条微指令同时发出多个微命令,并行执行多个微操作;常用直接控制、字段编码。

    1. 并行能力强;

    2. 微指令字长较长。

  2. 垂直型微指令:一条微指令只有一个操作;类似机器汇编。

    1. 字长短;

    2. 并行性差,执行一条机器指令需要大量微指令,执行时间长。

5.5 异常与中断

  1. 异常 :CPU 内部检测、同步事件,和当前正在执行的指令强相关。

  2. 中断 :外部设备触发,异步事件,与当前指令无关。

中断处理流程

  1. 中断隐指令(硬件自动完成) ①关中断;②保存断点;③识别中断源,获取中断向量。

中断向量:中断服务程序入口地址;全部中断向量存放在中断向量表。

  1. 执行中断服务程序:软件中完成保护现场(压栈保存冲突寄存器)。

断点保护 vs 现场保护

  • 断点保护:保存 PC,保证中断结束可以回到被打断的位置;硬件中断隐指令完成。

  • 现场保护:保存通用寄存器,防止主程序寄存器数据被中断服务程序破坏;软件指令完成。

  1. 中断返回指令:恢复现场、恢复断点、开中断,回到原程序继续运行。

5.6 指令流水线

5.6.1 流水线基本概念

把任务拆分为若干时间大致相等的阶段,多阶段并行工作。 计算机并行性两类:

  1. 时间并行(时间重叠):同一个硬件部件分时重叠工作,流水线就是典型。

  2. 空间并行(资源重复):复制多套相同功能硬件;超标量处理机。

5.6.2 流水线设计原则

  1. 流水线段数以最复杂操作的时间为准;流水线时钟周期由最慢流水段决定。

  2. 指令格式规整、指令长度尽量一致;Load‑Store 风格指令集。

  3. 指令、数据内存对齐,减少访存次数。

5.6.3 RISC 五级指令流水线

|--------------|-----------------|
| 阶段 | 功能 |
| IF 取指 | 从存储器取出指令,PC 自增 |
| ID 译码取数 | 指令译码,读取通用寄存器操作数 |
| EX 执行 / 地址运算 | ALU 运算,有效地址计算 |
| MEM 访存 | 存储器读写 |
| WB 写回 | 运算结果写回通用寄存器 |

流水段寄存器(锁存器):每一级流水线之间配置;保存 PC、指令、立即数、运算结果、控制信号,用于向下一级流水段传递信息。

理想流水线:每一个时钟周期流入一条指令,流出一条指令;同时流水线内部有多条指令在不同阶段并行。

5.6.4 流水线三大性能指标

  1. 吞吐率 TP:单位时间完成任务数量

  2. 加速比:非流水线总时间 ÷ 流水线总时间。

5.6.5 流水线冒险(冲突)与解决方案

  1. 结构冒险(结构冲突) :硬件资源冲突。 解决:多套独立硬件部件;指令 Cache 与数据 Cache 分离 ;插入气泡 stall 暂停流水线。

  2. 数据冒险(数据冲突) :指令之间存在数据依赖,需要的结果还未生成。

    1. 解决:

      1. 插入气泡;

      2. 插入空操作;

      3. 数据旁路(转发技术)直接把中间结果送给 ALU 输入端。

    2. load-use:它是 数据冒险的特例 ,只发生: 前一条是 load(访存写回寄存器) 后一条立刻用这个寄存器

  3. 控制冒险(控制冲突 / 分支冲突):分支跳转改变 PC,取指阶段预取错误指令。 解决:分支预测;尽早计算转移目标地址;延迟分支技术。

5.6.6 多发射流水线

  1. 超标量流水线 :一个周期发射多条指令;空间换时间;CPI<1;复制多套执行部件。

  2. 超流水线 :把流水线每个阶段进一步拆分为更小节拍;时间换空间;CPI=1;提高主频。

5.7 多处理器系统

SISD / SIMD / MIMD

  1. SISD 单指令单数据流:单处理器,单指令流,同一时刻只处理少量数据;传统单 CPU。

  2. SIMD 单指令多数据流 :一条指令,同时对多组数据流运算;一个控制器,多个处理单元;向量处理器属于 SIMD;数据级并行,适合密集数据运算。

  3. MIMD 多指令多数据流 :多处理器,多独立指令流,处理不同数据;线程级并行,适合复杂任务;多核处理器属于 MIMD。

多核处理器(共享存储)

示例:Intel i7

  • 芯片内多个 CPU 核心;每个核心拥有独立 L1、L2 Cache,TLB、MMU,可独立执行指令。

  • 核间高速互联;所有核心共享片上 L3 Cache、存储控制器;全部核心共享主存储器。

相关推荐
今儿敲了吗1 小时前
Python ——第三方包
笔记·python
吃着火锅x唱着歌2 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习
落知秋2 小时前
RUST中的trait是什么?
笔记·rust
xian_wwq3 小时前
【学习笔记】Prompt Engineering 没死,只是它不再够用了-2/16
笔记·学习·prompt
210Brian3 小时前
STM32学习笔记(五)EXTI外部中断(上)
笔记·stm32·学习
xian_wwq5 小时前
【学习笔记】RAG 只是 Context Engineering 的一小块-5/16
笔记·学习·rag
iCxhust6 小时前
8088单板机VScode集成开发环境使用方法
ide·笔记·vscode·编辑器·微机原理·8088单板机
文人sec6 小时前
MySQL事务与索引做了什么?
android·笔记·mysql
NoteStream6 小时前
【C语言基础】分支和循环(上)
c语言·开发语言·c++·经验分享·笔记·算法·c#