Bootstrap

计组——中央处理器

中央处理器

中央处理器(CPU)是计算机的中心,主要由运算器和控制器两大部分组成。

在这里插入图片描述

CPU的具体功能包括:

  • 指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制
  • 操作控制:CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制部件按指令要求进行动作
  • 时间控制:对各种操作加以时间上的控制,为每条指令按时间顺序提供应有的控制信号
  • 数据加工:对数据进行算术和逻辑运算
  • 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理

基本结构

在这里插入图片描述

中央处理器(CPU)由运算器和控制器组成。其中,控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和执行指令运算器的功能是对数据进行加工

运算器

运算器计算机对数据进行加工处理的中心,接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理,包含:

  • 算术逻辑单元(ALU):进行算术/逻辑运算
  • 暂存寄存器:用于暂存从主存读来的数据(不能存放在通用寄存器中,否则会破坏其原有内容),对应用程序员是透明的
  • 累加寄存器(ACC):一个通用寄存器,用于暂时存放ALU运算的结果信息,可作为加法运算的一个输入端
  • 通用寄存器组:用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等
  • 程序状态字寄存器(PSW):保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,状态信息参与并决定微操作的形成
  • 移位器:对操作数或运算结果进行移位运算
  • 计数器(CT):控制乘除运算的操作步数

控制器

控制器是整个系统的指挥中枢,协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令,包含:

  • 程序计数器(PC):用于指出下一条指令在主存中的存放地址。CPU根据PC的内容去主存中取指令。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
  • 指令寄存器(IR):用于保存当前正在执行的那条指令。
  • 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。
  • 存储器地址寄存器(MAR):用于存放要访问的主存单元的地址。
  • 存储器数据寄存器(MDR):用于存放向主存写入的信息或从主存读出的信息。
  • 时序系统:用于产生各种时序信号,它们都由统一时钟(CLOCK)分频得到。
  • 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。

CPU内部寄存器大致可分为两类:用户可见的寄存器(通用寄存器组、PSW、PC,可编程)、用户不可见的寄存器(MAR、MDR、IR、暂存寄存器,不可编程)

指令执行过程

在这里插入图片描述

指令周期

CPU从主存中取出并执行一条指令的时间称为指令周期,一个完整的指令周期应包括取指、间址、执行和中断4个周期。指令周期常用若干机器周期(CPU周期)来表示,一个机器周期又包含若干时钟周期(也称节拍、T周期,是CPU操作的最基本单位)。不同指令的指令周期可能不同,每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等。

在这里插入图片描述

4个工作周期都有CPU访存操作,只是访存的目的不同。取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点。

为了区别不同的工作周期,在CPU内设置4个标志触发器FE、IND、EX和INT,分别对应取指、间址、执行和中断周期,1 状态表示有效

取指周期

在这里插入图片描述

取指周期的任务是根据PC中的内容从主存中取出指令代码并存放在IR中,数据流向:

  1. PC①MAR②地址总线③主存
  2. CU发出读命令④控制总线⑤主存
  3. 主存⑥数据总线⑦MDR⑧IR(存放指令)
  4. CU发出控制信号⑨PC内容加1

间址周期

在这里插入图片描述

间址周期的任务是取操作数有效地址,一次间址数据流向:

  1. Ad(IR)(取出IR中存放的指令字的地址字段)①MAR②地址总线③主存
  2. CU发出读命令④控制总线⑤主存
  3. 主存⑥数据总线⑦MDR(存放有效地址)

执行周期

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

数据流是根据指令要求依次访问的数据序列。

中断周期

在这里插入图片描述

中断周期的任务是处理中断请求,为了能够恢复当前任务,需要保存断点到堆栈,数据流向:

  1. CU控制将SP减1,SP①MAR②地址总线③主存
  2. CU发出写命令④控制总线⑤主存
  3. PC⑥MDR⑦数据总线⑧主存(程序断点存入主存)
  4. CU(中断服务程序的入口地址)⑨PC

CPU在每条指令执行结束前,都要发出中断查询信号,若有中断请求,进入中断周期,响应中断。

执行方案

一个指令周期通常要包括几个执行步骤,每个步骤完成指令的一部分功能,几个依次执行的步骤完成指令的全部功能。出于性能和硬件成本等考虑,可以采用单指令周期、多指令周期、流水线3种不同的方案来安排指令的执行步骤

1、单指令周期

对所有指令都选用相同的执行时间(指令周期)来完成,称为单指令周期方案。指令周期取决于执行时间最长的指令的执行时间,指令之间串行执行,可能会降低整个系统的运行速度。

2、多指令周期

对不同类型的指令选用不同的执行时间(指令周期)来完成,称为多指令周期方案。可选用不同个数的时钟周期来完成不同指令的执行,指令之间串行执行,需要更复杂的硬件设计。

3、流水线方案

通过在每个时钟周期启动一条指令,尽量让多条处在不同的执行步骤中的指令同时运行,称为流水线方案。追求在每个时钟脉冲周期完成一条指令的执行过程(理想情况下),指令之间可以并行执行

数据通路

数据在功能部件之间传送的路径称为数据通路,包括数据通路上流经的部件。数据通路由控制部件控制,其功能是实现CPU内部的运算器与寄存器及寄存器之间的数据交换。数据通路的基本结构主要有CPU内部单总线方式、CPU内部多总线方式、专用数据通路方式三种。

1、CPU内部单总线方式

将所有寄存器的输入端和输出端都连接到一条公共通路上,结构比较简单,但数据传输存在较多的冲突现象,性能较低。

在这里插入图片描述

注意:内部总线是指同一部件,如CPU 内部连接各寄存器及运算部件之间的总线;系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线。

2、CPU内多总线方式

将所有寄存器的输入端和输出端都连接到多条公共通路上,同时在多个总线上传送不同的数据,提高效率。

3、专用数据通路方式

根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,性能较高,但硬件量大。

在这里插入图片描述

在执行完一个微操作后,CU和撤销相应的控制信号,让总线恢复空闲。

控制器

控制器是计算机系统的指挥中心,它根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行结果。根据控制器产生微操作控制信号的方式的不同,控制器可分为硬布线控制器和微程序控制器

在这里插入图片描述

每条指令的执行是由控制器发出的一组微操作实现的。

CPU的控制方式:

控制单元控制一条指令执行的过程,实质上是依次执行一个确定的微操作序列的过程。由于不同指令所对应的微操作数及复杂程度不同,因此每条指令和每个微操作所需的执行时间也不同。主要有以下3种控制方式。

1、同步控制方式

所谓同步控制方式,是指系统有一个统一的时钟,所有的控制信号均来自这个统一的时钟信号。通常以最长的微操作序列和最烦琐的微操作作为标准,采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令。

优点:控制电路简单

缺点:运行速度慢

2、异步控制方式

异步控制方式不存在基准时标信号,各部件按自身固有的速度工作,通过应答方式进行联络。

优点:运行速度快

缺点:控制电路比较复杂

3、联合控制方式

联合控制方式是介于同步、异步之间的一种折中,对各种不同的指令的微操作实行大部分采用同步控制、小部分采用异步控制的办法。

硬布线控制器

硬布线控制器,又称组合逻辑控制器,由复杂的组合逻辑门电路和一些触发器构成,它根据指令的要求、当前的时序及外部和内部的状态,按时间的顺序发送一系列微操作控制信号

基本结构

在这里插入图片描述

每个输出的控制信号对应一个微命令,即对应一个微操作

控制单元CU的输入信号来源:

  • 经指令译码器译码产生的指令信息
  • 时序系统产生的机器周期信号和节拍信号
  • 来自执行单元的反馈信息即标志

特点:

  • 指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)
  • 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。
  • 由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。
微程序控制器

在这里插入图片描述

微程序控制器采用存储逻辑实现,把微操作信号代码化,使每条机器指令转化成为一段微程序并存入一个专门的存储器(控制存储器)中,微操作控制信号由微指令产生。

目前,大多数计算机都采用微程序设计技术

基本术语

在这里插入图片描述

  • 微操作:计算机中最基本的、不可再分解的操作。一条机器指令可以分解成一个微操作序列。
  • 微命令:将控制部件向执行部件发出的各种控制命令称为微命令,是构成控制序列的最小单位。例如打开或关闭某个控制门的电位信号。微命令和微操作是一一对应的。微命令是微操作的控制信号,微操作是微命令的执行过程。
  • 微指令:微指令是若干微命令的集合。一条微指令通常至少包含两大部分信息:
    • 操作控制字段,又称微操作码字段,用于产生某一步操作所需的各种操作控制信号
    • 顺序控制字段,又称微地址码字段,用于控制产生下一条要执行的微指令地址
  • 微程序:微指令的有序集合,一条指令的功能由一段微程序来实现
  • 微周期:微指令周期,通常指从控制存储器中读取一条微指令并执行相应的微操作所需的时间。

微程序是由微指令组成的,用于描述机器指令,实际上是机器指令的实时解释器,是由计算机设计者事先编制好并存放在控制存储器中的,一般不提供给用户。而程序最终由机器指令组成,是由软件设计人员事先编制好并存放在主存或辅存中的。

指令是对程序执行步骤的描述,微指令是对指令执行步骤的描述

通常是公用的,故如果某指令系统中有n条机器指令,则CM中微程序段的个数至少是n+1个(一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序段 )

基本结构

在这里插入图片描述

其中:

  • 控制存储器(CM):它是微程序控制器的核心部件,用于存放各指令对应的微程序,控制存储器可用只读存储器ROM构成。
  • 微指令寄存器(CMDR或μIR):用卡存放从CM中取出的微指令,它的位数同微指令字长相等。
  • 微地址形成部件:用于产生初始微地址和 后继微地址,以保证微指令的连续执行。
  • 微地址寄存器(CMAR或μPC):接收微地址形成部件送来的微地址,为在CM中读取微指令作准备,PC和MAR功能结合体。

微命令和微操作一一对应,一个微命令对应一根输出线

工作过程:

  1. 执行取微指令公共操作。具体的执行是:在机器开始运行时,自动将取指微程序的入口地址送入CMAR,并从CM中读出相应的微指令送入CMDR。取指微程序的入口地址一般为CM的0号单元,当取指微程序执行完后,从主存中取出的机器指令就已存入指令寄存器中。
  2. 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入CMAR。
  3. 从CM中逐条取出对应的微指令并执行。
  4. 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第①步,以完成取下一条机器指令的公共操作。

如此周而复始,直到整个程序执行完毕。

徽指令

在这里插入图片描述

常考:直接编码、字段编码、断定法、计数器法

微指令是若干微命令的集合。一条微指令通常至少包含两大部分信息:

  • 操作控制字段:又称微操作码字段,用于产生某一步操作所需的各种操作控制信号
  • 顺序控制字段:又称微地址码字段,用于控制产生下一条要执行的微指令地址
格式

微指令格式通常分水平型微指令和垂直型微指令两种,混合型微指令是两者的结合。

1、水平型微指令

一条水平型微指令定义并执行几种并行的基本操作,指令字中的一位对应一个控制信号,有输出时为1,否则为0。

在这里插入图片描述

  • 优点:微程序短,执行速度快
  • 缺点:微指令长,编写微程序较麻烦

从编码方式看,直接编码、字段直接编码、字段间接编码和混合编码都属于水平型微指令。

2、垂直型微指令

一条垂直型微指令只能定义并执行一种基本操作。在微指令中设置微操作码字段,由微操作码规定微指令的功能。

在这里插入图片描述

  • 优点:微指令短、简单、规整,便于编写微程序
  • 缺点:微程序长,执行速度慢,工作效率低

水平型微指令和垂直型微指令:

  • 水平型微指令并行操作能力强、效率高、灵活性强;垂直型微指令则较差。
  • 水平型微指令执行一条指令的时间短;垂直型微指令执行的时间长。
  • 由水平型微指令解释指令的微程序,具有微指令字较长但微程序短的特点;垂直型微指令则与之相反,其微指令字较短而微程序长。
  • 水平型微指令用户难以掌握,而垂直型微指令与指令比较相似,相对容易掌握。

3、混合型微指令

在垂直型的基础上,增加一些不太复杂的并行操作。

  • 优点:微指令较短,仍便于编写;微程序也不长,执行速度加快。
编码方式

微指令的编码方式又称微指令的控制方式,是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。

1、直接编码(直接控制)方式

**直接编码法无须进行译码,微指令的微命令字段中每位都代表一个微命令。**设计微指令时,选用或不选用某个微命令,只要将表示该微命令的对应位设置成1或0即可。每个微命令对应并控制数据通路中的一个微操作。

在这里插入图片描述

  • 优点:简单、直观,执行速度快,操作并行性好
  • 缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控制存储器容量极大

2、字段直接编码方式

将微指令的微命令字段分成若干小字段,把互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关

在这里插入图片描述

  • 优点:可以缩短微指令字长
  • 缺点:比直接编码方式慢(要通过译码电路后再发出微命令)

相容性微命令是指可以并行执行的微命令,互斥性微命令是指不允许并行执行的微命令。

微命令字段分段原则:

  • 互斥性微命令分在同一段内,相容性微命令分在不同段内。
  • 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
  • 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。

3、字段间接编码方式

一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,因此称为字段间接编码,又称隐式编码。

在这里插入图片描述

  • 优点:可进一步缩短微指令字长
  • 缺点:削弱了微指令的并行控制能力

通常作为字段直接编码方式的一种辅助手段

地址形成方式

后继微地址的形成主要有以下类型:

  • 直接由微指令的下地址字段指出:又称为断定方式,微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继指令的地址。

    在这里插入图片描述

  • 根据机器指令的操作码形成:机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。

  • 增量计数器法:即(CMAR)+1→CMAR,适用于后继微指令的地址连续的情况。

  • 分支转移:根据各种标志决定微指令分支转移的地址。

    在这里插入图片描述

  • 测试网络:通过测试网络形成。

    在这里插入图片描述

  • 由硬件直接产生微程序入口地址:电源加电后,第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向CMAR输入微指令的地址,是取指周期微程序的入口地址

微程序设计分类

1、动态微程序设计

在一台微程序控制的计算机中,假如能根据用户的要求改变微程序,则这台机器就具有动态微程序设计功能。动态微程序的设计需要可写控制寄存器的支持,否则难以改变微程序的内容。实现动态微程序设计可采用可擦除可编程只读存储器(EPROM)。

2、毫微程序设计

在普通的微程序计算机中,从主存取出的每条指令是由放在控制存储器中的微程序来解释执行的,通过控制线对硬件进行直接控制。若硬件不由微程序直接控制,而是通过存放在第二级控制存储器中的毫微程序来解释的,这个第二级控制存储器就称为毫微存储器,直接控制硬件的是毫微微指令。

比较

1、硬布线控制器

硬布线控制器的优点是由于控制器的速度取决于电路延迟,所以速度快;缺点是由于将控制部件视为专门产生固定时序控制信号的逻辑电路,所以把用最少元件和取得最高速度作为设计目标,一旦设计完成,就不可能通过其他额外修改添加新功能。

2、微程序控制器

微程序控制器的优点是同组合逻辑控制器相比,微程序控制器具有规整性、灵活性、可维护性等一系列优点;缺点是由于微程序控制器采用了存储程序原理,所以每条指令都要从控制存储器中取一次,影响速度。

在这里插入图片描述

异常和中断机制

在这里插入图片描述

由CPU内部产生的意外事件被称为异常,也称内中断。由来自CPU外部的设备向CPU发出的中断请求被称为中断,通常用于信息的输入和输出**,也称外中断**。异常和中断的处理过程基本是相同的,统称为中断,但有以下不同点:

  • 缺页或溢出等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
  • 异常的检测由CPU自身完成,不必通过外部的某个信号通知CPU。对于中断,CPU必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。
  • 异常是CPU执行一条指令时,由CPU在其内部检测到的、与正在执行的指令相关的同步事件;中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件。

主要功能:

  • 实现CPU与I/O设备的并行工作
  • 处理硬件故障和软件错误
  • 实现人机交互,用户干预机器需要用到中断系统
  • 实现多道程序、分时操作,多道程序的切换需借助于中断系统
  • 实时处理需要借助中断系统来实现快速响应
  • 实现应用程序和操作系统(管态程序)的切换,称为软中断
  • 多处理器系统中各处理器之间的信息交流和任务切换
异常

异常是由CPU内部产生的意外事件,分为硬故障中断和程序性异常。

  • 硬故障中断:由硬连线出现异常引起的,如存储器校验错、总线错误等。
    • 终止(Abort):在执行指令的过程中发生了使计算机无法继续执行的硬件故障。如控制器出错、存储器校验错等
  • 程序性异常:也称软件中断,是指在CPU内部因执行指令而引起的异常事件。如整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。
    • 故障(Fault):指在引起故障的指令启动后、执行结束前被检测到的异常事件。如非法操作码、缺段或缺页、除数为0等。
    • 自陷(Trap):自陷也称陷阱或陷入,是预先安排的一种异常事件。事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个陷阱,当执行到被设置了陷阱的指令时,CPU在执行完自陷指令后,自动根据不同陷阱类型进行相应的处理,然后返回到自陷指令的下一条指令执行。如系统调用指令、条件自陷指令(如MIPS中的teq、teqi、tne、tnei等)。
中断

中断是指来自CPU外部、与CPU执行指令无关的事件引起的中断,包括I/O设备发出的I/O中断(如键盘输入、打印机缺纸等)或发生某种特殊事件(如用户按Esc键、定时器计数时间到)等。外部I/O设备通过特定的中断请求信号线向CPU提出中断请求,CPU每执行完一条指令就检查中断请求信号线,如果检测到中断请求,则进入中断响应周期。

  • 可屏蔽中断:指通过可屏蔽中断请求线INTR向CPU发出的中断请求。CPU可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或不屏蔽它,被屏蔽的中断请求将不被送到CPU。
  • 不可屏蔽中断:指通过专门的不可屏蔽中断请求线NMI向CPU发出的中断请求,通常是非常紧急的硬件故障,如电源掉电等。这类中断请求信号不可被屏蔽,以让CPU快速处理这类紧急事件。
中断请求标志

每个中断源向CPU发出中断请求的时间是随机的,为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为1时,表示中断源有请求。这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。

在这里插入图片描述

中断请求标志用于判断是哪个设备发来的中断信号

对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/O的中断请求,即CPU响应中断的时间是在每条指令执行阶段的结束时刻。

CPU响应中断必须满足以下3个条件:

  • 中断源有中断请求
  • CPU允许中断,即开中断
  • 一条指令执行完毕,且没有更紧迫的任务
中断源识别

有两种方法识别中断源:

  • 软件查询法
  • 硬件向量法:中断向量法,由硬件产生向量地址,再由向量地址找到入口地址。CPU响应中断后,通过识别中断源获得中断类型号,然后据此计算出对应中断向量的地址:再根据该地址从中断向量表中取出中断服务程序的入口地址,并送入程序计数器PC,以转而执行中断服务程序

在这里插入图片描述

无条件转移指令,JMP 300,使得PC的值转换为300

中断判优

中断判优既可以用硬件实现,也可用软件实现:

  • 硬件实现:通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中
  • 软件实现:通过查询程序实现的

在这里插入图片描述

软件实现的要执行多条指令后才能得到结果,现在计算机多采用硬件排队器

优先级设置:

  • 硬件故障中断属于最高级,其次是软件中断
  • 非屏蔽中断优于可屏蔽中断
  • DMA请求优于I/O设备传送的中断请求
  • 高速设备优于低速设备
  • 输入设备优于输出设备
  • 实时设备优于普通设备
中断方式

按照CPU在执行中断的过程中是否响应更高优先级的中断可分为:单重中断和多重中断

在这里插入图片描述

单重中断

单重中断:执行中断服务程序时不响应新的中断请求。

在这里插入图片描述

多重中断

多重中断:又称中断嵌套,执行中断服务程序时可响应新的中断请求。

在这里插入图片描述

CPU要具备多重中断的功能,须满足下列条件:

  • 在中断服务程序中提前设置开中断指令
  • 优先级别高的中断源有权中断优先级别低的中断源

中断屏蔽技术

中断屏蔽技术主要用于实现多重中断, 通过动态调整处理优先级,使中断处理更灵活。每个中断源都有一个屏蔽触发器, 1表示屏蔽该中断源的请求, 0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。

在这里插入图片描述

屏蔽字中1越多,优先级越高。每个屏蔽字中至少有一个1(至少要能屏蔽自身的中断)

异常和中断响应过程

从CPU检测到异常或中断事件,到调出相应的处理程序的整个过程,称为异常和中断的响应。CPU对异常和中断响应的过程可分为:关中断、保存断点和程序状态、识别异常和中断并转到相应的处理程序。

1、关中断

禁止响应新的中断,即关中断。通常通过设置中断允许(IF)触发器来实现,若IF置为1,则为开中断;若IF置为0,则表示关中断

2、保存断点和程序状态

为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中,被中断时的程序状态字寄存器PSWR的内容也需要保存在栈或特定寄存器中,在异常和中断返回时恢复到PSWR中。

3、识别异常和中断并转到相应的处理程序

异常和中断源的识别有软件识别和硬件识别两种方式。异常和中断源的识别方式不同,异常大多采用软件识别方式,而中断可以采用软件识别方式或硬件识别方式。

  • 软件识别方式:是指CPU设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理,然后转到内核中相应的处理程序。
  • 硬件识别方式:又称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,因而可以根据类型号快速找到对应的处理程序。

整个响应过程是不可被打断的,整个中断处理过程是由软/硬件协同实现的。

工作流程:

当CPU在执行用户程序的第ⅰ条指令时检测到一个异常事件,或者在执行第i条指令后发现一个中断请求信号,则CPU打断当前用户程序,然后转到相应的异常或中断处理程序去执行。若异常或中断处理程序能够解决相应的问题,则在异常或中断处理程序的最后,CPU通过执行异常或中断返回指令,回到被打断的用户程序的第i条指令或第i+1条指令继续执行;若异常或中断处理程序发现是不可恢复的致命错误,则终止用户程序。通常情况下,对异常和中断的具体处理过程由操作系统(和驱动程序)完成。

在这里插入图片描述

  1. 中断请求:中断源向CPU发送中断请求信号
  2. 中断响应判优:多个中断源同时提出请求时通过中断判优逻辑响应一个中断源
  3. CPU响应中断的条件:CPU在满足一定的条件下(中断源有中断请求、CPU允许中断及开中断、指令执行完毕且没有更紧迫的任务)响应中断源发出的中断请求
  4. 关中断:为了保证保存中断现场(即CPU主要寄存器中的内容)的期间不被新的中断所打断
  5. 保存断点:为了保证在中断服务程序执行完毕后能正确地返回到原程序,必须将原来程序的断点(PC)保存在栈或特定寄存器中
  6. 中断服务程序寻址:硬件向量法、软件查询法
  7. 保存现场和屏蔽字:进入中断服务程序后首先要保存现场(用户可见的工作寄存器的内容)和中断屏蔽字
  8. 开中断:允许更高级中断请求得到响应,实现中断嵌套。
  9. 执行中断服务程序
  10. 关中断:保证在恢复现场和屏蔽字时不被中断
  11. 恢复现场和屏蔽字:将现场和屏蔽字恢复到原来的状态。
  12. 开中断、中断返回:中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序

4 - 6 由中断隐指令(硬件直接实现的一系列操作)完成,7 - 12 由中断服务程序完成

中断隐指令

中断隐指令是保存原程序的PC值,并让PC指向中断服务程序的第一条指令,是由硬件直接实现的一系列操作:

  • 关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
  • 保存断点。为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
  • 引出中断服务程序。引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器(PC)。

在这里插入图片描述

指令流水线

流水线技术是一种时间上的并行技术,将一个任务分解为几个不同的子阶段,每个阶段在不同的功能部件上并行执行,以便在同一时刻能够同时执行多个任务,进而提高了功能部件的并行性和程序的执行效率。

现代计算机普遍采用指令流水线技术,同一时刻有多条指令在CPU的不同功能部件中并发执行

超标量处理机:空间上的并行技术,在一个处理机内设置多个执行相同任务的功能部件,并让这些功能部件并行工作。

指令流水线是指令的执行过程,可分解为若干阶段(功能段或流水段),每个阶段由相应的功能部件完成。假设一条指令的执行过程分为

  • 取指(IF):从指令存储器或Cache中取指令。
  • 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中取操作数。
  • 执行/计算地址(EX):执行运算操作或计算地址。
  • 访存(MEM):对存储器进行读写操作。
  • 写回(WB):将指令执行结果写回寄存器堆。

在这里插入图片描述

每个阶段用到的硬件都不同

流水线每一个功能段部件后面都要有一个缓冲寄存器(锁存器),其作用是保存本流水段的执行结果,提供给下一流水段使用

把k+1条指令的取指阶段提前到第k条指令的译码阶段,从而将第k+1条指令的译码阶段与第k条指令的执行阶段同时进行。

在这里插入图片描述

只有大量连续任务不断输入流水线,才能充分发挥流水线的性能,而指令的执行正好是连续不断的,非常适合采用流水线技术。对于其他部件级流水线,如浮点运算流水线,同样也仅适合于提升浮点运算密集型应用的性能,对于单个运算是无法提升性能的。

理想情况下,每个时钟周期都有一条指令进入流水线,每个时钟周期都有一条指令完成,每条指令的时钟周期数(即CPI)都为1

流水线设计原则:

指令流水段个数以最复杂指令所用的功能段个数为准;流水段的长度以最复杂的操作所花的时间为准。

为了利于实现指令流水线,指令集应具有如下特征:

  • 指令长度应尽量一致,有利于简化取指令和指令译码操作。否则,取指令所花时间长短不一,使取指部件极其复杂,且也不利于指令译码。
  • 指令格式应尽量规整,尽量保证源寄存器的位置相同,有利于在指令未知时就可取寄存器操作数,否则须译码后才能确定指令中各寄存器编号的位置。
  • 采用Load/Store指令,其他指令都不能访问存储器,从而把Load/Store指令的地址计算和运算指令的执行步骤规整在同一个周期中,有利于减少操作步骤。
  • 数据和指令在存储器中对齐存放。有利于减少访存次数,使所需数据在一个流水段内就能从存储器中得到。
分类
使用级别

根据流水线使用的级别的不同,流水线可分为:

  • 部件功能级流水线:将复杂的算术逻辑运算组成流水线工作方式。如将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
  • 处理机级流水线:把一条指令解释过程分成多个子过程,如取指、译码、执行、访存及写回5个子过程。
  • 处理机间流水线:一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
完成功能

按流水线可以完成的功能,流水线可分为:

  • 单功能流水线:指只能实现一种固定的专门功能的流水线;
  • 多功能流水线:指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
连接方式

按同一时间内各段之间的连接方式,流水线可分为:

  • 静态流水线:指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
  • 动态流水线:指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。能够大幅度提高流水线的效率,但会使流水线控制变得很复杂。
反馈信号

按流水线的各个功能段之间是否有反馈信号,流水线可分为:

  • 线性流水线:从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
  • 非线性流水线:存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,适合进行线性递归运算。
执行方式
顺序执行方式

传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。总耗时:T=nx3t=3nt

在这里插入图片描述

优点:控制简单,硬件代价小

缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低

一次重叠执行方式

总耗时:T=3t+(n-1)×2t=(1+2n)t

在这里插入图片描述

优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高

缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂

二次重叠执行方式

总耗时:T=3t+(n-1)xt=(2+n)t

在这里插入图片描述

与顺序执行方式相比,指令的执行时间缩短近2/3,是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。

表示方法
指令执行过程图

在这里插入图片描述

主要用于分析指令执行过程以及影响流水线的因素

时空图

在时空图中,横坐标表示时间,它被分割成长度相等的时间段T;纵坐标为空间,表示当前指令所处的功能部件。每隔一个时间T就有一条指令进入流水线,从时刻5T开始每隔一个时间T就有一条指令流出流水线。

在这里插入图片描述

时空图可以直观地描述流水线的执行情况,主要用于分析流水线的性能

性能指标
吞吐率

流水线的吞吐率,是指在单位时间内流水线所完成的任务数量,或输出结果的数量

在这里插入图片描述

装入时间、排空时间

加速比

流水线的加速比,是指完成同样一批任务,不使用流水线与使用流水线所用的时间之比

在这里插入图片描述

效率

流水线的效率,是指流水线的设备利用率。在时空图上,定义为完成n个任务占用的时空区有效面积n个任务所用的时间与k个流水段所围成的时空区总面积之比。

在这里插入图片描述

流水线冒险

在指令流水线中,可能会遇到一些情况使得流水线无法正确执行后续指令而引起流水线阻塞或停顿,这种现象称为流水线冒险。根据导致冒险的原因不同主要有3种:结构冒险(资源冲突)、数据冒险(数据冲突)和控制冒险(控制冲突)。

结构冒险

由于多条指令在同一时刻争用同一硬件资源而形成的冲突,也称为资源冲突,有以下两种解决办法:

  • 暂停相关指令:前一指令访存时,使后一条相关指令(以及其后续指令)暂停一个时钟周期
  • 资源重复配置:单独设置数据存储器和指令存储器,使取数和取指令操作各自在不同的存储器中进行

现代计算机都引入了Cache机制,而L1 Cache通常采用数据Cache和指令Cache分离的方式,因而避免了资源冲突的发生。

数据冒险

在一个程序中,下一条指令会用到当前指令计算出的结果,两条指令重叠处理时,会发生数据冲突,数据冒险可分为:

  • 写后读(Read After Write, RAW)相关:表示当前指令将数据写入寄存器后,下一条指令才能从该寄存器读取数据。
  • 读后写(Write After Read, WAR)相关:表示当前指令读出数据后,下一条指令才能写该寄存器。
  • 写后写(Write After Write, WAW)相关:表示当前指令写入寄存器后,下一条指令才能写该寄存器。

解决办法:

  • 暂停相关指令:把数据相关指令及其后续指令都暂停一至几个时钟周期,可分为硬件阻塞(stall)和软件插入NOP指令
  • 数据旁路技术:设置相关专用通路,直接把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程
  • 编译优化:调整指令顺序来解决数据相关
控制冒险

指令通常是顺序执行的,但是在遇到改变指令执行顺序的情况,会改变PC值,造成断流,从而引起控制冒险。解决办法:

  • 分支预测:对转移指令进行分支预测,尽早生成转移目标地址。
    • 静态预测:总是预测条件不满足,即继续执行分支指令的后续指令。
    • 动态预测:根据程序执行的历史情况,进行动态预测调整,有较高的预测准确率。
  • 预测两个方向的指令:预取转移成功和不成功两个控制流方向上的目标指令
  • 加快和提前形成条件码
  • 提高转移方向的猜准率

注意:Cache 缺失的处理过程也会引起流水线阻塞。

在不过多增加硬件成本的情况下,如何尽可能地提高指令流水线的运行效率是选用指令流水线技术必须解决的关键问题。

高级流水线技术

有两种增加指令级并行的策略:

  • 多发射技术:通过采用多个内部功能部件,使流水线功能段能同时处理多条指令,处理机一次可以发射多条指令进入流水线执行
  • 超流水线技术:通过增加流水线级数来使更多的指令同时在流水线中重叠执行
超长指令字技术

超长指令字技术也称静态多发射技术由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位),需要采用多个处理部件。

在这里插入图片描述

超标量流水技术

超标量流水线技术,也称动态多发射技术每个时钟周期内可并发多条独立指令,以并行操作方式将两条或多条指令编译并执行,为此需配置多个功能部件。超标量技术不能调整指令的执行顺序,指令按照顺序发射执行,但可通过编译程序优化。

在这里插入图片描述

超流水线技术

超流水线技术是指在一个时钟周期内在分段,从而通过提高流水线主频的方式来提升流水线性能(流水线功能段划分得越多,时钟周期就越短,指令吞吐率也就越高)。但是,流水线级数越多,用于流水寄存器的开销就越大,因而流水线级数是有限制的,并不是越多越好。在一个周期内一个功能部件使用多次。不能调整指令的执行顺序,但可通过编译程序优化。

在这里插入图片描述

超流水线CPU在流水线充满后,每个时钟周期还是执行一条指令,CPI = 1,但其主频更高;多发射流水线CPU每个时钟周期可以处理多条指令,CPI<1,相对而言,多发射流水线成本更高,控制更复杂。

常见指令执行过程

在这里插入图片描述

运算类

运算类指令执行过程如下:

  • IF:根据PC从指令Cache取指令至IF段 的锁存器
  • ID:取出操作数至ID段锁存器
  • EX:运算,将结果存入EX段锁存器
  • M:空段
  • WB:将运算结果写回指定寄存器
LOAD指令

LOAD指令执行过程如下:

  • IF:根据PC从指令Cache取指令至IF段 的锁存器
  • ID:将基址寄存器的值放到锁存器A,将偏移量的值放到lmm
  • EX:运算,得到有效地址
  • M:从数据Cache中取数并放入锁存器
  • WB:将取出的数写回寄存器

通常,RISC处理器只有取数LOAD和存数STORE指令才能访问主存

STORE指令

STORE指令执行过程如下:

  • IF:根据PC从指令Cache取指令至IF段的锁存器
  • ID:将基址寄存器的值放到锁存器A,将偏移量的值放到 Imm。将要存的数放到B
  • EX:运算,得到有效地址。并将锁存器B的内容放到锁存器Store
  • M:写入数据Cache
  • WB:空段
条件转移指令

条件转移指令执行过程如下:

  • IF:根据PC从指令Cache取指令至IF段的锁存器
  • ID:进行比较的两个数放入锁存器A、B;偏移量放入Imm
  • EX:运算,比较两个数
  • M:将目标PC值写回PC
  • WB:空段

写回PC的功能段称为WrPC段,其耗时比M段更短,可安排在M段时间内完成

无条件转移指令

无条件转移指令执行过程如下:

  • IF:根据PC从指令Cache取指令至IF段的锁存器
  • ID:偏移量放入Imm
  • EX:将目标PC值写回PC
  • M:空段
  • WB:空段

WrPC段耗时比EX段更短,可安排在EX段时间内完成。WrPC段越早完成,就越能避免控制冲突

计算机体系结构

基于指令流的数量和数据流的数量,将计算机体系结构分为SISD、SIMD、MISD和MIMD四类。常规的单处理器属于SISD,而常规的多处理器属于MIMD。

SIMD和MIMD是两种并行计算模式,其中SIMD是一种数据级并行模式,而MIMD是一种并行程度更高的线程级并行或线程级以上并行计算模式。

单指令流单数据流(SISD)结构

SISD是传统的串行计算机结构,通常仅包含一个处理器和一个存储器,处理器在一段时间内仅执行一条指令,按指令流规定的顺序串行执行指令流中的若干条指令

在这里插入图片描述

单指令流多数据流(SIMD)结构

SIMD是指一个指令流同时对多个数据流进行处理(数据级并行技术)。通常由一个指令控制部件、多个处理单元组成。每个处理单元虽然执行的都是同一条指令,但不同处理单元执行的同一条指令所处理的数据是不同的。

在这里插入图片描述

对结构类似的大量数据进行相同处理,一条指令处理很多个数据。

eg1:某些显卡常采用SIMD,图像处理时,常对每个像素点进行完全一样的渲染(比如加个粉红色滤镜)

eg2:可用于优化for循环中对数组元素的重复处理

补充:向量处理器

向量处理器是SIMD的变体,是一种实现了直接操作一维数组(向量)指令集的CPU,而串行处理器只能处理单一数据集。其基本理念是将从存储器中收集的一组数据按顺序放到一组向量寄存器中,然后以流水化的方式对它们依次操作,最后将结果写回寄存器。在特定工作环境中极大地提升了性能,尤其是在数值模拟或者相似的领域中。

在这里插入图片描述

eg:向量处理机的LOAD指令,可以将一个向量取到向量寄存器中;加法指令,可以实现两个向量相加

应用于:向量计算、大量浮点数计算,空气动力学、核物理学、巨型矩阵计算问题、超级计算机银河

多指令流单数据流(MISD)结构

MISD是指同时执行多条指令,处理同一个数据,实际上不存在这样的计算机。

多指令流多数据流(MIMD)结构

MIMD是指同时执行多条指令分别处理多个不同的数据,MIMD分为多计算机系统和多处理器系统。

1、多计算机系统

多计算机系统中的每个计算机节点都具有各自的私有存储器,并且具有独立的主存地址空间,不能通过存取指令来访问不同节点的私有存储器,而要通过消息传递进行数据传送,也称消息传递MIMD。

在这里插入图片描述

eg:多台计算机组成的分布式计算系统

2、多处理器系统

多处理器系统是共享存储多处理器(SMP)系统的简称,多个处理器共享单一地址空间,通过存取指令来访问系统中的所有存储器,也称共享存储MIMD。

在这里插入图片描述

eg: Intel i5、i7 处理器

多个处理器共享同一个物理地址空间,但仍可在自己的虚拟地址空间中单独地运行程序。

在多核计算机系统中,如要充分发挥硬件的性能,必须采用多线程(或多进程)执行,使得每个核在同一时刻都有线程在执行。与单核上的多线程不同,多核上的多个线程是在物理上并行执行的,是真正意义上的并行执行。

单一地址空间的多处理器有两种类型:

  • 统一存储访问(UMA)多处理器:多个处理器使用同一个共享存储器。每个处理器对所有存储单元的访问时间是大致相同的。根据处理器与共享存储器之间的连接方式,分为基于总线、基于交叉开关网络和基于多级交换网络连接等几种处理器。
  • 非统一存储访问(NUMA)多处理器:主存被分割并分配给了同一机器上的不同处理器或内存控制器。某些访存请求要比其他的快,具体取决于使用的处理器和使用的字。处理器中不带高速缓存,称为NC-NUMA;处理器中带有一致性高速缓存,称为CC-NUMA

早期的计算机采用统一存储访问(UMA)构架,内存控制器没有整合进CPU,访存操作需要经过北桥芯片(集成了内存控制器,并与内存相连),CPU通过前端总线和北桥芯片相连。

随着CPU性能提升由提高主频转到增加CPU数量(多核、多CPU),越来越多的CPU对前端总线的争用使得前端总线成为瓶颈。为了消除UMA架构的瓶颈,非统一存储访问(NUMA)构架诞生,内存控制器被集成到CPU内部,每个CPU都有独立的内存控制器,CPU之间通过QPI总线相连。每个CPU都独立连接到一部分内存,CPU直连的这部分内存被称为本地内存。CPU可以通过QPI总线访问其他CPU的远程内存,但访问速度明显要慢于访问本地内存。

硬件多线程

在这里插入图片描述

在支持硬件多线程的CPU中,必须为每个线程提供单独的通用寄存器组、单独的程序计数器等,线程的切换只需激活选中的寄存器,从而省略了与存储器数据交换的环节,大大减少了线程切换的开销。硬件多线程有3种实现方式:细粒度多线程、粗粒度多线程和同时多线程(SMT)。

在这里插入图片描述

细粒度多线程

多个线程之间轮流交叉执行指令,多个线程之间的指令是不相关的,可以乱序并行执行。处理器能在每个时钟周期切换线程。

在这里插入图片描述

粗粒度多线程

仅在一个线程出现了较大开销的阻塞时,才切换线程,如Cache缺失。当发生流水线阻塞时,必须清除被阻塞的流水线,新线程的指令开始执行前需要重载流水线,因此,线程切换的开销比细粒度多线程更大。

在这里插入图片描述

同时多线程

同时多线程(SMT)是细粒度多线程和粗粒度多线程两种多线程技术的变体。它在实现指令级并行的同时,实现线程级并行,它在同一个时钟周期中,发射多个不同线程中的多条指令执行。

在这里插入图片描述

Intel处理器中的超线程(Hyper—threading)就是同时多线程SMT,即在一个单处理器或单个核中设置了两套线程状态部件,共享高速缓存和功能部件。

比较:

在这里插入图片描述

附:思维导图

在这里插入图片描述

;