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

0.概览

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

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

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

image-20250605100002496

在这里插入图片描述

在这里插入图片描述

image-20250605094940034

image-20250605095004847

1.CPU的功能和结构

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

image-20250605105248561

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

寄存器 用户可见性 用户透明性 用户可修改性 修改方式
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),在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自在不同的执行步骤中

在这里插入图片描述

image-20250605110353944

各个周期的关系

在这里插入图片描述

image-20250605111046371

指令周期流程

image-20250605111226887

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

image-20250605112641697

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

image-20250605112942747

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

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

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

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

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

在这里插入图片描述

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

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

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

关于这句话的具体解释请看

单周期cpu和多周期cpu、单周期数据通路和多周期数据通路与总线结构数据通路和专用数据通路的关系-CSDN博客

image-20250605123619785

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

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

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

image-20250605122320473

image-20250605121334286

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

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

数据通路通常指指令执行过程中数据经过的路径以及路径上的部件。
数据通路=电路+部件(组合逻辑元件+时序逻辑元件),并且由控制信号进行控制。
组合逻辑元件(操作元件):不能存储,如多路选择器MUX、ALU、译码器。
时序逻辑元件(状态元件):能存储,如寄存器。

ALU,通用寄存器,状态寄存器,Cache,MMU,浮点运算逻辑,异常和中断处理逻辑等都是指令执行过程中数据流经的部件,都属于数据通路的一部分

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

数据通路-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出厂前将所有指令的“微程序”存入“控制器存储器”中

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

在这里插入图片描述

操作控制字段就是用若干个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. 指令流水线

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

image-20250610200728029

image-20250610194044234

image-20250610194250442

指令流水线的表示方式

在这里插入图片描述

流水线的性能指标

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

image-20250610205246489

机器周期的设置

IF:取指阶段

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

EX:执行阶段

M:访存阶段

WB:写回通用寄存器组

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

image-20250610202403871

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

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

每个流水段之间的寄存器的信息不一定相同,因此寄存器位数也不一定相同,用户程序不可以通过指令指定访问哪个流水段寄存器

影响流水线的因素

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

①结构相关

在这里插入图片描述

在这里插入图片描述

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

②数据相关

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

③控制相关

在这里插入图片描述

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

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

image-20250610204430688

image-20250610204615724

流水线的多发技术

image-20250610204841405

也叫动态多发射技术

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

在这里插入图片描述

image-20250613221812426

image-20250613221823471

在这里插入图片描述

3. 五段式指令流水线

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

运算类指令的执行过程

在这里插入图片描述

LOAD指令的执行过程

在这里插入图片描述

STORE指令的执行过程

在这里插入图片描述

条件转移指令的执行过程

在这里插入图片描述

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

在这里插入图片描述

image-20250611104132480

7.多处理器概念

Tips:只考选择题

1. 多处理器的基本概念

不太严谨的图,方便理解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

单指令流单数据流SISD结构:一个指令流对应一个数据流
单指令流多数据流SIMD结构:一个指令流对应多个数据流
多指令流单数据流MISD结构:多个指令流对应一个数据流(事实上不存在)
多指令流多数据流MIMD结构:多个指令流对应多个数据流
M:Multiple
S:Single
l:Instruction
D:Data

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

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述