0%

中央处理器

1

定论

CPU概述

  1. CPU的功能和基本概述
  2. CPU的基本结构
    1. 运算器 - 对数据进行算术运算、逻辑运算或条件测试。主要包括算术逻辑单元ALU、暂存寄存器、累加寄存器ACC、通用寄存器组GPRs、程序状态字寄存器PSW、移位寄存器、计数器CT等
    2. 控制器 - 通过微操作执行指令。主要包括程序计数器PC、指令寄存器IR、指令译码器ID、存储器地址寄存器MAR、存储器数据寄存器MDR、时序电路和微操作信号发生器等
  3. CPU的寄存器
    1. 用户可见寄存器 - 通用寄存器组、程序状态字寄存器、程序计数器、累加寄存器、移位寄存器等
    2. 用户不可见寄存器(透明) - 存储器地址寄存器、存储器数据寄存器、指令寄存器、暂存寄存器
    3. 几个重要的寄存器作用
      1. 程序计数器PC - 存放欲执行指令再主存中位置,位数和主存地址位数相同
      2. 指令寄存器IR - 存放当前正在执行的指令,位数等于指令字长

指令执行流程

  1. 指令周期的定义,以及指令周期由多个机器周期组成

  2. 若CPU采用终端形式实现主机和I/O的信息交换,那么指令周期会多出一个变为四个周期 - 取址周期、间址周期、执行周期、中断周期

  3. 取址周期PC+“1”,中断周期SP-“1”

  4. 指令周期的数据琉 https://img2020.cnblogs.com/blog/1358881/202005/1358881-20200526202909616-297576639.png https://img2020.cnblogs.com/blog/1358881/202005/1358881-20200526203033695-632866245.png https://img2020.cnblogs.com/blog/1358881/202005/1358881-20200526203213628-395591177.png



    执行周期不同的指令数据流不同

数据通路的基本结构

  1. CPU内部单总线方式
    1. 定义 - ALU及所有寄存器连接到一条内部公共总线上
    2. 图示
      https://i-blog.csdnimg.cn/direct/3f853e11b12d4fe09f6fd51e432b7a9a.png
    3. 能输出到总线的部件均与一个三态门连接,用于控制该部件与内部总线之间数据通路的连接与断开
    4. 豆指导总结的表格 ```markdown | 操作类型 | 数据流程 | 关键控制信号 | 典型场景及说明 | |——————|————————————————————————–|—————————————————————————-|——————————————————————————| | 寄存器间传输 | (R1) → 总线 → R2 | RegRead=1, R1_sel=1, RegWrite=1, R2_addr, CLK | 将寄存器R1的值复制到R2,如MOV指令实现 | | 存储器读 | (PC) → MAR → 存储器 → MDR → 总线 → R1 | PC_out=1, MAR_in=1, MemRead=1, MDR_in=1, MDR_out=1, RegWrite=1, R1_addr | 从内存加载数据到寄存器,如LOAD指令 | | 存储器写 | (PC) → MAR; (R1) → MDR → 存储器[MAR] | PC_out=1, MAR_in=1, RegRead=1, R1_sel=1, MDR_in=1, MemWrite=1, MDR_out=1 | 将寄存器数据写入内存,如STORE指令 | | ALU运算 | (R1) → ALU_A; (R2) → ALU_B → ALU → ALU_Out → 总线 → R3 | RegRead=1, R1_sel=1, R2_sel=1, ALU_A_in=1, ALU_B_in=1, ALU_Op=001(加法), ALU_Out=1, RegWrite=1, R3_addr | 执行算术/逻辑运算,如ADD/SUB指令 | | PC更新 | (PC) + 4 → PC | PC_out=1, ALU_A_in=1, ALU_B_in=1(设为4), ALU_Op=010(加法), PC_in=1 | 取指后PC自增,指向下一条指令 | | 条件分支(BEQ) | (R1-R2)→ALU_Out→ZF; (PC+Offset)→ALU_Out; if(ZF) then (ALU_Out) → PC | RegRead=1, R1_sel=1, R2_sel=1, ALU_Op=100(减法), PC_out=1, ALU_B_in=1(Offset), ALU_Op=010(加法), Branch=1, ZF=1, PC_in=1 | 相等时跳转,如BEQ指令 |

控制器的功能和工作原理

  1. 控制器的结构与功能
  2. 硬布线控制器的图示与功能
  3. 微程序控制器
    1. 基本概念 - 每条机器指令编写成微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令
    2. 控制存储器CM用于存放微程序,因此在CPU内部,用控制存储器来存放微程序,用ROM实现
    3. 微程序的结构和功能是是透明的
    4. 微程序控制器的组成
    5. 微指令编码方式
      1. 直接编码方式 - 无需译码,操作控制字段的每一位都表示一个微命令
      2. 字段直接编码方式 - 互斥性微命令放在同一字段、向同性微命令放在不同字段
      3. 字段间接编码方式 - 一个字段某些微命令需另一个字段的某些微命令来解释
    6. 微指令格式
      1. 水平型微指令
      • 核心特点:并行控制,微指令字长较长(100-200位),每个控制位直接对应硬件信号。
      • 优势:无需译码,并行执行效率高,灵活性强,适合复杂微操作组合。
      • 劣势:字长过长,占用ROM空间大,硬件成本高。
      • 适用场景:高性能CPU(如超标量、流水线处理器)。
      1. 垂直型微指令
      • 核心特点:串行控制,微指令字短(20-50位),通过微操作码译码生成控制信号。

      • 优势:节省ROM空间,硬件成本低,易于扩展新微操作。

      • 劣势:需多次译码,执行速度慢,微操作组合受限于 opcode设计。

      • 适用场景:微控制器、低成本嵌入式系统。

        维度 水平型 垂直型
        控制方式 并行直接控制 串行译码控制
        字长
        执行效率
        空间效率
    7. 微指令的地址形成方式
      1. 后继地址字段指出
      2. 机器指令操作码指出
      3. 增量计数器法
      4. 各个标志决定下一条微指令分支转移的地址
      5. 硬件直接产生微程序入口地址
  4. 对比两种控制器 https://img-blog.csdnimg.cn/7207a7cc565a4038aaac90acc6525289.png

异常和中断机制

  1. 异常和中断的基本概念
  2. 异常的分类 - 故障、自陷
  3. 中断的分类 - 可屏蔽中断和不可屏蔽中断、
  4. 所有异常和中断事件都是由硬件检测发现的
  5. 异常和中断响应过程
    1. 关中断
    2. 保存断点和程序状态
    3. 识别异常和中断并转到相应的处理程序
      1. 硬件识别方式(向量中断) - 所有中断向量放在一个中断向量表中
      2. 软件识别方式 - CPU设计一个异常状态寄存器,操作系统使用统一的异常或中断程序、按优先级查询异常状态寄存器

指令流水线

  1. 两种技术
    1. 时间上并行 - 一个任务分为几个不同的子阶段,每个子阶段在不同的功能部件上执行
    2. 空间上并行 - 一个处理机内设置多个执行相同任务的功能部件、这样的处理机被叫做超标量处理机
  2. 指令流水线图示
    https://img-blog.csdnimg.cn/20210617104452602.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUyNTI3Mg==,size_16,color_FFFFFF,t_70
    五个基本功能段 - 取址IF、译码/读寄存器ID、执行/计算地址EX、访存MEM、写回WB
  3. 流水线的设计 - 只能用执行最慢的指令作为设计时钟周期的依据
  4. 流水线的几种冒险
    1. 结构冒险
      1. 不同指令在同一时刻争用同一部件
      2. 解决方法一 - 前一指令访存时、使后一条指令及其后续指令暂停一个时钟周期
      3. 解决方法二 - 设置多个独立部件,如寄存器读口和写口分离
    2. 数据冒险
      1. 后面指令要用到前面指令的结果,但是前面指令结果还未产生
      2. 解决方法一 - 相关指令及后续指令都暂停一至几个时钟周期。可分为软件插入空操作nop和硬件阻塞stall两种方法
      3. 解决方法二 - 转发(旁路)技术。数据通路形成的中间数据直接送到ALU的输出端
      4. 特殊案例 - load-use数据冒险处理,不能转发,z只能插入nop指令,或是在编译的时候优化
    3. 控制冒险 - 遇到转移指令或是返回指令;发生异常或中断时改变了PC的值。解决方法是插入nop或阻塞,或者对转移指令进行分支预测
  5. 流水线的性能指标
    1. 吞吐率(Throughput, TP)
      定义:单位时间内流水线完成的指令数,反映流水线的“处理速度”。

(1)理想情况(无阻塞,流水线满负荷)
- 公式:
$$ TP_{\text{理想}} = \frac{1}{\Delta t} $$
其中,Δt 为流水线时钟周期(每个流水段的延迟,取各段中最长延迟)。

  • 含义:当流水线连续流动(第1条指令进入后,每Δt完成1条指令),吞吐率达到最大值,即每个时钟周期完成1条指令。

(2)实际情况(n条指令,k段流水线,无阻塞)
- 公式:
$$ TP_{\text{实际(无阻塞)}} = \frac{n}{T_{\text{总}}} = \frac{n}{(k + n - 1) \cdot \Delta t} $$
其中:
- n 为指令总数;
- k 为流水线段数;
- T 为完成n条指令的总时间(第1条指令需k ⋅ Δt,后续n-1条各需Δt,总时间为k ⋅ Δt + (n − 1) ⋅ Δt)。

  • n ≫ k(指令数远大于段数):
    $$ TP_{\text{实际(无阻塞)}} \approx \frac{n}{n \cdot \Delta t} = \frac{1}{\Delta t} = TP_{\text{理想}} $$
    即接近理想吞吐率。

  • 若总阻塞周期为 b(因冒险插入的气泡总时间),则总时间 T = (k + n − 1 + b) ⋅ Δt,公式:
    $$ TP_{\text{实际(有阻塞)}} = \frac{n}{(k + n - 1 + b) \cdot \Delta t} $$

  • 阻塞会降低吞吐率,b 越大,TP 越小。

    1. 加速比(Speedup, S)
      定义:流水线方式与非流水线方式完成相同指令集的时间比,反映流水线的“提速效果”。

(1)理想情况(无阻塞)
- 非流水线时间:T非流水 = n ⋅ k ⋅ Δt(每条指令需k个周期,无并行)。
- 流水线时间:T流水 = (k + n − 1) ⋅ Δt
- 公式:
$$ S_{\text{理想}} = \frac{T_{\text{非流水}}}{T_{\text{流水}}} = \frac{n \cdot k \cdot \Delta t}{(k + n - 1) \cdot \Delta t} = \frac{n \cdot k}{k + n - 1} $$

  • n ≫ k 时:
    $$ S_{\text{理想}} \approx \frac{n \cdot k}{n} = k $$
    即最大加速比接近流水线段数k(理论上限)。

(2)实际情况(有阻塞)
- 若总阻塞周期为b,则流水线时间 T流水 = (k + n − 1 + b) ⋅ Δt,公式:
$$ S_{\text{实际}} = \frac{n \cdot k \cdot \Delta t}{(k + n - 1 + b) \cdot \Delta t} = \frac{n \cdot k}{k + n - 1 + b} $$

  • 阻塞会降低加速比,b 越大,S 越小(例如:若b = n,则$S \approx \frac{k}{2}$,加速比减半)。

3. 效率(Efficiency, E)
定义:流水线中各段的平均利用率,反映“资源利用程度”。

(1)理想情况(无阻塞)
- 总有效工作时间:n ⋅ Δt(每条指令在1个周期内占用1个段,n条指令累计有效时间)。
- 总时间×总段数:T流水 ⋅ k = (k + n − 1) ⋅ Δt ⋅ k(所有段的总“可工作时间”)。
- 公式:
$$ E_{\text{理想}} = \frac{\text{总有效工作时间}}{\text{总时间} \times \text{总段数}} = \frac{n \cdot \Delta t}{(k + n - 1) \cdot \Delta t \cdot k} = \frac{n}{k \cdot (k + n - 1)} $$

  • n ≫ k 时:
    $$ E_{\text{理想}} \approx \frac{n}{k \cdot n} = \frac{1}{k} $$
    即效率接近1/k(各段平均利用率为1/k,因同一时间只有1个段在工作,其余空闲)。

(2)实际情况(有阻塞)
- 总有效工作时间不变(仍为n ⋅ Δt),总时间因阻塞增加为(k + n − 1 + b) ⋅ Δt,公式:
$$ E_{\text{实际}} = \frac{n}{k \cdot (k + n - 1 + b)} $$

  • 阻塞会降低效率(空闲时间增加,资源利用率更低)。

总结:核心公式表
| 指标 | 理想情况(无阻塞,n→∞) | 实际情况(n条指令,k段,阻塞周期b) |
|————|————————–|——————————————-|
| 吞吐率 | TP = 1/Δt | TP = n/[(k + n − 1 + b) ⋅ Δt] |
| 加速比 | S = k | S = (n ⋅ k)/(k + n − 1 + b) |
| 效率 | E = 1/k | E = n/[k ⋅ (k + n − 1 + b)] |

  1. 高级流水线技术
    1. 超标量流水线技术 - 也叫动态多发射技术。每个时钟周期并发执行多条独立指令。结合动态流水线调度技术乱序执行
    2. 超长指令字技术 - 也叫静态多发设备技术。多条能并行操作的指令组合成一条具有多个操作码的超长指令字
    3. 超流水线技术 - 提高主频的方式。但是CPI还是为1.其余两种CPI都大于1

多处理器基本概念

    1. SISD单指令单数据流
    2. SIMD单指令多数据流 - 使用for循环处理数组时最容易
    3. MISD多指令单数据流 - 不存在
    4. MIMD多指令多数据流
    5. 超线程技术
  1. 硬件多线程基本概念
  2. 多核处理器基本概念
  3. 共享多处理器基本概念