第五章 中央处理器
第一节 CPU的功能和基本结构
「CPU」功能
- CPU(中央处理器)的具体功能
- 指令控制。完成指令操作,程序的顺序控制。
- 操作控制。控制指令的操作信号。
- 时间控制。指令时间控制。
- 数据加工。算术和逻辑运算。
- 中断处理。异常情况特殊请求处理。
- CPU的组成
- 控制器
- 功能:控制指令序列;包括取指令、分析指令和执行指令
- 运算器
- 功能:对数据进行加工
- 控制器
「CPU」基本结构
「CPU」运算器
- 运算器的定义
- 接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理。
- 是计算机对数据进行加工处理的中心
- 运算器的组成
- 算术逻辑单元(ALU)
- 算数逻辑运算
- 暂存寄存器
- 暂存从主存读来的数据,其不能存放在通用寄存器中,会破坏其原有内容
- 暂存寄存器对应用程序员是透明的。
- 累加寄存器(ACC)
- 通用寄存器
- 暂时存放 ALU运算的结果信息
- 加法运算的一个输入端
- 通用寄存器组
- AX、BX、CX、DX、SP 等
- 用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等
- SP是堆栈指针,用于指示栈顶的地址
- 程序状态字寄存器(PSW)
- 保留各种状态信息
- 溢出标志(OF)
- 符号标志(SF)
- 零标志(ZF)
- 进位标志(CF)等
- PSW 中的这些位参与并决定微操作的形成。
- 保留各种状态信息
- 移位器
- 对操作数或运算结果进行移位运算。
- 计数器(CT)
- 控制乘除运算的操作步数。
- 算术逻辑单元(ALU)
「CPU」控制器
- 控制器的定义
- 整个系统的指挥中枢,根据指令控制运算器、存储器和输入/输出设备等协调工作。
- 控制器的基本功能:是执行指令。每条指令的执行是由控制器发出的一组微操作实现的。
- 控制器的类型
- 硬布线控制器
- 微程序控制器
- 控制器的组成
- 程序计数器(PC)
- 指出欲执行指令在主存中的存放地址。
- CPU 根据 PC 的内容去主存中取指令。
- 因程序中指令(通常)是顺序执行的,所以 PC 有自增功能。
- 指令寄存器(IR): 用于保存当前正在执行的那条指令。
- 指令译码器:
- 对操作码字段进行译码。
- 向控制器提供特定的操作信号。
- 存储器地址寄存器(MAR):存放要访问的主存单元的地址。
- 存储器数据寄存器(MDR):存放向主存写入、读出的信息。
- 时序系统:用于产生各种时序信号,由统一时钟(CLOCK)分频得到。
- 微操作信号发生器:根据 IR 的内容(指令)、PSW 的内容(状态信息)、时序信号产生各种控制信号。
- 程序计数器(PC)
- 控制器的两种类型:组合逻辑型、存储逻辑型
- 控制器的工作原理:根据 指令操作码、指令的执行步骤(微命令序列)、条件信号,形成控制信号,各硬件系统在控制信号的控制下协同运行,产生预期的执行结果。
CPU 内部寄存器分为两类
- 用户可见的寄存器:可对这类寄存器编程
- 通用寄存器组
- 程序状态字寄存器
- 用户不可见的寄存器:对用户透明,不可对这类寄存器编程
- 存储器地址寄存器
- 存储器数据寄存器
- 指令寄存器
第二节 指令执行过程
「指令执行」指令周期
- 时钟周期:CPU 操作的最基本单位。
- 指令周期:CPU 从主存中取出并执行一条指令的时间,不同指令的指令周期可能不同。
- 一个完整的指令周期
- 取指周期(FE)
- 间址周期(IND)
- 执行周期(EX)
- 中断周期(INT)
- 数据流:根据指令要求依次访问的数据序列。
TIP
- 每个指令周期内的机器周期数可以不等
- 每个机器周期内的节拍数也可以不等 ![[Pasted image 20240709141828.png]]
不是完整四个周期的指令
- 无条件转移指令 JMP X:执行时不需要访问主存
- 无条件转移指令周期,仅包含
- 取指周期
- 执行周期
- 无条件转移指令周期,仅包含
- 间接寻址指令:为取操作数,需要先访存,取出有效地址,然后访存,取出操作数
- 间接寻址指令周期,包含
- 取指周期
- 间址周期
- 执行周期
- 间接寻址指令周期,包含
CPU访存操作中各指令周期的目的:
- 取指周期为取指令
- 间址周期为取有效地址
- 执行周期为取操作数
- 中断周期为保存程序断点
如何区别不同的工作周期
+ 在 CPU 内设置4个标志触发器 FE、IND、EX 和 INT
+ `1` 状态表示有效
+ 分别由1-FE、1-IND、1-EX 和 1-INT这4个信号控制
「指令周期」取值周期
- 取值周期:根据PC中的内容从主存中取出指令代码并存放在 IR 中。
- 取指周期的数据流:
- PC 存指令的地址,根据此地址从内存取指令,送指令寄存器 IR 中;
- 取指令的同时,PC 加 1。
- 取指周期的数据流向
- PC
MAR 地址总线 主存 - CU(Control Unit) 发出读命令
控制总线 主存 - 主存
数据总线 MDR IR(存放指令) - CU 发出控制信号
PC内容加1
- PC
「指令周期」间址周期
- 间址周期:取操作数有效地址。
- 间址周期的数据流:
- 一次间址,指令中的地址码,送 MAR,送地址总线。
- CU 向存储器发读命令,获取有效地址,存 MDR。
- 间址周期的数据流向
- Ad(IR)(或MDR)
MAR 地址总线 主存 - CU发出读命令
控制总线 主存。 - 主存
数据总线 MDR(存放有效地址)。
- Ad(IR)表示取出 IR 中存放的指令字的地址字段
- Ad(IR)(或MDR)
「指令周期」中断周期
- 中断周期:处理中断请求。
- 中断周期的数据流:
- 假设程序断点存入堆栈中,并用SP指示栈顶地址。
- 进栈操作是先修改栈顶指针,后存入数据。
TIP
- 中断周期的进栈操作:将 SP 减 1
- 和传统意义上的进栈操作相反的原因
- 是计算机的堆栈都是向低地址增加
- 所以进栈操作是减1而不是加1
- 中断周期的数据流向
- CU 控制将 SP 减1,SP
MAR 地址总线 主存。 - CU发出写命令
控制总线 主存。 - PC
MDR 数据总线 主存(程序断点存入主存)。 - CU(中断服务程序的入口地址)
PC。
- CU 控制将 SP 减1,SP
第三节 指令执行方案
「执行方案」单指令周期
- 每条指令都在一个时钟周期内完成,串行执行。
- 时钟周期取决于执行时间最长的指令的执行时间。
「执行方案」多指令周期
- 对不同类型的指令选用不同的执行步骤,串行执行。
- 可选用不同个数的时钟周期来完成不同指令的执行过程,需要几个周期就为其分配几个周期。
「执行方案」流水线方案
- 指令之间并行执行,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
- 每个时钟周期启动一条指令。
流水线方案的目标
- 力争在每个时钟脉冲周期完成一条指令的执行过程(理想情况下)。
第四节 数据通路的功能和基本结构
「数据通路」功能
- 数据通路:
- 数据在功能部件之间传送的路径(流经的部件:ALU、通用寄存器等)。
- 描述 信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器。
- 数据通路的功能
- 实现 CPU 内部的运算器。
- 寄存器及寄存器之间的数据交换。
- 控制部件:根据每条指令功能的不同生成对数据通路的控制信号。
「数据通路」基本结构
- CPU 内部单总线方式
- 所有寄存器的输入端和输出端都连接到一条公共通路上
- 优点:结构比较简单。
- 缺点:数据传输存在较多的冲突现象;一个时钟内只允许传一个数据。
- CPU 内部多总线方式
- 所有寄存器的输入端和输出端都连接到多条公共通路上
- 优点:同时在多个总线上传送不同的数据,提高效率。
- 专用数据通路方式
- 根据 指令执行过程中的数据 和 地址的流动方向 安排连接线路
- 优点:避免使用共享的总线,性能较高
- 缺点:硬件量大。
「数据通路」CPU 内部总线
TIP
- 内部总线:指同一部件(如CPU 内部连接各寄存器及运算部件之间的总线)
- 系统总线:指同一台计算机系统的各部件(如CPU、内存和各类 I/O 接口间互相连接的总线)
寄存器之间的数据传送
- 通过 CPU 内部总线完成
- 在图5.7中,某寄存器 AX 的输出和输入分别由AXout 和AXin 控制。
- 现以 PC 寄存器为例,把 PC 内容送至 MAR
- 实现传送操作的流程及控制信号为
- (PC)
MAR PCout 和 MARin 有效,PC 内容 MAR
- (PC)
- 实现传送操作的流程及控制信号为
主存与CPU之间的数据传送
- 借助 CPU 内部总线完成
- CPU 从主存读取指令 表明数据在数据通路中的传送过程
- (PC)
MAR PCout 和MARin 有效,现行指令地址—MAR - 1
R CU发读命令 - MEM (MAR)
MDR MDRin 有效 - (MDR)
IR MDRout 和 IRin 有效,现行指令 IR
- (PC)
「数据通路」执行算数或逻辑运算
- 由于 ALU 是没有内部存储功能的组合电路
- 执行加法运算,相加的两个数必须在 ALU 的两个输入端同时有效。
- 图5.7中的暂存器 Y 即用于该目的。
算术运算步骤
先将一个操作数经 CPU 内部总线送入暂存器 Y 保存
Y 的内容在 ALU 的左输入端始终有效
再将另一个操作数经总线直接送到ALU 的右输入端
这样两个操作数都送入了 ALU
运算结果暂存在暂存器 Z 中
(MDR)
MAR MDRout 和 MARin 有效,操作数有效地址 MAR 1
R CU发读命令 MEM
(MAR) MDR 操作数从存储器 MDR (MDR)
Y MDRout 和 Yin 有效,操作数 Y (ACC) + (Y)
Z ACCout和ALUin有效,CU向ALU发加命令,结果 Z (Z)
ACC Zout 和 ACCin 有效,结果 ACC :::
第五节 控制器的功能和工作原理
「控制器」结构
- 运算器部件:通过数据总线与内存储器、输入设备和输出设备传送数据
- 输入设备和输出设备:通过接口电路与总线相连接。
- 内存储器、输入设备和输出设备
- 从地址总线接收地址信息
- 从控制总线得到控制信号
- 通过数据总线与其他部件传送数据
- 控制器部件
- 从数据总线接收指令信息
- 从运算器部件接收指令转移地址
- 送出指令地址到地址总线
- 还要向系统中的部件提供它们运行所需要的控制信号
计算机硬件系统和控制器部件的组成
「控制器」主要功能
- 取指令,指位置:从主存中取出一条指令,并指出下一条指令在主存中的位置。
- 做译码,做测试:对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作。
- 指挥控制数据流:指挥并控制 CPU、主存、输入和输出设备之间的数据流动方向。
「控制器」分类
- 控制器可分为(根据控制器产生微操作控制信号的方式的不同) +
硬布线、微程序控制器的异同点
- 相同:两类控制器中的 PC 和 IR 相同
- 不同
- 确定和表示指令执行步骤的办法不同
- 给出控制各部件运行所需要的控制信号的方案是不同的
「控制器」硬布线控制器
- 又称 组合逻辑控制器:因 由复杂的组合逻辑门电路和一些触发器构成
- 硬布线控制器基本原理:根据 指令的要求、当前的时序、外部和内部的状态 按时间的顺序发送一系列微操作控制信号
硬布线控制单元图
- 指令的操作码:决定控制单元发出不同操作命令(控制信号)的关键。
- 简化控制单元(CU - Control Unit)的逻辑:将指令的 操作码译码、节拍发生器 从 CU 分离出来。
- CU 的输入
- 指令信息(经指令译码器译码产生的)
- 机器周期信号和节拍信号(时序系统产生的)
- 标志(来自执行单元的反馈信息)
- CU 的输出:到 CPU 内部或外部控制总线上。
TIP
- 控制单元还接收来自系统总线(控制总线) 的控制信号,如
- 中断请求
- DMA 请求
「控制器」硬布线控制器的时序系统及微操作
- 时钟周期与节拍:时钟信号控制节拍发生器,产生节拍。
- 每个节拍的宽度:正好对应一个时钟周期。
- 每个节拍内:机器可完成一个或几个需同时执行的操作。
- 机器周期:所有指令执行过程中的一个基准时间。
- 存取周期作为机器周期
- 原因:访问一次存储器的时间是固定的。
- 存取周期:内存中读取一个指令字的最短时间。
- 取指周期作为机器周期
- 在存储字长等于指令字长的前提下
(时钟信号来控制)
- 存取周期作为机器周期
- 指令周期:看指令执行过程那一节中的指令周期。
- 微操作命令分析
- 控制单元CU具有发出各种操作命令(控制信号)序列的功能。
- 命令与指令有关,按次序发出,才能使机器有序地工作。
「控制器」各个子周期的微操作命令
- 取指周期的微操作命令
- 间址周期的微操作命令
- 执行周期的微操作命令
「控制器」CPU 的控制方式
- 控制单元控制一条指令执行的过程
- 实质上是依次执行一个确定的微操作序列的过程。
- 由于不同指令所对应的微操作数及复杂程度不同,因此每条指令和每个微操作所需的执行时间也不同。
- 同步控制方式
- 控制信号来自统一的时钟信号;以最耗时的微操作作为标准;采取统一有相同时间间隔、相同数目的节拍作为机器周期来运行不同的指令。
- 优点:控制电路简单。
- 缺点:运行速度慢。
- 异步控制方式
- 不存在基准时标信号,各部件按自身固有的速度工作,通过应答方式进行联络。
- 优点:运行速度快。
- 缺点:控制电路比较复杂。
- 联合控制方式
- 介于同步、异步之间的一种折中,对各种不同的指令的微操作实行
- 大部分采用同步控制
- 小部分采用异步控制
- 介于同步、异步之间的一种折中,对各种不同的指令的微操作实行
第六节 微程序控制器
「微程序控制器」基本概念
- 微程序控制:
- 微程序存控制存储器,用寻址用户程序机器指令的办法来寻址每个微程序中的微指令。
微操作与微命令
- 机器指令: 一条机器指令可以分解成一个微操作序列。
- 微操作:是计算机中最基本的、不可再分解的操作。
- 微命令
- 是控制部件向执行部件发出的各种控制命令。
- 构成控制序列的最小单位。
- 有相容性和互斥性之分,相容和互斥都是相对的。
- 一个微命令可以和一些微命令相容和另一些微命令互斥。
- 相容性微命令:可以同时产生、共同完成某一些微操作的微命令
- 互斥性微命令:机器中不允许同时出现的微命令。
TIP
微命令和微操作是一一对应的。
- 微命令是微操作的控制信号
- 微操作是微命令的执行过程
在组合逻辑控制器中也存在微命令与微操作这两个概念
它们并非只是微程序控制器的专有概念
微指令与微周期
- 微地址:存放微指令的控制存储器的单元地址。
- 微指令:若干微命令的集合。
- 操作控制字段(微操作码字段):用于产生某一步操作所需的各种操作控制信号。
- 顺序控制字段(微地址码字段):用于控制产生下一条要执行的微指令地址。
- 微周期:是指执行一条微指令所需的时间,通常为一个时钟周期。
主存储器与控制存储器
- 主存储器:用于存放程序和数据,在 CPU 外部,用 RAM 实现。
- 控制存储器(CM):用于存放微程序,在 CPU 内部,用 ROM 实现。
程序与微程序
- 程序:指令的有序集合,用于完成特定的功能
- 微程序:微指令的有序集合,一条指令的功能由一段微程序来实现。
微程序和程序是两个不同的概念。
- 微程序
- 微指令组成的,描述机器指令
- 机器指令的实时解释器
- 计算机设计者事先编制好并存放在控制存储器中的
- 一般不提供给用户,对程序员透明
- 程序
- 由机器指令组成
- 软件设计人员事先编制好并存放在主存或辅存中的
区分寄存器
- 地址寄存器(MAR):用于存放主存的读/写地址。
- 微地址寄存器(CMAR):用于存放控制存储器的读/写微指令的地址。
- 指令寄存器(IR):用于存放从主存中读出的指令。
- 微指令寄存器(CMDR或μIR):用于存放从控制存储器中读出的微指令。
微程序控制器的组成
- 控制存储器
- 微程序控制器的核心部件
- 用于存放各指令对应的微程序
- 只读存储器 ROM 构成
- 微指令寄存器
- 用于存放从 CM 中取出的微指令
- 位数同微指令字长相等。
微程序控制器的工作过程
- 计算机执行机器指令的过程
- 执行取微指令
- 自动将取指微程序的入口地址送CMAR
- CM 中读出相应的微指令送CMDR
- 取指微程序的入口地址一般为 CM 的 0 号单元
- 当取指微程序执行完后
- 主存中取出的机器指令就已存入指令寄存器中。
- 由机器指令的操作码字段通过微地址形成部件
- 产生该机器指令所对应的微程序的入口地址,送 CMAR。
- CM 中取出微指令并执行。
- 执行完一个微程序后,回到取指微程序的入口地址
- 回到第 1 步重复执行
- 执行取微指令
微程序和机器指令
一条机器指令对应一个微程序
取值周期微程序
- 将取指令操作的微命令统一编成一个微程序
- 因为任何机器指令的取指令操作都是相同的
- 微程序只负责将指令从主存单元中取出并送至指令寄存器
- 将取指令操作的微命令统一编成一个微程序
间址周期的微程序
中断周期的微程序
控制存储器中的微程序个数
- 机器指令数 + 公共的微程序数(取指、间址和中断周期等)
微指令的编码方式
直接编码方式(直接控制方式)
直接编码法无须进行译码
微指令的微命令字段中每位都代表一个微命令。
设计微指令时,选用或不选用某个微命令,只要将表示该微命令的对应位设置成1或0即可。
每个微命令对应并控制数据通路中的一个微操作。
优点
- 简单、直观
- 执行速度快
- 操作并行性好
缺点
- 微指令字长过长
- n 个微命令就要求微指令的操作字段有 n 位
- 造成控制存储器容量极大
- 微指令字长过长
字段直接编码方式
将微指令的微命令字段分成若干小字段
- 把互斥性微命令组合在同一字段中
- 把相容性微命令组合在不同字段中
- 每个字段独立编码
- 每种编码代表一个微命令
- 各字段编码含义单独定义,与其他字段无关
优点
- 可以缩短微指令字长
缺点
- 比直接编码方式慢
- 因为要通过译码电路后再发出微命令
- 比直接编码方式慢
微命令字段分段的原则:
- 互斥性微命令分在同一段内
- 相容性微命令分在不同段内
- 每个小段中包含的信息位不能太多
- 否则将增加译码线路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。
- 当某字段的长度为3位时,最多只能表示7个互斥的微命令
- 通常用000表示不操作。
- 当某字段的长度为3位时,最多只能表示7个互斥的微命令
字段间接编码方式(隐式编码)
- 一个字段的某些微命令需由另一个字段中的某些微命令来解释
- 优点
- 可进一步缩短微指令字长
- 缺点
- 因削弱了微指令的并行控制能力
- 所以作为字段直接编码方式的一种辅助手段
- 因削弱了微指令的并行控制能力
微指令的地址形成方式
- 后继微地址的形成主要有以下两大基本类型:
- 直接由微指令的下地址字段指出(断定方式)
- 微指令格式中设置一个下地址字段
- 由微指令的下地址字段直接指出后继微指令的地址
- 根据机器指令的操作码形成
- 机器指令取至指令寄存器后
- 微指令的地址由操作码经微地址形成部件形成
- 机器指令取至指令寄存器后
- 直接由微指令的下地址字段指出(断定方式)
- 微指令序列地址的形成方式还有以下几种:
- 增量计数器法
- 即(CMAR)+1
CMAR - 适用于后继微指令的地址连续的情况
- 即(CMAR)+1
- 根据各种标志决定微指令分支转移的地址
- 通过测试网络形成
- 由硬件直接产生微程序入口地址
- 增量计数器法
- 电源加电后,第一条微指令的地址可由专门的硬件电路产生
- 也可由外部直接向 CMAR 输入微指令的地址
- 这个地址即为取指周期微程序的入口地址
微指令的格式
- 与微指令的编码方式有关
水平型微指令
- 水平型微指令的基本指令格式
- 从编码方式看
- 直接编码
- 字段直接编码
- 字段间接编码
- 混合编码
- 从编码方式看
- 如图5.14,指令字中的一位对应一个控制信号
- 有输出时为 1
- 否则为 0
- 一条水平型微指令定义并执行几种并行的基本操作。
垂直型微指令
- 垂直型微指令的特点
- 采用类似机器指令操作码的方式,在微指令中设置微操作码字段
- 采用微操作码编译法,由微操作码规定微指令的功能
- 其基本的指令格式如图 5.15所示。
- 一条垂直型微指令只能定义并执行一种基本操作。
混合型微指令
- 在垂直型的基础上增加一些不太复杂的并行操作。
- 微指令较短,仍便于编写
- 微程序也不长,执行速度加快
水平型微指令和垂直型微指令的比较
水平型微指令 | 垂直型微指令 | |
---|---|---|
并行操作能力 | 强 | 差 |
指令执行时间 | 短 | 长 |
微指令字 | 较长 | 短 |
微程序 | 短 | 较长 |
掌握难度 | 用户难以掌握 | 与指令比较相似,相对容易掌握 |
微程序控制单元的设计步骤
动态微程序设计和毫微程序设计
硬布线控制器的特点
- 优点
- 速度快
- 因为控制器的速度取决于电路延迟
- 速度快
- 缺点
- 一旦设计完成,就不可能通过其他额外修改添加新功能
- 因为将控制部件视为专门产生固定时序控制信号的逻辑电路,
- 所以把用最少元件和取得最高速度作为设计目标
- 一旦设计完成,就不可能通过其他额外修改添加新功能
微程序控制器的特点
- 优点
- 是同组合逻辑控制器相比
- 微程序控制器具有规整性、灵活性、可维护性等一系列优点
- 是同组合逻辑控制器相比
- 缺点
- 由于微程序控制器采用了存储程序原理
- 所以每条指令都要从控制存储器中取一次,影响速度。
- 由于微程序控制器采用了存储程序原理
微程序控制器与硬布线控制器的对比
异常和中断机制
异常和中断的基本概念
- 异常(内中断)
- 由 CPU 内部产生的意外事件
- 异常是
- CPU 执行一条指令时
- 由 CPU 在其内部检测到的
- 与正在执行的指令相关的
- 同步事件
- 中断(外中断)
- 由来自 CPU外部的设备向 CPU 发出的中断请求
- 用于信息的输入和输出
- 中断是
- 一种典型的由外部设备触发的、
- 与当前正在执行的指令无关的
- 异步事件。
异常和中断处理过程
当 CPU 在执行用户程序的第
i
条指令时- 检测到一个异常事件
- 或发现一个中断请求信号
- CPU 打断当前用户程序
- 转到相应的异常或中断处理程序去执行。
若异常或中断处理程序能够解决相应的问题
- 在异常或中断处理程序的最后
- CPU通过执行异常或中断返回指令
- 回到被打断的用户程序的第
i
条指令或第i+1
条指令继续执行
- 在异常或中断处理程序的最后
若异常或中断处理程序发现是不可恢复的致命错误
- 则终止用户程序。
通常情况下,对异常和中断的具体处理过程由操作系统(和驱动程序) 完成
异常和中断的处理过程基本是相同的
这也是有些教材将两者统称为中断的原因。
异常和中断的分类
异常的分类
异常是由 CPU 内部产生的意外事件,分为
- 硬故障中断
- 由硬连线出现异常引起的
- 如存储器校验错、总线错误等。
- 程序性异常(软件中断)
- 指在CPU 内部因执行指令而引起的异常事件。
- 如整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。
- 硬故障中断
故障
- 指在引起故障的指令启动后、执行结束前被检测到的异常事件。
- 指令译码时,出现“非法操作码”
- 取数据时,发生“缺段”或“缺页”
- 执行整数除法指令时,发现“除数为0”等
- 对于“缺段”,“缺页”等异常事件
- 经处理后,将所需的段或页面从磁盘调入主存
- 回到发生故障的指令继续执行
- 断点为当前发生故障的指令
- 对于“非法操作码”,“除数为0” 等
- 因为无法通过异常处理程序恢复故障
- 因此不能回到原断点执行
- 必须终止进程的执行
- 因为无法通过异常处理程序恢复故障
- 指在引起故障的指令启动后、执行结束前被检测到的异常事件。
自陷(陷阱或陷入)
- 是预先安排的一种“异常”事件,就像预先设定的“陷阱”一样。
- 通常的做法是:
- 事先在程序中
- 用一条特殊指令
- 或通过某种方式
- 设定特殊控制标志来人为设置一个“陷阱”
- 当执行到被设置了“陷阱”的指令时
- CPU 在执行完自陷指令后
- 自动根据不同“陷阱”类型进行相应的处理
- 然后返回到自陷指令的下一条指令执行。
- 事先在程序中
- 注意
- 当自陷指令是转移指令时,
- 并不是返回到下一条指令执行,
- 而是返回到转移目标指令执行。
- 当自陷指令是转移指令时,
- 在x86机器中,用于程序调试
- 断点设置
- 单步跟踪
- 功能是通过陷阱机制实现的。
- 系统调用指令、条件自陷指令(如MIPS 中的 teq、tegi、te、mei 等)等
- 都属于陷阱指令,执行到这些指令时
- 无条件或有条件地自动调出操作系统内核程序进行执行
- 都属于陷阱指令,执行到这些指令时
- 程序性异常(软件中断)
- 故障异常
- 自陷异常
终止
- 在执行指令的过程中发生了使计算机无法继续执行的硬件故障
- 如控制器出错、存储器校验错等
- 那么程序将无法继续执行,只能终止,调出中断服务程序来重启系统。
- 这种异常与故障和自陷不同,不是由特定指令产生的,而是随机发生的。
- 硬件中断
- 终止异常
- 外中断
- 在执行指令的过程中发生了使计算机无法继续执行的硬件故障
中断的分类
- 指来自 CPU 外部、与 CPU 执行指令无关的事件引起的中断
- 包括 I/O 设备发出的 I/O 中断(如键盘输入、打印机缺纸等)
- 发生某种特殊事件(如用户按 Esc键、定时器计数时间到)等。
- 外部 I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求
- CPU 每执行完一条指令就检查中断请求信号线
- 如果检测到中断请求,则进入中断响应周期。
可屏蔽中断
- 指通过可屏蔽中断请求线 INTR 向 CPU 发出的中断请求。
- CPU 可以通过在中断控制器中
- 设置相应的屏蔽字来屏蔽它或不屏蔽它
- 被屏蔽的中断请求将不被送到CPU
不可屏蔽中断
- 指通过不可屏蔽中断请求线 NMI 向CPU 发出的中断请求
- 通常是非常紧急的硬件故障,如电源掉电等。
- 这类中断请求信号不可被屏蔽,以让 CPU 快速处理这类紧急事件。
中断和异常的不同点
- 中断和异常的产生
- 异常事件(“缺页”或“溢出”等)是由特定指令在执行过程中产生的
- 中断不和任何指令相关联,也不阻止任何指令的完成。
- 中断和异常的检测
- 异常的检测,由 CPU 自身完成,不必通过外部的某个信号通知 CPU。
- 中断的检测,CPU 必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。
异常和中断的响应过程
- CPU 执行指令时,如果发生了异常或中断请求,必须进行相应的处理。
- 异常和中断的响应
- 从 CPU 检测到异常或中断事件,到调出相应的处理程序的整个过程
- CPU 对异常和中断响应的过程可分为:
- 关中断
- 保存断点
- 程序状态
- 识别异常
- 中断并转到相应的处理程序
- (1)关中断
- 原因
- 在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断。
- 步骤
- 通常通过设置“中断允许”(IF)触发器来实现
- 若 IF 置为1,则为开中断,表示允许响应中断;
- 若 IF 置为0,则表示关中断,表示不允许响应中断。
- 原因
- (2)保存断点和程序状态
- 原因
- 为了能在异常和中断处理后正确返回到被中断的程序继续执行
- 步骤
- 必须将程序的断点(返回地址)送到栈或特定寄存器中。
- 通常保存在栈中,这是为了支持异常或中断的嵌套。
- 被中断时的程序状态字寄存器 PSWR 的内容也需要保存在栈或特定寄存器中
- 因为 异常和中断处理后可能还要回到被中断的程序继续执行,
- 在异常和中断返回时恢复到 PSWR 中。
- 原因
- (3)识别异常和中断并转到相应的处理程序
- 异常和中断源存在的识别方式
- 软件识别
- 硬件识别
- 异常和中断源使用的识别方式
- 异常大多采用软件识别方式
- 中断可以采用软件识别方式或硬件识别方式
- 软件识别方式
- CPU 设置一个异常状态寄存器,用于记录异常原因。
- 操作系统使用一个统一的异常或中断查询程序
- 按优先级顺序查询异常状态寄存器,以检测异常和中断类型
- 先查询到的先被处理
- 然后转到内核中相应的处理程序。
- 硬件识别方式(向量中断)
- 异常或中断处理程序的首地址称为中断向量
- 所有中断向量都存放在中断向量表中。
- 每个异常或中断都被指定一个中断类型号
- 在中断向量表中,类型号和中断向量一一对应
- 因而可以根据类型号快速找到对应的处理程序。
- 异常或中断处理程序的首地址称为中断向量
- 响应过程描述
- 整个响应过程不可被打断
- 中断响应过程结束后
- CPU 就从 PC 中取出中断服务程序的第一条指令开始执行
- 直至中断返回
- 这部分任务是由 CPU 通过执行中断服务程序完成的
- 整个中断处理过程是由软/硬件协同实现的。
- 整个响应过程不可被打断
- 异常和中断源存在的识别方式
指令流水线
指令流水线的基本概念
- 提高处理机的并行性
- 时间上的并行技术(流水线技术)
- 任务分解为不同的子阶段
- 子阶段在不同的功能部件上并行执行
- 同一时刻能够同时执行多个任务
- 空间上的并行技术(超标量处理机)
- 在一个处理机内
- 设置多个执行相同任务的功能部件
- 并让这些功能部件并行工作
- 在一个处理机内
- 时间上的并行技术(流水线技术)
指令流水的定义
一条指令的执行过程分解为若干子阶段,子阶段由相应的功能部件完成。
如果将各子阶段视为相应的流水段,就构成了一条指令流水线。
假设一条指令的执行过程分为如下5个阶段(也称功能段或流水段)
取指 (IF)
- 从指令存储器或 Cache 中取指令。
译码/读寄存器(ID)
- 操作控制器对指令进行译码,同时从寄存器堆中取操作数。
执行/计算地址(EX)
- 执行运算操作或计算地址。
访存(MEM)
- 对存储器进行读写操作。
写回(WB)
- 将指令执行结果写回寄存器堆。
如图5.16所示
- 把 k+1 条指令的取指阶段提前到第 k 条指令的译码阶段
- 从而将第 k+1 条指令的译码阶段与第 k 条指令的执行阶段同时进行
- 理想情况下
- 每个时钟周期都有一条指令进入流水线
- 每个时钟周期都有一条指令完成
- 每条指令的时钟周期数(即 CPI)都为1
流水线设计的原则
- 指令流水段个数以最复杂指令所用的功能段个数为准
- 流水段的长度以最复杂的操作所花的时间为准
- 流水线方式并不能缩短单条指令的执行时间
- 但对于整个程序来说,执行效率得到了大幅增高。
- 流水线指令集特征
- 指令长度应尽量一致
- 有利于简化取指令和指令译码操作。
- 否则
- 取指令所花时间长短不一
- 使取指部件极其复杂
- 且也不利于指令译码
- 指令格式应尽量规整
- 尽量保证源寄存器的位置相同
- 有利于在指令未知时就可取寄存器操作数
- 否则须译码后才能确定指令中各寄存器编号的位置。
- 采用 Load/Store 指令
- 其他指令都不能访问存储器
- 这样可把 Load/Store 指令的
- 地址计算
- 运算指令
- 的执行步骤 规整在同一个周期中
- 有利于减少操作步骤
- 数据和指令在存储器中对齐存放
- 有利于减少访存次数
- 使所需数据在一个流水段内就能从存储器中得到
- 指令长度应尽量一致
流水线的表示方法
- 在时空图中,横坐标表示时间,它被分割成长度相等的时间段T
- 纵坐标为空间,表示当前指令所处的功能部件。
- 在图5.17中,第一条指令 I 在时刻 0 进入流水线,在时刻 5T 流出流水线。
- 第二条指令
在时刻 T 进入流水线,在时刻 6T 流出流水线。 - 以此类推,每隔一个时间 T 就有一条指令进入流水线,从时刻 5T 开始每隔一个时间 T 就有一条指令流出流水线。
- 从图中可看出,在时刻 10T 时,流水线上便有6条指令流出。
- 若采用串行方式执行,在时刻 10T 时,只能执行 2 条指令,可见使用流水线方式成倍地提高了计算机的速度。
- 只有大量连续任务不断输入流水线,才能充分发挥流水线的性能,而指令的执行正好是连续不断的,非常适合采用流水线技术。
- 部件级流水线
- 如浮点运算流水线
- 仅适合于提升浮点运算密集型应用的性能
- 对于单个运算是无法提升性能的。
- 如浮点运算流水线
流水线的基本实现
- 在单周期实现中,
- 这5个功能段是串连在一起的,如图5.18所示。
- 将程序计数器(PC)的值送入 I 段取指令,然后依次进入 TD、EX、MEM、WB段。
- 虽然不是所有指令都必须经历完整的5个阶段,但只能以执行速度最慢的指令作为设计其时钟周期的依据
- 单周期 CPU 的时钟频率取决于数据通路中的关键路径(最长路径),因此单周期 CPU 指令执行效率不佳。
流水线的数据通路
- 一个5段流水线数据通路如图5.19所示。
- IF 段
- 包括程序计数器(PC)、指令存储器、下条指令地址的计算逻辑
- ID 段
- 包括操作控制器、取操作数逻辑、立即数符号扩展模块
- EX 段
- 主要包括算术逻辑单元(ALU)、分支地址计算模块
- MEM 段
- 主要包括数据存储器读写模块
- WB 段
- 主要包括寄存器写入控制模块。
- 每个流水段后面都需要增加一个流水寄存器
- 用于锁存本段处理完成的数据和控制信号
- 保证本段的执行结果能在下个时钟周期给下一流水段使用
- 图中增加了4个流水寄存器,并根据其所连接的功能段来命名。
- 寄存器和数据存储器
- 均采用统一时钟 CLK 进行同步
- 每来一个时钟,就会有一条新的指令进入流水线 IF 段
- 同时流水寄存器会锁存前段加工处理完成的数据和控制信号,为下一段的功能部件提供数据输入。
- IF 段
- 不同流水寄存器锁存的数据不相同,如图5.19 中的实线表示。
- IF/ID 流水寄存器
- 需要锁存 从指令存储器取出的
- 指令字
- PC+4的值
- 需要锁存 从指令存储器取出的
- ID/EX 流水寄存器
- 需要锁存 从寄存器堆中取出的
- 两个操作数 RS 和 RT(指令中两个操作数字段对应的寄存器值)
- 写寄存器编号 WriteReg#
- 立即数符号扩展的值
- PC+4等后段可能用到的操作数
- 需要锁存 从寄存器堆中取出的
- EX/MEM 流水寄存器
- 需要锁存
- ALU运算结果
- 数据存储器待写入数据 WriteData
- 写寄存器编号 WriteReg#
- 等数据
- 需要锁存
- MEM/WB 流水寄存器
- 需要锁存
- ALU 运算结果
- 数据存储器读出数据
- 写寄存器编号 WriteReg#
- 等数据
- 需要锁存
流水线的控制信号
- 上节描述了数据通过流水寄存器进行传递的情况。
- 但是在某一时刻,每个流水段执行不同指令的某个阶段
- 每个流水段还需要正在执行指令的对应功能段的控制信号。
- 图5.19中的控制信号(虚线表示)如表5.3所示。
- 控制信号的来源并不一致
- IF 段的分支转跳信号 BranchTaken 来源于 EX 段
- ID 段的 RegWrite 信号来源于 WB 段
- 其他控制信号通过控制器产生
- 由 ID 段负责译码生成控制信号
- 并分别在随后的各个时钟周期内使用
- 控制器的输入主要是 IF/ID 流水寄存器锁存的指令字中的OP 字段
- 输出为7个控制信号,
- 其中 RegDst 信号在 ID 段使用
- 其他6个后段使用的控制信号输出到 ID/EX 流水寄存器中并依次向后传递,以供后续各流水段使用。
- RegWrite 信号必须传递至WB 段后才能反馈到 ID 段的寄存器堆的写入控制段 WE
- 条件分支译码信号 Branch 也需要传递到EX段,与ALU 运算的标志 equal 信号进行逻辑与操作后,反馈到 IF 段控制多路选择器进行分支处理。
- 综上所述,每个流水寄存器中保存的信息包括
- 后面流水段需要用到的所有数据信息
- 包括PC+4、指令、立即数、目的寄存器、ALU运算结果、标志信息等
- 它们是前面阶段在数据通路中执行的结果
- 前面传递过来的后面各流水段要用到的所有控制信号
- 后面流水段需要用到的所有数据信息
流水线的执行过程
- 由于流水线的特殊结构
- 所有指令都需要完整经过流水线的各功能段
- 单条指令的执行时间还是5个功能段时间延迟的总和。
- 下面简单描述图5.19中各流水段的执行过程。
- 取指(IF)
- 将PC值作为地址从指令寄存器中取出第一条指令字
- 并计算PC+4,送入 PC 输入端
- 以便在下一个时钟周期取下条指令,这些功能由取指部件完成。
- 取出的指令字通过 RD 输出端送入 IF/ID 流水寄存器
- PC+4 也要送 IF/ID 流水寄存器
- 以备后续可能使用(如相对转移指令)。
- 只要是后续功能段有可能要用到的数据和控制信号,都要向后传递。
- 时钟到来时将更新后的PC 值和指令字锁存到IF/ID 流水寄存器中
- 本条指令
进入ID段,下段取出下条指令 。
- 译码/读寄存器(ID)
- 由控制器根据 IF/ID 流水寄存器中的指令字生成后续各段需要的控制信号。
- 对于 lw 访存指令, 根据指令字中的 rs、rt 取出寄存器堆中的值 RS 和 RT
- 符号扩展单元会将指令字中的16位立即数符号扩展为32位
- 多路选择器根据指令字生成指令可能的写寄存器编号 WriteReg#。
- 时钟到来时,这些数据和控制信号,连同顺序指令地址PC+4,都会锁存到 ID/EX 流水寄存器中
- 指令
进入 EX 段,同时下条指令 进入 ID 段,下下条指令 进入 IF 段。
- 执行/计算地址(EX)
- EX 段功能由具体指令确定,不同指令经 ID 段译码后得到不同的控制信号。
- 对于 lw 访存指令
- EX 主要用来计算访存地址
- 将 ID/EX 流水寄存器中的 RS 值与符号扩展后的立即数相加得到的访存地址
- 送入EX/MEM 流水寄存器。
- EX 段可能还要计算分支地址,生成分支转跳信号Branch Taken。
- RT 的值可能会在 MEM 段作为写入数据使用,
- 所以 RT 会作为写入数据 WriteData
- 送入 EX/MEM 流水寄存器
- ID/EX 流水寄存器中的写寄存器编号 WriteReg# 也将直接传送给EX/MEM 流水寄存器。
- 时钟到来后,这些数据和后段需要的控制信号都会锁存到 EX/MEM 流水寄存器中
- 指令
,进入 MEM段,后续指令 、 、 分别进入 EX、ID、IF段。
- 访存(MEM)
- MEM 段的功能也由具体指令确定。
- 对于 lw 指令,主要是根据 EX/MEM 流水寄存器中锁存的访存地址,写入数据和内存读写控制信号 MemWrite 对存储器进行读或写操作。
- EX/MEM 流水寄存器中的
- 访存地址
- WriteReg#
- 数据存储器读出的数据
- 都会送入 MEM/WB 流水寄存器,以备后续可能使用。
- 时钟到来后,这些数据和后段需要的控制信号
- 都会锁存到 MEM/WB 流水寄存器中
- 指令
进入WB 段,后续指令 、 、 、 分别进入MEM、EX、ID、IF段。
流水线的冒险与处理
- 流水线冒险
- 指令流水线中遇到一些情况
- 使得流水线无法正确执行后续指令
- 而引起流水线阻塞或停顿
- 导致冒险的原因
- 结构冒险(资源冲突)
- 数据冒险(数据冲突)
- 控制冒险(控制冲突)
结构冒险(资源冲突)
- 由于多条指令在同一时刻争用同一资源而形成的冲突
- 即由硬件资源竞争造成的冲突
- 两种解决办法:
- 前一指令访存时
- 使后一条相关指令(以及其后续指令)暂停一个时钟周期。
- 单独设置数据存储器和指令存储器
- 使取数和取指令操作各自在不同的存储器中进行。
- 前一指令访存时
- Cache 机制避免资源冲突(现代计算机)
- L1 Cache 通常采用数据 Cache 和指令 Cache 分离的方式
- 因而也就避免了资源冲突的发生
- 两种解决办法:
数据冒险(数据冲突)
- 在一个程序中,下一条指令会用到当前指令计算出的结果,此时这两条指令发生数据冲突。
- 当多条指令重叠处理时就会发生冲突
- 数据冒险可分为三类(结合综合题3理解):
- 1)写后读(Read After Write,RAW)相关
- 表示当前指令将数据写入寄存器后
- 下一条指令才能从该寄存器读取数据
- 否则,先读后写,读到的就是错误(旧)数据。
- 表示当前指令将数据写入寄存器后
- 2)读后写(Write After Read,WAR)相关
- 表示当前指令读出数据后
- 下一条指令才能写该寄存器
- 否则,先写后读,读到的就是错误(新)数据。
- 表示当前指令读出数据后
- 3)写后写(Write After Write,WAW)相关
- 表示当前指令写入寄存器后
- 下一条指令才能写该寄存器
- 否则,下一条指令在当前指令之前写,将使寄存器的值不是最新值。
- 表示当前指令写入寄存器后
- 1)写后读(Read After Write,RAW)相关
- 解决的办法
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期
- 直到数据相关问题消失后再继续执行
- 可分为
- 硬件阻塞(stall)
- 软件插入“NOP”指令
- 两种方法。
- 设置相关专用通路(数据旁路技术)
- 即不等前一条指令把计算结果写回寄存器组
- 下一条指令也不再读寄存器组
- 而直接把前一条指令的 ALU 的计算结果作为自己的输入数据开始计算过程
- 使本来需要暂停的操作变得可以继续执行
- 编译器对数据相关的指令编译优化
- 调整指令顺序来解决数据相关
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期
控制冒险
- 控制冒险的产生
- 指令通常是顺序执行的,但是在遇到改变指令执行顺序的情况
- 例如执行转移、调用或返回等指令时,
- 会改变PC值,会造成断流,从而引起控制冒险。
- 指令通常是顺序执行的,但是在遇到改变指令执行顺序的情况
- 解决的办法
- 对转移指令进行分支预测,尽早生成转移目标地址
- 分支预测分为
- 静态(简单)预测
- 总是预测条件不满足
- 即继续执行分支指令的后续指令。
- 动态预测
- 根据程序执行的历史情况,进行动态预测调整
- 有较高的预测准确率
- 静态(简单)预测
- 分支预测分为
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
- 对转移指令进行分支预测,尽早生成转移目标地址
- 注意
- Cache 缺失的处理过程
- 也会引起流水线阻塞
- 在不过多增加硬件成本的情况下
- 如何尽可能地提高指令流水线的运行效率
- 是选用指令流水线技术必须解决的关键问题
- Cache 缺失的处理过程
流水线的性能指标
流水线的吞吐率
流水线的吞吐率
- 指在单位时间内流水线
- 所完成的任务数量
- 或输出结果的数量
- 指在单位时间内流水线
流水线吞吐率(TP)的基本公式
n是任务数
是处理完n个任务所用的总时间 设
k
为流水段的段数,为时钟周期 在输入流水线中的任务连续的理想情况下,
- 一条
k
段流水线能在k+n-1
个时钟周期内完成n
个任务。
- 一条
得出流水线的吞吐率为
- 连续输入的任务数
时,得最大吞吐率为
流水线的加速比
- 完成同样一批任务,不使用流水线与使用流水线所用的时间之比。
- 流水线加速比(S)的基本公式为
表示不使用流水线的总时间 表示使用流水线的总时间 一条 k 段流水线完成 n 个任务所需的时间为
。 顺序执行 n 个任务时,所需的总时间为
将
和 值代入上式,得出流水线的加速比为
- 连续输入的任务数
时,得最大加速比为
高级流水线技术
- 有两种增加指令级并行的策略
- 多发射技术(超标量流水线技术)
- 采用多个内部功能部件
- 使流水线功能段能同时处理多条指令
- 处理机一次可以发射多条指令进入流水线执行
- 采用多个内部功能部件
- 超流水线技术
- 增加流水线级数
- 使更多的指令同时在流水线中重叠执行
- 增加流水线级数
- 多发射技术(超标量流水线技术)
超标量流水线技术
- 超标量流水线技术(动态多发射技术)
- 每个时钟周期内可并发多条独立指令
- 以并行操作方式将两条或多条指令编译并执行
- 为此需配置多个功能部件,如图5.20所示。
- 简单的超标量 CPU 中
- 指令是按顺序发射执行的。
- 乱序执行
- 为了更好地提高并行性能
- 多数超标量CPU 都结合动态流水线调度技术
- 通过动态分支预测等手段
- 指令不按顺序执行
- 每个时钟周期内可并发多条独立指令
超长指令字技术
- 超长指令字技术(静态多发射技术)
- 由编译程序挖掘出指令间潜在的并行性
- 将多条能并行操作的指令组合成
- 一条具有多个操作码字段的超长指令字(可达几百位)
- 为此需要采用多个处理部件
超流水线技术
- 性能提升原因
- 流水线功能段划分得越多
- 时钟周期就越短
- 指令吞吐率也就越高
- 因此超流水线技术是通过
- 提高流水线主频的方式来提升流水线性能的
- 流水线级数不是越多越好
- 流水线级数越多
- 用于流水寄存器的开销就越大
- 因而流水线级数是有限制的
超流水线和多发射流水线的比较
- 超流水线CPU 在流水线充满后
- 每个时钟周期还是执行一条指令,CPI =1,但其主频更高
- 多发射流水线 CPU 每个时钟周期可以处理多条指令
- CPI < 1,相对而言,多发射流水线成本更高,控制更复杂
多处理器的基本概念
- 基于指令流的数量和数据流的数量,将计算机体系结构分为
- SISD
- SIMID
- MISD
- MIMD
- 常规的单处理器属于 SISD
- 常规的多处理器属于 MIMD
单指令流单数据流(SISD)结构
- SISD(Single Instruction Single Data)
- 是传统的串行计算机结构,这种计算机通常仅包含一个处理器和一个存储器,处理器在一段时间内仅执行一条指令,按指令流规定的顺序串行执行指令流中的若干条指令。
- 为了提高速度,有些SISD 计算机采用流水线的方式
- 因此,SISD 处理器有时会设置多个功能部件,并且采用多模块交叉方式组织存储器。
- 本书前面介绍的内容多属于SISD结构。
单指令流多数据流(SIMD)结构
- SIMD(Single Instruction Multiple Data)
- 是指一个指令流同时对多个数据流进行处理,一般称为数据级并行技术。
- 这种结构的计算机通常由
- 一个指令控制部件
- 多个处理单元
- 组成。
- 每个处理单元虽然执行的都是同一条指令,但是
- 每个单元都有自己的地址寄存器
- 每个单元就都有不同的数据地址
- 不同处理单元执行的同一条指令所处理的数据是不同的。
- 一个顺序应用程序被编译后,
- 可能按 SISD 组织并运行于串行硬件上
- 可能按 SIMD 组织并运行于并行硬件上
- SIMD 在使用 for 循环处理数组时最有效
- 一条分别对 16 对数据进行运算的 SIMD 指令
- 如果在 16 个ALU中同时运算
- 则只需要一次运算时间就能完成运算
- SIMD 在使用 case 或 switch 语句时效率最低
- 此时每个执行单元必须根据不同的数据执行不同的操作。
多指令流单数据流(MISD)结构
- MISD(Multiple Instruction Single Data)
- 指同时执行多条指令
- 处理同一个数据
- 实际上不存在这样的计算机。
多指今流多数据流(MIMD)结构
- MIMD (Multiple Instruction Multiple Data)
- 指同时执行多条指令分别处理多个不同的数据
- MIMD 分为
- 多计算机系统
- 每个计算机节点都具有各自的私有存储器
- 并且具有独立的主存地址空间
- 不能通过存取指令来访问不同节点的私有存储器
- 而要通过消息传递进行数据传送
- 也称消息传递 MIMD
- 多处理器系统
- 共享存储多处理器(SMP)系统的简称
- 它具有共享的单一地址空间
- 通过存取指令来访问系统中的所有存储器
- 也称共享存储 MIMD。
- 多计算机系统
- 向量处理器
- 是什么?
- 是 SIMD 的变体
- 是一种实现了直接操作一维数组(向量)指令集的CPU
- 而串行处理器只能处理单一数据集。
- 基本理念
- 是将从存储器中收集的一组数据按顺序放到一组向量寄存器中
- 然后以流水化的方式对它们依次操作
- 最后将结果写回寄存器。
- 优点
- 在特定工作环境中极大地提升了性能
- 尤其是在数值模拟或者相似的领域中
- 在特定工作环境中极大地提升了性能
- 是什么?
- SIMD 和 MIMD 的区别
- SIMD 和 MIMD 是两种并行计算模式
- SIMD 是一种数据级并行模式
- MIMD 是一种
- 并行程度更高的线程级并行
- 线程级以上并行计算模式
- SIMD 和 MIMD 是两种并行计算模式
硬件多线程的基本概念
- 硬件多线程
- 诞生的原因
- 在传统 CPU 中
- 线程的切换包含一系列开销
- 频繁地切换会极大影响系统的性能
- 为了减少线程切换过程中的开销
- 便诞生了硬件多线程。
- 原理
- 在支持硬件多线程的 CPU 中
- 必须为每个线程提供
- 单独的通用寄存器组
- 单独的程序计数器
- 等
- 线程的切换只需激活选中的寄存器
- 优点
- 省略了与存储器数据交换的环节
- 大大减少了线程切换的开销
- 省略了与存储器数据交换的环节
- 三种实现方式
- 细粒度多线程
- 粗粒度多线程
- 同时多线程(SMT)
- 诞生的原因
细粒度多线程
- 多个线程之间轮流交叉执行指令
- 多个线程之间的指令是不相关的
- 可以乱序并行执行。
- 在这种方式下
- 处理器能在每个时钟周期切换线程。
- 例如,在时钟周期
i
- 将线程 A 中的多条指令发射执行
- 在时钟周期
i+1
- 将线程 B 中的多条指令发射执行
粗粒度多线程
- 仅在一个线程出现了较大开销的阻塞时,才切换线程
- 如 Cache 缺失。
- 粗粒度多线程切换的开销比细粒度多线程更大
- 当发生流水线阻塞时,必须清除被阻塞的流水线
- 新线程的指令开始执行前需要重载流水线
同时多线程
- 是细粒度、粗粒度多线程技术的变体。
- 它在实现指令级并行的同时,实现线程级并行
- 在同一个时钟周期中
- 发射多个不同线程中的多条指令执行。
Intel 处理器中的超线程(Hyper-threading)
- 就是同时多线程 SMT
- 即在一个单处理器或单个核中设置了两套线程状态部件
- 共享
- 高速缓存
- 功能部件
多核处理器的基本概念
多核处理器
- 指将多个处理单元集成到单个 CPU 中
- 每个处理单元称为一个核(core)
核(core)与缓存Cache
- 可独享 Cache
- 可共享 Cache
- 一般对称
- 共享主存
多核
- 共享存储的对称多处理器
图5.23是一个不共享Cache 的双核CPU结构。
- 多核计算机系统
- 如要充分发挥硬件的性能
- 必须采用多线程(或多进程)执行
- 使得每个核在同一时刻都有线程在执行。
- 多核多线程与单核多线程的区别
- 多核上的多个线程
- 是在物理上并行执行的,是真正意义上的并行执行
- 在同一时刻有多个线程在并行执行
- 单核上的多线程
- 是一种多线程交错执行
- 实际上在同一时刻只有一个线程在执行
- 多核上的多个线程
共享内存多处理器的基本概念
共享内存多处理器(SMP)
- Share Memory Processor
- 是什么?
- 具有共享的单一物理地址空间的多处理器
- 各处理器之间如何进行通信?
- 通过存储器中的共享变量互相通信
- 所有处理器都能通过存取指令访问任何存储器的位置
- 注意
- 即使这些系统共享同一个物理地址空间
- 它们仍然可在自己的虚拟地址空间中单独地运行程序。
单一地址空间的多处理器
- 第一类 统一存储访问(UMA)多处理器
- 每个处理器对所有存储单元的访问时间是大致相同的
- 即访问时间与哪个处理器提出访存请求及访问哪个字无关
- 每个处理器对所有存储单元的访问时间是大致相同的
- 第二类 非统一存储访问(NUMA)多处理器
- 某些访存请求要比其他的快
- 取决于哪个处理器提出了访问请求以及访问哪个字
- 这是由于主存被分割并分配给了同一机器上的不同处理器或内存控制器
- 某些访存请求要比其他的快
- 第一类 统一存储访问(UMA)多处理器
早期的计算机(统一存储访问(UMA)构架)
- 内存控制器没有整合进CPU
- 访存操作需要经过北桥芯片
- (集成了内存控制器,并与内存相连)
- CPU通过前端总线和北桥芯片相连
现代计算机(非统一存储访问(NUMA)构架)
- UMA转向NUMA的原因
- 为了消除 UMA 架构的瓶颈
- 随着 CPU 性能提升
- 由提高主频转到增加 CPU 数量(多核、多CPU)
- CPU 对前端总线的争用
- 使得前端总线成为瓶颈
- 随着 CPU 性能提升
- 为了消除 UMA 架构的瓶颈
- 结构
- CPU 内部集成内存控制器
- 每个 CPU 都有独立的内存控制器
- 每个 CPU 都独立连接到一部分内存
- 本地内存
- CPU 直连的这部分内存。
- 远程内存
- CPU 通过 QPI 总线访问的其他CPU内存
- QPI总线
- CPU 之间通过 QPI 总线相连。
- 本地内存
- UMA架构与NUMA 架构的不同点
- 内存的访问出现了本地和远程的区别
- 访问本地内存明显要快于访问远程内存。
- 内存的访问出现了本地和远程的区别
- UMA转向NUMA的原因
共享变量的同步
- 通过对共享变量加锁的方式来控制对共享变量互斥访问。
- 在一个时刻只能有一个处理器获得锁
- 其他要操作该共享变量的处理器必须等待
- 直到该处理器解锁该变量为止
- 通过对共享变量加锁的方式来控制对共享变量互斥访问。
本章小结
计算机如何从时间和空间上区分放在内存中的是指令还是数据?
- 从时间上讲
- 取指令事件发生在“取指周期”
- 取数据事件发生在“执行周期”
- 从空间上讲
- 从内存读出的指令流流向控制器(指令寄存器)
- 从内存读出的数据流流向运算器(通用寄存器)
什么是指令周期、机器周期和时钟周期?它们之间有何关系?
- 指令周期
- CPU 每取出并执行一条指令所需的全部时间
- 机器周期
- 同步控制的机器中
- 执行指令周期中一步相对完整的操作(指令步)所需的时间
- 通常安排 机器周期长度 = 主存周期;
- 同步控制的机器中
- 时钟周期
- 计算机主时钟的周期时间
- 计算机运行时最基本的时序单位
- 对应完成一个微操作所需的时间
- 通常时钟周期 = 计算机主频的倒数
什么是微指令? 和指令有什么关系?
- 微命令
- 控制部件通过控制线向执行部件发出的各种控制命令
- 微指令
- 一组实现一定操作功能的微命令的组合
- 微程序
- 许多条微指令组成的序列,
- 微程序完成对指令的解释执行。
- 指令
- 即指机器指令。
- 每条指令可以完成一个独立的算术运算或逻辑运算操作
- 采用微程序控制器的CPU 中
- 一条指令对应一个微程序
- 一个微程序由许多微指令构成
- 一条微指令会发出很多不同的微命令
什么是指令流水线? 指令流水线相对于传统体系结构的优势是什么?
- 指令流水线
- 把指令分解为若干子过程
- 通过将每个子过程与其他子过程并行执行
- 来提高计算机的吞吐率的技术。
- 指令流水线的优势
- 只需增加少量硬件就能把计算机的运算速度提高几倍
- 因此成为计算机中普遍使用的一种并行处理技术
- 通过在同一个时间段使用各功能部件
- 使得利用率明显提高
- 只需增加少量硬件就能把计算机的运算速度提高几倍
常见问题和易混淆知识点
流水线越多,并行度就越高?
- 错误
- 流水段缓冲之间的额外开销增大
- 每个流水段有一些额外开销
- 用于缓冲间传送数据、进行各种准备和发送等功能
- 这些开销加长了一条指令的整个执行时间
- 当指令间逻辑上相互依赖时,开销更大。
- 每个流水段有一些额外开销
- 流水段缓冲之间的额外开销增大
是否流水段越多,指令执行越快?
- 错误
- 流水段间控制逻辑变多、变复杂
- 用于流水线优化和存储器(或寄存器)冲突处理的
- 控制逻辑将随流水段的增加而大增
- 这可能导致用于流水段之间控制的逻辑
- 比段本身的控制逻辑更复杂
- 用于流水线优化和存储器(或寄存器)冲突处理的
- 流水段间控制逻辑变多、变复杂
有关指令相关、数据相关的几个概念
读后读相关
- 读后读相关(Read After Read,RAR)
- 两条连续的指令读取相同的寄存器时产生
- 不会影响流水线
写后读相关(数据相关或真相关)
- 写后读相关(Read After Write,RAW)
- 某条指令要读取上一条指令所写入的寄存器时
- 影响流水线
读后写相关 & 写后写相关
- 读后写(Write After Read,WAR)
- 写后写(Write After Write,WAW)
- 某条指令的上条指令要读/写该指令的输出寄存器时
按序流动的流水线
- 只可能出现 RAW 相关。
非按序流动的流水线
- 可能发生 RAW、WAR、WAW 相关。
组合逻辑电路和时序逻辑电路有什么区别?
- 组合逻辑电路
- 是具有一组输出和一组输入的非记忆性逻辑电路
- 基本特点
- 是任何时刻的输出信号状态
- 仅取决于该时刻各个输入信号状态的组合
- 与电路在输入信号作用前的状态无关
- 是任何时刻的输出信号状态
- 组合电路
- 不含存储信号的记忆单元
- 输出与输入之间无反馈通路
- 信号是单向传输的
- 时序逻辑电路
- 逻辑功能上的特点
- 任意时刻的输出信号不仅和当时的输入信号有关
- 而且与电路原来的状态有关
- 因而时序逻辑电路必然包含存储记忆单元。
- 逻辑功能上的特点
- 统一的时钟控制
- 组合逻辑电路没有统一的时钟控制
- 时序逻辑电路则必须在时钟节拍下工作。