26考研 | 王道 | 计算机组成原理 | 五、中央处理器

0.概览

CPU能够识别执行的只有机器指令和微指令,汇编指令只有翻译为机器指令之后才可以执行

汇编程序员可见的寄存器有:基址寄存器、状态寄存器PSW、程序计数器PC、通用寄存器组

不可见的:MAR、MDR、IR、微指令寄存器

可见:可以修改的,一直指定它的值的

image-20250605100002496

在这里插入图片描述

在这里插入图片描述

image-20250605094940034

image-20250605095004847

1.CPU的功能和结构

CPU读写控制信号的作用是 决定数据总线上的数据流动方向,控制存储器操作的读写类型,控制流入流出存储器信息的方向

image-20250605105248561

运算器包含的寄存器:ALU,ACC,PSW,通用寄存器

控制器包含的寄存器:PC,IR,MAR,MDR

寄存器可见性与透明性分类

寄存器 用户可见性 用户透明性 用户可修改性 修改方式
PSW(程序状态字) 可见 ✅ 不透明 部分可修改 间接修改(硬件自动设置状态位,部分标志位支持软件修改)
ACC(累加器) 可见 ✅ 不透明 可修改 直接修改(如 MOV ACC, 10H
通用寄存器组(如R0-R12) 可见 ✅ 不透明 可修改 直接修改(如 MOV R1, AX
PC(程序计数器) 可见 ✅ 不透明 可修改 间接修改(通过跳转指令如 JMPCALL
IR(指令寄存器) 不可见 ❌ 透明 不可修改 -
MAR(存储器地址寄存器) 不可见 ❌ 透明 不可修改 -
MDR(存储器数据寄存器) 不可见 ❌ 透明 不可修改 -

不知道间接修改算不算可以修改,按照书上的说法,用户是不能修改PSW和PC的,就按书上来,记成不能修改

image-20250605102154875

image-20250605102418895

1.运算器

image-20250605102847651

专用数据通路方式就是只要有数据流过,那你就给这个路径连上一条线,所以ALU和各个寄存器之间都有线,还要决定使用哪个寄存器,又需要其他硬件,所以硬件量就很大了

image-20250605103744944

CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。

如:两个操作数分别来自主存和R0,最后结果存回R0,那么从主存中取来的操作数直接放入暂存器,就不会破坏运算前R0的内容。

在R0给的信号不稳定之前,ALU会产生一个输出信号送到内部总线上,就会与R0送到内部总线上的信号冲突,从而导致运算的错误。在ALU的输出端加一个暂存寄存器,等R0送到总线上的信号稳定之后,ALU把运算的结果放到暂存寄存器中,在ALU的输出稳定之后,让三态门导通,把运算结果送到内部总线上,给R0的输入端加上有效的电信号,就会把运算的结果输入到R0寄存器中。

image-20250605104038852

暂存寄存器改为移位寄存器是因为这个暂存寄存器多半具有移位这个功能

通用寄存器可以放数据也可以放地址,但是不可以替代指令寄存器

PSW是专用寄存器, 不需要像其他寄存器那样需要编号

用户不能直接修改PSW,但是PSW对用户是可见的,不是透明的

2.控制器

控制器功能是取指令分析指令和执行指令。执行指令就是发出有关操作的控制信号

指令译码器是指对指令的操作码字段进行译码

CPU不包括地址译码器

控制器的基本结构

image-20250605104705767

程序计数器PC可以使用字节地址,也可以使用字地址,其位数取决于存储器容量和指令字长,与机器字长无关

机器指令中不能显式的使用PC,只能让其自增或者通过转移指令设置

指令寄存器IR位数取决于指令字长

CPU中通用寄存器长度取决于机器字长

CPU的基本结构

image-20250605104848794

棕色的寄存器是用户可见的,灰色的是对用户透明的

可见的有:PSW,PC,ACC,R0-R3。可见的意思是用户可以通过汇编语言进行修改这个寄存器的值

在这里插入图片描述

课后题PC的位数问题:

image-20250606111107461

按字节编制,一个指令32位,占4B,四个存储单元,而又要按字边界对齐存放(这句话说明了每条指令的起始地址必须是4的倍数)

所以指令要放的话,按找最多的情况来放置,可以放 4GB/4B=2^30^这么多条指令,也就是说有这么多个编号

为什么呢?

如果地址空间全都放指令的话,因为指令的地址一定是4的倍数,一定是0,4,8,12,16…..

那么0,4,8,12,16….4GB这些编号一共有多少个?那不就是 4GB/4B个嘛

所以编号一共有2^30^个,那么我们只需要30位就可以存储下来所有的编号,而又因为编号全都是4的倍数,我们去主存里面找的时候只要左移2位即可,就相当于乘以4了

比如虽然它原来的编号是0,4,8,12,16,但是PC存储的时候就是0,1,2,3,4,而我们用它到主存里面寻找指令的时候,就乘以4,就是0,4,8,12,16了

2. 指令执行过程

CPU的控制器通过指令周期的不同阶段区分是指令还是数据,取指周期拿出来的就是指令,执行阶段拿出来的就是数据

PC的值在指令的执行过程中修改(具体是在取值周期进行修改)

取指操作是控制器固有的功能,不需要在操作码的控制下完成

取值操作是控制器自动完成的

在这里插入图片描述

单周期CPU中,指令执行的所有阶段都在一个时钟周期内完成,因此其指令周期就是一个时钟周期,CPI=1

多周期CPU中,不同的类型的指令可以用不同的执行步骤,需要几个周期就分配几个周期,CPI>1

流水线CPU追求目标是每个时钟周期完成一条指令的执行过程(在理想情况下CPI=1),在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自在不同的执行步骤中

单周期和多周期的时钟周期长短一般不同

对比项 单周期CPU 多周期CPU
时钟周期长度 (由最复杂指令的总时间决定,如LOAD) (由最耗时的单个微操作决定,如访存阶段)
决定因素 执行时间最长的指令(从取指到写回的全过程) 所有微操作中最慢的一个(通常是访存操作)
设计哲学 “一刀切”:所有指令,无论简单复杂,都必须适应同一个长周期 “分步走”:将指令分解为多个阶段,每个阶段用一个短周期完成

在这里插入图片描述

image-20250605110353944

各个周期的关系

在这里插入图片描述

image-20250605111046371

指令周期流程

image-20250605111226887

指令周期的数据流-取址周期

image-20250605112641697

指令周期的数据流-间址周期

image-20250605112942747

除了把MDR拼接到Ad(IR)里面这种处理方式以外,可能有的处理方式会直接把MDR放到MAR里面去

指令周期的数据流-执行周期

执行周期的任务是根据IR指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。

指令周期的数据流-中断周期

image-20250605113752508
在这里插入图片描述
指令执行方案

在这里插入图片描述

3.数据通路的功能和基本结构

数据通路的功能由控制部件送出的控制信号决定

在一条指令的执行过程中,单周期CPU的每个控制信号保持不变,每个部件只能使用一次。多周期CPU的控制信号可能发生改变,同一个部件可以使用多次

关于这句话的具体解释

特性 单周期CPU 多周期CPU
指令执行方式 所有操作在一个长时钟周期内完成 指令被分解为多个阶段,每个阶段占用一个较短的时钟周期
控制信号 恒定不变:周期开始时生成,整个周期内保持稳定26 动态变化:每个周期(阶段)根据当前步骤重新生成一组信号27
部件使用 一次使用:每个功能部件(如ALU、存储器)在一个指令周期内通常只工作一次2 多次复用:同一部件(如ALU)可在不同阶段被同一条或不同指令多次使用27
指令间关系 串行执行:下一条指令必须等当前指令完全执行完毕后才开始5 串行执行:下一条指令仍需等待当前指令的所有步骤完成后方可开始45

核心概念详解

单周期CPU:一次性完成所有操作

单周期CPU的设计理念是“一刀切”。它要求一条指令从取指、译码、执行到写回的所有操作,必须在一个固定的、相对较长的时钟周期内一气呵成

  • 控制信号为何不变:在周期开始时,控制器根据指令的操作码(Opcode)一次性生成所有需要的控制信号(如RegWrite、ALUSrc等)。由于没有中间状态,这些信号在整个周期内都保持有效,直到下个周期开始才改变。这确保了数据通路能稳定地完成整个流程。

  • 部件为何只用一次:因为所有操作是顺序但连续完成的,每个功能部件(如ALU在执行阶段完成计算后)在该周期内就完成了它的使命,直到下条指令到来才会再次被使用

多周期CPU:分步走,灵活复用

多周期CPU则将指令执行过程分解成多个明确的阶段(如经典的取指IF、译码ID、执行EXE、访存MEM、写回WB)。每个阶段在一个较短的时钟周期内完成。

  • 控制信号为何变化:控制器通常是一个有限状态机(FSM)。在每一个时钟周期(对应一个状态),它只生成当前步骤所需的控制信号。当进入下一个阶段(状态)时,控制信号会随之改变,以驱动数据通路执行新的操作。例如,在“取指”阶段需要内存读信号,而到了“写回”阶段则需要寄存器写信号。

  • 部件如何被复用:正是这种分步执行的机制,使得同一个物理部件可以在不同阶段被重复使用。最典型的例子是ALU:它可能在“执行”阶段用于计算算术结果,在另一个阶段又用于计算内存地址或分支目标地址。这种复用大大提高了硬件资源的利用率。

关键澄清:多周期 vs. 流水线

“在第一条指令的执行周期执行第二条指令的取指周期”,这实际上是流水线CPU的典型特征,也是多周期CPU与流水线CPU最根本的区别

  • 多周期CPU:指令之间仍然是串行执行的。必须等第一条指令彻底走完所有阶段(比如5个周期),完全退休后,第二条指令才会进入第一个阶段(取指)

  • 流水线CPU:它是在多周期CPU的基础上,让不同指令的不同阶段在时间上重叠起来。当第一条指令进入“执行”阶段时,第二条指令就可以进入“译码”阶段,第三条指令则可以同时进行“取指”。这样就实现了指令级的并行,极大地提高了吞吐率

总结

单周期CPU:控制信号“从一而终”,部件“一次性使用”,设计简单但效率低。

多周期CPU:控制信号“随阶段而变”,部件可“多次复用”,通过将任务分解提高了硬件利用率。

流水线CPU:在多周期的基础上,实现了指令阶段的“重叠执行”,从而实现了更高的并行度。

image-20250605123619785

内部总线数据通路的特点:结构简单,实现容易,性能较低,存在较多的冲突现象

专用的特点:结构复杂,硬件量大,不易实现,性能较高,基本不存在冲突现象

CPU可以视作由数据通路和控制部件两大部分组成的

image-20250605122320473

image-20250605121334286

表示总线连接或者断开的部件是三态门,图中的三角形

###1. 数据通路-单总线结构

数据通路通常指指令执行过程中数据经过的路径以及路径上的部件。

数据通路=电路+部件(组合逻辑元件+时序逻辑元件),并且由控制信号进行控制。

组合逻辑元件(操作元件):不能存储,如多路选择器MUX、ALU、译码器。

时序逻辑元件(状态元件):能存储,如寄存器。

原则上来说,每个时刻只能有一个器件发出信息,一个或者多个器件接收信息

数据通路-CPU内部单总线方式

以下内容结合1.2.2“计算机的工作过程”进行学习

在这里插入图片描述

在这里插入图片描述

不严谨的原因是因为主存中的数据通过数据总线写到MDR的时候通常是另外一个信号

而MDRin只是CPU内部总线往MDR写的时候的信号而已

下图也有类似不严谨处

在这里插入图片描述

Y是暂存寄存器,用来放其中一个加数,Z是暂存结果的暂存寄存器

而Y和ALU有一个专用的数据通路,不会占用CPU内部总线

每个时钟周期内,CU都会发出一组相应的控制信号,来完成某一个微操作,到下一个时钟周期,CU又会发出第二个控制信号,完成第二个微操作。

CPU内部总线方式-例题

(R0)目的操作数,有括号需要进行一次间接寻址,表示R0中存放的是操作数在主存中的存储地址。

R1源操作数,没有括号表示操作数直接存放在R1寄存器中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Y和ALU有专门的数据通路,不需要占用CPU内部总线

2. 数据通路-专用通路结构

image-20250606121512622

专用数据通路的效率比单总线高,但相对的成本也会高

专用数据通路方式-取值周期

图中的Cx表示的是如果是Cx有效那么这条路就是通的,否则不通

在这里插入图片描述

image-20250606120642116

image-20250606120921114

第二问如果不放心还可以写上

pc+1->pc

OP(IR)->微操作发生器

image-20250606121150872

image-20250606121317129

image-20250606121413839

image-20250606121448725

采用CPU内部总线:结构简单,实现容易,性能较低,存在较多的冲突现象。
专用数据通路:结构复杂,硬件量大,不易实现,性能高,基本不存在数据冲突现象。

数据总线是双向的:CPU–>内存,内存–>CPU
地址总线是单向的:CPU–>内存

4.控制器的功能和工作原理

取指令操作是控制器固有功能,不需要在操作码控制下进行

image-20250606161940513

以访存所需节拍数量作为参考是因为 访存比较慢,比大多数指令都慢所以具有参考价值

根据指令操作码、目前的机器周期、节拍信号(T0、T1、T2)、机器状态条件(如PSW中溢出、正负性等)、即可确定现在这个节拍下应该发出哪些微命令

根据操作码确定是什么操作,根据FE,IND,EX,INT确定是哪个周期,根据节拍确定是哪个微命令,而微命令又一一对应了微操作(确定节拍后可能还要参考PSW之后才能发出对应的微命令)

1.硬布线控制器的设计

image-20250610113450831

控制信号主要与指令译码信号和时钟信号有关

image-20250606163446597

基于 上面的理解

传操作码译码器是为了知道操作码是多少,四个触发器是为了知道哪个周期,节拍发生器是为了确定哪个节拍,传标志是为了确定到执行什么微命令,最后输出出去即可

2.硬布线控制器的设计(不考,听一听便于理解)

image-20250606164106207

分析每个阶段的微操作序列

image-20250610111420093

安排微操作时序的原则-取值周期

image-20250610111733798

安排微操作时序的原则-间值周期

在这里插入图片描述

1和2在一个节拍内完成,因为被控对象不同

3和4分别放在一个节拍完成,因为3是访存操作,一个节拍完成不了

安排微操作时序的原则-执行周期

一个微操作就可以完成的微指令可以用一个节拍来完成,即放在三个节拍的最后一个节拍

image-20250610111906553

电路设计-组合逻辑设计

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. 微程序控制器的基本原理

在这里插入图片描述

采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中

微程序控制器中,形成微程序入口地址的是机器指令的操作码字段

控制存储器用ROM实现

在这里插入图片描述

操作控制字段就是用若干个bit表示当前微指令对应的微操作是哪几个

微指令存放在控制器的一个特殊的存储器当中,所以会有对应的地址

顺序控制字段可能会有几个bit表示地址的寻址方式,是间接还是直接之类的

微程序控制器的基本结构

在这里插入图片描述

微程序控制器的工作原理

在这里插入图片描述

在这里插入图片描述

3. 微指令的设计

image-20250610155152471

image-20250610152632770

1.微指令的编码方式

image-20250610153300827

直接编码是效率最高的,因为不需要进行译码,其他的都需要进行译码

image-20250610153732066

在这里插入图片描述

image-20250610154037480

2.微指令的地址形成方式

image-20250610154745420

image-20250610154814914

测试网络其实就是下图的顺序逻辑部分,测试源就是标志

image-20250610154833223

例题-断定方式

在这里插入图片描述

4. 微程序控制单元的设计

image-20250610160732967

在这里插入图片描述

image-20250610155805230

image-20250610155851591

如下图这样安排也可以,只要保证两个微操作可以在一个节拍内完成即可

image-20250610155947586

image-20250610160143078

image-20250610160323363

微程序设计的分类

image-20250610160522104

硬布线与微程序的比较

image-20250610160654049

在这里插入图片描述

5. 异常与中断

视频说除数0是终止,而书上说是故障,暂且以书上为准吧

image-20250612121340381

image-20250612120649969

image-20250612120753074

image-20250612120957666

image-20250612121149658

异常:整数除以0,溢出,断点,单步跟踪,非法指令,栈溢出,地址越界,缺页等

故障:指在引起故障的指令启动后,执行结束前被检测到的异常事件。例如:非法操作码、缺页、除数为0。如果可以修复,修复完了继续回来执行,如果不可修复,那就终止进程的执行

陷阱:断点、单步跟踪

终止:若在执行过程中发生了使计算机无法继续执行的硬件故障,如控制器出错,存储器校验错,总线错误等,程序无法继续执行,只能终止。这类异常与故障和自陷不同,不是由特定指令产生,而是随机发生的

浮点数的上溢属于内中断,但下溢直接当做机器0处理,不属于中断

内部异常的产生与当前执行的指令相关

内部异常的检测由CPU内部逻辑实现

内部异常的相应发生在指令执行的过程中

异常事件检测由CPU在执行每一条指令的过程中进行

中断请求检测由CPU在每条指令执行结束、取下条指令之前进行

image-20250612163917265

image-20250612163940370

image-20250612164106918

image-20250612121453295

举个例子,你在图书馆复习408,在做某道题,你就是CPU(也就是CPU在执行当前指令)。
1.陷入:你想起来昨天晚上的那局王者被单杀,气不过,然后来了一把(你是学习态,想做游戏态的事情,是不是很像系统调用),打完又灰溜溜做题(返回下一条指令)。
2.故障:你突然发现这道题的知识点不会(也就是不在你的内存中),你就去翻书(外存),查到之后还要继续做这道题(返回本条指令)。
3.终止:你突然很累,大脑宕机,不想学习,直接回寝室睡大觉,不回来做题,这就是终止(不可恢复)。
4.外中断:和你自己没关系,旁边来了个妹妹,打断了你的学习,你看了十分钟又灰溜溜的做题,这就是外中断,和你自己(CPU)没关系。

在这里插入图片描述

在这里插入图片描述

故障:如果能修复,那就是返回当前指令,修复不了那就直接终止了

特性 内部异常 外部中断
触发源 CPU内部执行错误(如除零、溢出) 外设或硬件故障(如按键、掉电)
检测逻辑 CPU指令执行单元自动检测 依赖引脚电平扫描+中断控制器
同步性 同步(与指令执行严格相关) 异步(随时可能发生)
响应时机 立即终止当前指令 当前指令结束后响应
硬件依赖 纯CPU内部逻辑 需外部中断引脚和控制器支持

在这里插入图片描述

6. 指令流水线

问题:多核处理器的话,五指令流水线是不是得有五个核心才能并行执行?

答案:五段式指令流水线是单核的动作,五个核心就有五个五段式指令流水线

多核处理器则是在空间上的并行。它通过集成多个独立的计算核心,使得多个任务(线程)能够真正同时执行。

真正的并行:在有五个核心的情况下,每个核心都可以独立地执行一个线程。这些线程是齐头并进的,每个核心都在全速运行。这特别适合同时运行多个应用程序(比如一边玩游戏,一边下载文件),或者处理可以天然分解成多个并行子任务的大型计算问题(比如视频编码、科学计算)

与流水线的关系:多核和流水线不是二选一,而是协同工作的。现代多核处理器的每个核心内部,都采用了复杂的流水线技术(通常是远超5级的深度流水线),甚至还是超标量结构(每个时钟周期可发射多条指令)。所以,五个核心之所以能高效地齐头并进,很大程度上得益于每个核心内部高效的流水线设计。

1. 指令流水线的基本概念

在没有阻塞的情况下,PC的值在每个时钟周期都会改变

取指几段和指令译码阶段不需要控制信号控制,只有在执行阶段才需要控制信号控制(因为控制器就是在这个阶段生成控制信号来执行对应的指令的)

image-20250610200728029

image-20250610194044234

image-20250610194250442

指令流水线的表示方式

在这里插入图片描述

流水线的性能指标

在这里插入图片描述

在这里插入图片描述

从上到下四个1是同一条指令,而不是1-n是同一条指令,不然就只有四条了,而实际是n条指令分了四个阶段

在这里插入图片描述

2. 指令流水线的影响因素和分类

image-20250610205246489

机器周期的设置

IF:取指阶段

ID:指令译码阶段(指令译码,从通用寄存器中取出当前指令所需要的操作数),imm立即数

EX:执行阶段

M:访存阶段

WB:写回通用寄存器组

cache:data cache和insrtuction cache,将数据和指令放在两个独立的模块中,对这两个模块的访问可以并行进行

image-20250610202403871

这个锁存器就是流水段寄存器

指令译码得到的控制信号需要通过流水段寄存器传递到下一个流水段

每个流水段之间的寄存器的信息不一定相同,因此寄存器位数也不一定相同

用户程序不可以通过指令指定访问哪个流水段寄存器,因为流水段寄存器对用户是透明的

影响流水线的因素

  1. 结构相关(资源冲突–”互斥“)
  2. 数据相关(数据冲突-”同步“)
  3. 控制相关(控制冲突)
    在这里插入图片描述

①结构相关

在这里插入图片描述

在这里插入图片描述

原来是只有mem这个存储器,那么取指阶段会访问,执行阶段也会访问,会造成冲突。

现在把这个分为im指令存储器和dm数据存储器,使得两个阶段分别去这两个地方去拿,就不会有冲突

再多准备一套数据存储器和指令存储器,让冲突的指令去访问多出来的这一套

②数据相关

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果有后续的指令可以提前执行,不需要依赖前序指令的执行结果,可以通过编译器调整指令顺序来解决数据相关。(类似于插入空操作)

③控制相关

在这里插入图片描述

静态预测的结果每次都一样的

动态预测的成功率一般比静态预测要高

流水线的分类(似乎不考)

image-20250610204430688

image-20250610204615724

流水线的多发技术

超流水技术是唯一一个直接致力于缩短每个流水线功能段处理时间的技术。其他两个都不能缩短

image-20250610204841405

也叫动态多发射技术

很多超标量CPU都结合动态流水线调度技术,通过动态分支预测等手段,指令不按顺序执行,这种方式成为乱序执行

一个时钟周期内一条流水线可以执行一条以上的指令

一条指令分为多段指令,由不同电路单元实现

超标量通过内置多条流水线来同时执行多个处理器,其实质是空间换取时间,不能缩短流水线功能段的处理时间

在这里插入图片描述

image-20250613221812426

image-20250613221823471

在这里插入图片描述

相比于前两个,不仅对编译器要求更高,还需要更多的硬件资源

3. 五段式指令流水线

常见的5类指令:运算类指令、LOAD指令、STORE指令、条件转移指令、五条件转移指令

运算类指令的执行过程

在这里插入图片描述

LOAD指令的执行过程

在这里插入图片描述

STORE指令的执行过程

在这里插入图片描述

条件转移指令的执行过程

在这里插入图片描述

无条件转移指令的执行过程

在这里插入图片描述

image-20250611104132480

image-20251009144307568

image-20251009144511074

image-20251009150611167

image-20251009151316716

7.多处理器概念

Tips:只考选择题

1. 多处理器的基本概念

单指令流单数据流SISD结构:一个指令流对应一个数据流

单指令流多数据流SIMD结构:一个指令流对应多个数据流

多指令流单数据流MISD结构:多个指令流对应一个数据流(事实上不存在)

image-20251009120027987

多指令流多数据流MIMD结构:多个指令流对应多个数据流

M:Multiple

S:Single

l:Instruction

D:Data

不太严谨的图,方便理解

image-20251009115640900

在这里插入图片描述

同一时间只能处理一个进程的指令,各个进程的指令序列只能并发的执行

image-20251009115709968

在这里插入图片描述

同一时刻也是只有一条指令执行,但是一条指令可以处理多个数据

image-20251009120621330

在这里插入图片描述
在这里插入图片描述

image-20251009121344793

image-20251009121259109

在这里插入图片描述

image-20251009121411166

在这里插入图片描述

在这里插入图片描述
UMA:统一存储访问
NUMA:非统一存储访问

2. 硬件多线程的基本概念

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述