type
date
slug
summary
tags
category
password
status
icon
一、CPU 的功能和基本结构
1、CPU 的功能
- 指令控制:
- 完成取指令、分析指令和执行指令的操作,即程序的顺序控制
- 操作控制:
- 管理并产生由内存取出的每条指令的操作信号
- 把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作
- 时间控制:
- 严格控制各种操作信号的出现时间、持续时间及出现的时间顺序
- 数据加工:
- 对数据进行算术和逻辑运算
- 中断处理:
- 对计算机运行过程中出现的异常情况和特殊请求进行处理
2、CPU 的基本结构
(1)组成部分
- CPU = 运算器 + 控制器
- 运算器:对数据进行加工
- 控制器:负责协调并控制计算机各部件执行程序的指令
- CPU = 数据通路 + 控制部件

(2)CPU 寄存器的分类
按汇编语言(或机器语言)程序是否可以访问
1)用户可见的寄存器
- 可对这类寄存器编程
- 使用这类寄存器可减少对主存储器的访问次数
- 如:通用寄存器(含基址 / 变址)、程序状态字寄存器、程序计数器、累加寄存器、移位寄存器
2)用户不可见的寄存器
- 对用户透明,不可编程
- 被控制部件使用,以控制 CPU 的操作
- 保留各种状态信息:溢出标志 OF,符号标志 SF,零标志 ZF,进位标志 CF
- 如:存储器地址寄存器、存储器数据寄存器、指令寄存器、暂存寄存器
(2)运算器基本结构
1)功能
- 运算器是计算机对数据进行加工处理的中心
- 接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理
2)组成
- 算术逻辑单元(ALU):进行算术 / 逻辑运算
- 程序状态字寄存器(PSW):
- PSW 存放程序状态字【标志位的组合】,用于保存系统的运行状态
- PSW 包括状态标志和控制标志
- 溢出标志 OF,符号标志 SF,零标志 ZF,进位标志 CF
- 中断标志,陷阱标志
- 累加寄存器(ACC):
- 是一个通用寄存器
- 暂放 ALU 运算的结果信息,可作为加法运算的输入端
- 通用寄存器组(GPRS):
- 如 AX,BX,CX,DX,SP
- 用于存放操作数和各种地址信息,所以其位数与机器字长相等
- SP 是堆栈指针,用于指示栈顶的地址
- 暂存寄存器:
- 暂存从数据总线或通用寄存器读来的操作数
- 对应用程序员透明
- 移位寄存器(SR):对操作数或运算结果进行移位运算
- 计数器:控制乘除运算的操作步数
(3)控制器基本结构
1)功能
- 协调并控制计算机各部件执行程序的指令序列
- 基本功能包括取指令、分析指令、执行指令
- 取指令:自动形成指令地址;自动发出取指令的命令
- 分析指令:操作码译码(分析本条指令要完成什么操作),产生操作数的有效地址
- 执行指令:根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作
- 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)
2)组成
- 程序计数器(PC):
- 用于指出下一条指令在主存中的存放地址(PC 总是存放指令地址)
- PC 有自增功能
- PC 的值会根据 CPU 在执行指令过程中自增或转移到程序的某处 (跳转指令)
- PC 的位数等于主存储器地址位数
- 指令寄存器(IR):
- 用于保存当前正在执行的那条指令
- IR 的位数取决于指令字长
- 指令译码器(ID):
- 仅对操作码字段进行译码,以确定指令的操作功能
- 存储器地址寄存器(MAR):
- 存放要访问的主存储器单元的地址
- MAR 的位数等于主存储器地址线位数
- 存储器数据寄存器(MDR):
- 存放向主存储器写入的信息或从主存储器读出的信息
- MDR 的位数等于存储字长
- 时序系统:用于产生各种时序信号,都由统一时钟 CLOCK 分频得到
- 微操作信号发生器:
- 根据 IR 的内容 (指令),PSW 的内容 (状态信息) 和时序信号产生控制计算机系统所需的各种控制信号
- 有组合逻辑型和存储逻辑型
(4)数据通路基本结构
1)专用数据通路方式
- 根据指令执行过程中的数据和地址的流动方向安排连线线路
- 使用多路选择器控制一路的输出
- 使用三态门控制输出
- 优点:性能较高,基本不存在数据冲突现象
- 缺点:结构复杂,硬件量大,不易实现
2)CPU 内部单总线方式
- 将所有寄存器的输入端和控制端都连接到一条公共通路
- 优点:结构简单,容易实现
- 缺点:传输存在较多冲突现象,性能较低
3、CPU 常混淆点
- 转移指令时,需要判别转移是否成功,若成功则 PC 修改为转移指令的目标地址,否则下一条指令的地址仍然为 PC 自增后的地址
- 计算机分两大部分:控制部件和执行部件
- 控制器就是控制部件,指令寄存器,操作控制器,程序计数器都是控制部件
- 运算器,存储器,外围设备就是执行部件
- 各寄存器的位数等于什么?【和地址有关的就取决于机器字长,和数据大小有关的就取决于容量】
- 通用寄存器:机器字长
- PC:
- 按字节编址:与存储器地址的位数相等,取决于存储器容量
- 按字编址:位数 = 存储器地址的位数 - $log_2(指令字长的字节数)$ 【指令必须按边界对齐的方式存放】,取决于存储器容量和存储字长
- IR:指令字长
- MAR:存储器容量
- MDR:存储字长
二、指令执行过程
1、指令周期相关概念
- 指令周期:CPU 从主存中每取出并执行一条指令所需的全部时间,一个指令周期由多个机器周期组成

- 指令周期最多有 4 种机器周期:取指周期、间址周期、执行周期、中断周期(都有访问主存的操作)
- 分别对应标志触发器:FE、IND、EX、INT(“1”表示有效,如 1-->FE 表示有取值周期)

易混淆知识点
- 指令:
- CPU 区分指令和数据的依据是指令周期的不同阶段【取指周期取指令,执行周期取数据】
- 不同长度的指令,取指操作可能不同(如双字指令,三字指令和单字指令);指令长度相同的情况下,指令的取指操作是相同的
- 指令总是根据 PC 从主存中读出(无条件转移指令或中断返回指令也是如此,最终的结果还是根据 PC 从主存读出)
- 取指:
- 取指操作是控制器固有的功能,不需要操作码的控制
- 取指操作是自动进行的,控制器不需要得到相应的指令
- 取指周期简单来说是取指,即从主存中取出指令字
- 字长:
- 为了硬件设计方便,指令字长一般取存储字长的整数倍
- 如果指令字长=存储字长的 2 倍,则取一条指令需要访存 2 次,取指周期是机器周期的 2 倍
- 指令字长和机器字长无任何关系
- 中断:
- CPU 在每条指令执行结束前,都要发中断查询信号
- CPU 响应中断的时间是一条指令执行结束后
- 周期:
- 指令周期:CPU 从主存中取出并执行一条指令的时间,一个指令周期由多个机器周期组成
- 机器周期(CPU 周期):一个机器周期包含若干时钟周期
- 时钟周期(节拍 / T 周期):计算机工作的最小时间周期,是 CPU 操作的基本单位;一个时钟周期内控制信号不发生改变
- 存取周期:连续启动两次独立的读/写操作所需要的最短时间
- 周期的关系:
- 机器周期通常由存取周期确定【因为存取周期时间最长】
- 执行各条指令的机器周期数可变,各机器周期的长度可变
- 机器周期是指令执行中每步操作(如取指令,存储器读/写)所需要的时间
- 每个机器周期内的节拍数可以不等,因此长度可变
- 各种指令的功能不同,所以指令执行时所需的机器周期数可变
- 采用 DMA 方式传递数据,每传送一个数据就要占用存取周期
- 其他:
- 不采用 Cache 表明每次取指令都只是要访问内存一次
- 不采用指令预取技术表明每个指令周期都需要取指令
2、不同指令的指令周期举例
- 无条件转移指令 JMP X:
- 指令周期 = 取指周期+执行周期
- PC 被修改两次【 取值周期结束 PC 自动加 1 + 执行周期 PC 值修改为要调转到的地址】
- 间接寻址的指令:
- 指令周期 = 取指周期 + 间址周期 + 执行周期
- 为了取操作数,需要先访问一次主存,取出有效地址--->取指周期
- 然后访问主存,取出操作数--->间址周期
- 间址周期结束时,CPU 中 MDR 中的内容是操作数的有效地址 EA
- CPU 采用中断方式实现主机和 I/O 设备的信息交换且有中断请求:
- 指令周期 = 取指周期 + 间址周期 + 执行周期 + 中断周期
- CPU 在每条指令执行结束前,都要发中断查询信号
- 若有中断请求,则 CPU 进入中断响应阶段----->中断周期
- 中断周期进栈操作是将 SP-1,计算机的堆栈都是向低地址(栈顶)增加,所有进栈操作减 1 而不是加 1
3、指令周期的数据流
- 数据流:根据指令要求一次访问的数据序列
- 指令执行不同阶段,访问的数据序列不同
- 任务:根据 PC 中的内容从主存中取出指令代码并放在 IR 中
- 数据流向:PC 中存放的是指令的地址,根据此地址从内存单元中取出的指令,并放在指令寄存器 IR 中,取指同时,PC+1
- PC--->MAR--->地址总线--->主存
- CU (控制单元) 发出读命令--->控制总线--->主存
- 主存--->数据总线 MDR--->IR(存放指令)
- CU 发出控制信号--->PC 内容加 1

(2)间址周期
- 任务:取操作数的有效地址
- 数据流向:以一次间址为例,将指令中的地址码送到 MAR 并送至地址总线,此后 CU 向存储器发出读命令,以获取有效地址并存至 MDR
- Ad(IR)(或 MDR)--->MAR--->地址总线--->主存
- CU 发出读命令--->控制总线--->内存
- 主存--->数据总线--->MDR(存放有效地址)
- 有效地址--->指令的地址码字段
- Ad(IR) 表示取出 IR 中存放的指令字的地址字段

(3)执行周期
- 任务:取操作数,并根据 IR 中的指令字的操作码通过 ALU 操作产出执行结果
- 数据流向:不同指令操作不同,无统一的数据流向
(4)中断周期
- 任务:处理中断请求
- 数据流向:假设程序断点存入堆栈中,并用 SP 指示栈顶指针,而且进栈操作是先修改指针,后存入数据;出栈操作是先删除数据,后修改指针
- CU 控制将 SP 减 1,SP--->MAR--->地址总线--->主存
- CU 发出写命令--->控制总线--->主存
- PC--->MDR--->数据总线--->主存(程序断点存入主存)
- CU(中断服务程序的入口)--->PC

4、指令的执行方案
(1)单周期处理器
- 定义:
- 每条指令都在固定的时钟周期内完成【CPI = 1】,指令之间串行执行
- 指令周期取决于执行时间最长的指令的执行时间
- 特点:串行,相同执行时间
(2)多周期处理器
- 定义:
- 指令之间串行执行
- 指令需要几个周期就为其分配几个周期
- 可以选用不同个数的时钟周期来完成不同指令的执行过程【CPI > 1】
- 特点:串行,不同执行时间
(3)流水线处理器
- 定义:
- 力争在每个时间脉冲周期完成一条指令的执行过程【理想情况下,CPI = 1】
- 尽量让多条指令同时运行,但各自处在不同的执行步骤中
- 特点:并行
三、数据通路的功能和基本结构
1、数据通路概述
- 定义:
- 数据在指令执行的过程中所经过的路径,包括路径上的部件,称为数据通路
- ALU、通用寄存器、状态寄存器、异常和中断处理逻辑等都收数据通路的一部分
- 它描述了信息从哪里开始,中间经过哪些部件,最后被传送到哪里
- 功能:实现 CPU 内部的运算器与寄存器及寄存器之间的数据交换
- 易混淆知识点:
- 数据通路是由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
- 单总线数据通路将所有寄存器的输入输出端都连接在一条公共通路上,一个时钟内只允许一次操作,无法完成指令的所有操作
- CPU 的读 / 写控制信号线决定了是从存储器读还是向存储器写
- 内部总线是指同一部件之间的线,系统总线是同一台计算机系统各部件之间的线
2、数据通路的基本结构
(1)CPU 内部单总线方式
- 定义:将所用寄存器的输入端与输出端连接到一条公共通路上
- 特点:结构比较简单,数据传输存在较多的冲突现象,性能较低

- in 表示该部件的允许输入控制信号;out 表示该部件的允许输出控制信号
- 定义:将所用寄存器的输入端与输出端都连接到多条公共通路上
- 特点:相较单总线结构,效率较高
(3)专用数据通路方式
- 定义:根据指令执行过程中的数据和地址的流动方向安排连接线路
- 特点:避免使用共享的总线,性能较好,但硬件总量较大
3、数据通路的操作举例
以 CPU 内部单总线数据通路为例:
(1)寄存器之间数据传送
比如把 PC 内容送至 MAR,实现传送操作的流程及控制信号为:
- (PC) -> Bus 【PCout 有效,PC 内容送至总线】
- Bus -> MAR 【MARin 有效,总线内容送 MAR】
(2)主存与 CPU 之间的数据传送
比如 CPU 从主存读取指令,实现传送操作的流程及控制信号为:
- (PC) -> Bus -> MAR 【PCout 和 MARin 有效,现行指令地址 -> MAR】
- 1 -> R 【CU 发读命令(通过控制总线)】
- MEM (MAR) -> MDR 【MDRin 有效】
- MDR -> Bus -> IR 【MDRout 和 IRin 有效,现行指令 -> IR】
(3)执行算术或逻辑运算
比如一条加法指令,微指令序列及控制信号为:
- Ad (IR) -> Bus -> MAR 【MDRout 和 Yin 有效】
- 1 -> R 【CU 发读命令】
- MEM (MAR) -> 数据线 -> MDR 【MDRin 有效】
- MDR -> Bus -> Y 【MDRout 和 Yin 有效,操作数 -> Y】
- (ACC) + (Y) -> Z 【ACCout 和 ALUin 有效,CU 向 ALU 发送加命令】
- Z -> ACC 【Zout 和 ACCin 有效,结果 -> ACC】
四、控制器的功能和工作原理
1、硬布线控制器
(1)基本原理
- 根据指令的要求、当前的时序及外部和内部的状态,按时间顺序发送一系列微操作控制信号
- 经指令编译器译码产生的指令信息
- 时序系统产生的机器周期信号和节拍信号
- 来自执行单元的反馈信号,即标志微操作控制信号的形成主要与指令译码信号和时钟信号有关
(3)硬布线控制器的时序系统及微操作
- 时钟周期:用时钟信号控制节拍发生器,可以产生节拍,每个节拍的宽度正好对应一个时钟周期
- 机器周期:可以视为所有指令执行过程中的一个基准时间
- 指令周期:CPU 从主存中取出并执行一条指令的时间称为指令周期
- 微操作命令分析:控制单元发出各种操作命令序列的功能
(4)CPU 的控制方式
1)同步控制方式
- 系统有一个统一的时钟,所有的控制信号都来源于这个统一的时钟信号
- 通常以最长的微操作序列和最繁琐的微操作作为标准
- 采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令
- 优点:控制电路简单
- 不存在基准时标信号,各部件按照自身固有速度工作,通过应答方式进行联络
- 优点:运行速度快
- 介于同步、异步之间的一种折中
- 对大部分采用同步控制,小部分采用异步控制
(5)设计步骤

(6)安排微操作时序的原则
- 原则一:微操作的先后顺序不得随意更改
- 原则二:被控对象不同的微操作尽量安排在一个节拍内完成
- 原则三:占用时间较短的微操作尽量安排在一个节拍内完成并允许有先后顺序
2、微程序控制器
(1)基本原理
- 采用存储逻辑实现,即把微操作信号代码化
- 将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令
- 机器指令---->微程序---->微指令----->微操作命令
- 这些微程序可以存到一个控制存储器中,用寻址用户程序机器指令的办法来寻址每个微程序中微指令
(2)基本概念
1)微命令与微操作
- 微操作:执行部件收到微命令后所进行的操作【是计算机中最基本、不可再分解的操作】
- 微命令:控制部件向执行部件发出的各种控制命令【是构成控制序列的最小单位】
- 微指令:若干微命令的集合
- 操作控制字段【微操作码字段】:用于产生某一步操作所需的各种控制信号
- 顺序控制字段【微地址码字段】:用于控制产生下一条要执行的微指令地址
- 微周期:指从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期
- 主存:用于存放程序和数据,在 CPU 外部,用 RAM 实现
- 程序:是指令的有序集合,用于完成特定的功能
- 一般来说,一条机器指令对应一个微程序
(3)寄存器分类
- 地址寄存器【MAR】:存放主存的读 / 写地址
- 微指令地址寄存器【uPC 或 CMAR】:存放待执行的微指令在控制存储器中的微地址
- 指令寄存器【IR】:存放从主存中读出的指令
- 微指令寄存器【uIR 或 CMDR】:存放从控制存储器中读出的微指令
(4)基本组成
- 控制存储器:核心部件,用于存放各指令对应的微程序,控制存储器可用 ROM 构成
- 微指令寄存器:存放从 CM 中取出的微指令,位数与微指令字长相等
- 微地址形成部件【起始和转移地址形成部件】:用于产生初始微地址和后继微地址,以保证微指令的连续执行
- 微地址寄存器:接受微地址形成部件送来的微地址,为在 CM 中读取微指令做准备

(5)工作过程
实际上就是在微程序控制器的控制下计算机执行机器指令的过程:
- 执行取微指令公共操作
- 在机器开始运行时,自动地将取指微程序的入口地址送入 CMAR,并从 CM 中读出相应的微指令进入 CMDR
- 取指微程序的入口地址一般为 CM 的 0 号单元
- 取指微程序执行完成后,从主存中取出的机器指令就已存入指令寄存器中
- 由机器指令的操作码字段通过微地址形成部件产生该及其指令所对应的微程序的入口地址,并送入 CMAR
- 从 CM 中逐条取出对应的微指令并执行
- 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第一步
(6)微指令的编码方式【控制方式】
目的:保证速度的情况下尽量缩短指令字长
1)直接编码方式
- 无需进行译码,微指令的微命令字段中的每一位都代表一个微命令
- 优点:简单、直观、执行速度快,操作并行性好
- 缺点:微指令字长过长,n 个微指令就要求微指令的操作字段有 n 位,造成控制存储器容量极大

2)字段直接编码方式
- 将微命令字段分成若干小字段,每段经译码后发出控制信号
- 每个字段独立编码,每种编码都代表一个微命令且各字段编码含义单独定义,与其他字段无关
- 分段原则:
- 互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中
- 每个小段中包含的信息位不能太多,否则将增加译码电路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令【某字段长度 3 位时,最多只有 7 个互斥微命令】
- 优点:可以缩短微指令字长
- 缺点:要通过译码电路之后再发出微命令,速度慢

3)字段间接编码方式
- 一个字段的某些微命令需由另一字段中的某些微命令解释
- 由于不是靠字段直接译码发出的微命令,因此称为字段间接编码
- 优点:可进一步缩短微指令字长
- 缺点:削弱了微指令的并行能力

(7)微指令的格式
水平型 | 垂直型 |
并行操作能力强、效率高、灵活性强 | 相反 |
执行一条指令的时间短 | 相反 |
微指令字较长但微程序短 | 相反 |
用户难以掌握 | 与指令相似,相对容易掌握 |
1)水平型微指令
- 一条水平型微指令定义并执行多个并行操作的微命令
- 直接编码,字段直接编码,字段间接编码都属于水平型微指令
- 优点:微程序短,执行速度快
- 缺点:微指令长,编写微程序比较麻烦

2)垂直型微指令
- 一条微指令只能定义并执行一个微命令
- 由微操作码字段规定具体功能
- 优点:微指令短、简单、规整、便于编写程序
- 缺点:微程序长,执行速度慢,工作效率低

3)混合型微指令
- 在垂直型的基础上增加一些不太复杂的并行操作
- 微指令较短,仍便于编写;微程序也不长,执行速度加快
(8)微指令的地址形成方式
- 直接由微指令的下地址字段指出:微指令格式中设置一个下地址字段【断定方式】
- 根据机器指令的操作码形成:机器指令取至 IR 后,微指令的地址由操作码经微地址形成部件形成
- 增量计数器法【微地址连续】:(CMAR) + 1 -> CMAR
- 分支转移:根据各种标志
- 通过测试网络形成:由硬件直接产生微程序入口地址
(9)设计步骤

(10)微程序设计分类
- 静态微程序设计和动态微程序设计
- 静态:微程序无需改变,采用 ROM
- 动态:通过改变微指令和微程序改变机器指令,有利于仿真,采用 EPROM
- 毫微程序设计
- 微程序设计:用微程序解释机器指令
- 毫微程序设计: 用毫微程序解释微程序
- 毫微指令与微指令的关系好比微指令与机器指令的关系
两者的比较
ㅤ | 微程序控制器 | 硬布线控制器 |
工作原理 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生 |
执行速度 | 慢 | 快 |
规整性 | 较规整 | 烦琐、不规整 |
应用场合 | CISC CPU | RISC CPU |
易扩充性 | 易扩充修改 | 困难 |
五、异常和中断机制
中断和异常本质上一样,不同点:
- 缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的;中断不与任何指令相关联,也不阻止任何指令的完成
- 异常的检测由 CPU 自身完成,不必通过外部的某个信号通知 CPU;而 CPU 必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断
1、异常(内中断)
(1)基本概念
- 由 CPU 内部产生的意外事件被称为异常
- 是 CPU 执行一条命令时,由 CPU 在其内部检测到的,与正在执行指令相关的同步事件
- 每个指令周期末尾,CPU 都会检查是否有外中断信号需要处理
(2)分类
- 硬故障中断:由硬连线出现异常引起的
- 如存储器校验错、总线错误等
- 包括终止异常和外中断
- 程序性异常【软件中断】:指在 CPU 内部因执行指令而引起的异常事件
- 如整除 0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等
- 包括故障异常和自陷异常
按异常发生的原因和返回方式不同,可分为:
1)故障(Fault)
- 概念:在引起故障的指令启动之后、执行结束前被检测到的异常事件
- 举例:
- 指令译码时,出现“非法操作码”
- 取数据时,发生“缺段”或“缺页”
- 除数为零
- 地址越界
- 注意:
- 概念:也称陷阱或陷入,是预先安排的一种“异常事件”,就像预先设置好的“陷阱”一样
- 举例:
- x86 机器中,用于程序调试“断点设置”和单步跟踪功能
- 系统调用命令
- 条件自陷指令
- 概念:若在执行指令的过程中发生了使计算机无法继续执行的硬件故障,那么程序将无法继续执行,只能终止
- 举例:
- 控制器出错
- 存储器校验错
- 调出中断服务程序来重启系统
- 注意:
- 不是由特定指令产生的,而是随机发生的
2、中断(外中断)
(1)基本概念
- 由来自 CPU 外部的设备发出的中断请求(常用于输入输出)被称为中断
- 典型的由外部设备触发的、与当前正在执行的指令无关的异步事件
- 外部 I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求
- CPU 每执行完一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应期
- 外部中断都是在一条指令执行完成后(中断周期)才被检测并处理的
(2)分类
举例:
- Cache 缺失
- I/O 中断:键盘输入,打印机缺纸
- 概念:
- 通过不可屏蔽中断请求线 NMI 向 CPU 发出的中断请求
- 通常是非常紧急的硬件故障,如电源掉电等
3、异常和中断响应过程
- 从 CPU 检测到异常或中断事件,到调出相应的处理程序,整个过程称为异常和中断响应
- 响应过程不可被打断,整个中断处理过程是软 / 硬件协同实现的
- 在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断
- 设置中断允许触发器(IF)实现【IF = 1 代表开中断,表示允许响应中断】
(2)保存断点和程序状态
- 为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中
- 通常保存在栈中,为了支持异常或中断的嵌套
- 被中断时的 PSW 也要保存,并在返回时恢复
(3)识别异常和中断并转到相应的处理程序
- 软件识别:
- CPU 设置一个异常状态寄存器,用于记录异常原因
- 操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,然后转到内核处理相应程序
- 异常、中断采用
- 硬件识别【向量中断】:
- 异常或中断处理程序的首地址称为中断向量
- 所有中断向量存放在中断向量表
- 每个异常或中断被指定一个中断类型号,可据此快速找到对应的处理程序
- 中断采用
六、指令流水线
1、流水线的基本概念
(1)如何提高处理机的并行性
- 时间上的并行技术:
- 将一个任务拆分成几个不同的子阶段
- 每个阶段在不同的功能部件上并行执行,即流水线技术
- 空间上的并行技术:
- 在一个处理机设置多个执行相同任务的功能部件
- 并让这些功能部件并行工作,这样的处理机称为超标量处理机
(2)指令流水线的定义
- 将指令执行过程的各阶段视为相应的流水段,则指令的执行过程就构成了一条指令流水线

- 设用时最长的流水段用时 X 秒 (如 200 ns),总执行时间为 y 秒 (如 700 ns),系统由 N 条指令,度为 1
- 则单处理机用时为 y × N,流水线处理机用时为 y + (N - 1) × X
- 不能缩短单条指令的执行时间,但对于整个程序来说,执行效率得到大幅提升
(3)指令集应具备的特点
- 指令长度尽量一致,有利于简化取指和指令译码操作
- 指令格式尽量规整,尽量保证源寄存器的位置相同,有利于在指令未知时就可取存寄存器操作数
- 采用 Load/Store 指令,把 Load/Store 指令的地址计算和运算指令的执行步骤规整到同一个周期中,有利于减少操作步骤
- 数据和指令在存储器中“对齐”存放,这样有利于减少访存次数使所需数据在一个流水段内就可以从存储器中找到
(4)流水线的表示方法
- 采用时空图描述流水线的执行情况

(5)流水线的性能指标
1)流水线的吞吐率(TP)
- 吞吐率:单位时间内流水线所完成的任务数量,或是输出结果的数量
- 设任务数 m,处理完成 n 个任务所用的时间为 $T_k$
- $TP=\frac{n}{T_k}=\frac{n}{(k+n-1)Δt}$
- 最大吞吐率:$TP_{max}=\frac{1}{Δt}$

- 注意:
- m 段流水线的 CPU 吞吐能力 = m 个并行部件的 CPU 吞吐能力
- m 段流水线在第 m 个时钟周期后,每个时钟周期都可完成一条指令
- m 个并行部件在 m 个时钟周期后能完成全部的 m 条指令,等价于平均每个时钟周期完成一条指令
2)流水线的加速比(S)
- 加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比
- 设顺序执行的时间为 $T_0$,使用流水线的执行时间 $T_k$
- $S=\frac{T_0}{T_k}=\frac{kn}{k+n-1}$
- 最大加速比: $S_{max}=k$

3)流水线的效率(E)
- 效率:流水线的设备利用率,在时空图上,表示为完成 n 个任务占用的时空区有效面积与 n 个任务所用的时间与 k 个流水段所围成的时空区总面积之比
- $E=\frac{T_0}{kT_k}$

2、流水线的基本实现
(1)流水线的数据通路
- 数据通路:数据在功能部件之间传送的路径
- 包括数据通路上流经的部件(如 PC,ALU,通用寄存器,状态寄存器,异常和中断处理逻辑)
- 数据通路由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号
- 数据通路不包含生成控制信号的控制部件

(2)流水线的控制信号

- 流水寄存器保存的信息
- 后面流水段要用到的所有数据信息
- 包括 PC+4,、指令、立即数、目的寄存器、ALU 运算结果、标志信息等
- 它们是前面阶段在数据通路中执行的结果
- 后面传递过来的后面各流水段要用到的所有控制信号
(3)流水线的执行过程
- 假设一条指令的执行有 5 条流水线
- 取指(IF):从指令寄存器或 Cache 中取指令
- 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中读取操作数
- 执行/计算地址(EX):执行运算操作或计算地址
- 访存(MEM):对存储器进行读写操作
- 写回(WB):将指令执行结果写回寄存器
3、流水线的冒险与处理
- 流水线冒险:在指令流水线中,可能会遇到一些情况使得后续指令无法正确执行而引起流水线阻塞的现象
- 定义:由于多条指令在同一时刻争用同一资源而形成的冲突,也称资源冲突
- 解决方法:

- 前一指令访存时,使后一条指令(以及其后续指令)暂停一个时钟周期
- 设置多个独立的部件:
- 寄存器访存冲突:将寄存器的读口和写口独立开来
- 访存冲突:单独设置数据存储器和指令存储器,使取数和取指令操作各自在不同的存储器中进行(分离结构的 Cache)
(2)数据冒险
- 定义:后面指令用到前面指令的结果时,前面指令的结果还没有产生,也称数据相关
- 乱序执行的流水线中存在三种数据相关:
- 写后读 RAW:当前指令将数据写入寄存器后,下一条指令才能从该寄存器读取数据
- 读后写 WAR:当前指令读出数据后,下一条指令才能写入寄存器
- 写后写 WAW:当前指令写入寄存器后,下一条指令才能写入寄存器
- 按序执行的流水线中,只可能出现 RAW 冲突
- 解决方法:

- 延迟执行相关指令:把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直至数据相关问题消失后再继续执行,可分为硬件阻塞(stall) 和软件插入空操作 nop

- 转发(旁路)技术:设置相关转发通路,不等前一条指令把计算结果写回寄存器,下一条指令也不再从寄存器读,而将数据通路中生成的中间数据直接转发到 ALU 的输入端

- load-use 数据冒险处理:load 指令与紧邻的运算类指令存在数据相关问题,可以使用延迟+转发技术解决,最好是在程序编译时进行优化,通过调整指令顺序避免出现该现象

(3)控制冒险
- 定义:当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时,会引起控制相关
- 解决办法

- 延迟:延迟损失多少时间片,就插入多少条 nop 指令或者进行 stall
- 对转移指令进行分支预测:
- 静态预测:总是预测条件不满足,则按序继续执行分支指令的后续指令
- 动态预测:根据程序执行的历史情况,进行动态调整,有效提高预测准确率
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
4、高级流水线技术
(1)超标量流水线技术
- 定义:每个时钟周期内可并发多条独立指令,以并行操作方式将两条或多条指令编译并执行,也称动态多发射技术

- 每个时钟周期内可并发多条独立指令
- 并不影响流水线功能段的处理时间
- 要配置多个功能部件,实际上是以空间换时间
- 乱序执行,不能调整指令的执行顺序
- 通过编译优化技术,把可并行执行的指令搭配起来
(2)超长指令字技术
- 定义:由编译程序挖掘出指令潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码的超长指令字(可达几百位),也称静态多发射技术

- 需要多个处理部件
(3)超流水线技术
- 定义:在一个时钟周期内再分段

- 流水线功能段越多,时钟周期越短,指令吞吐率越高
- 通过提高流水线主频的方式来提升流水线性能的
- 流水线级数越多,用于流水线寄存器的开销越大
七、多处理器的基本概念
1、SISD、SIMD、SIMD、MIMD 的基本概念
- 基于指令流的数量和数据流的数量,将计算机体系结构分为 SISD,SIMD,MISD 和 MIMD
- 串行计算机结构
- 各指令只能并发,不能并行每条指令处理一两个数据
- 不是数据级并行技术
- 通常只包含一个处理器和一个存储器
- 有些使用流水线的方式,所以有时会设置多个功能部件,并采用多模块交叉方式组织存储器
(2)单指令流多数据流结构(SIMD)
- 一个指令流同时对多个数据流进行处理,称为数据级并行技术
- 各指令只能并发,不能并行,但每条指令可同时处理多个有相同特征的数据
- 由一个指令控制部件、多个处理单元组成
- 每个处理单元虽然执行的都是同一条指令, 但每个单元都有自己的地址寄存器,就有了不同的数据地址,不同执行单元执行同一条指令处理不同数据
- 一个顺序应用程序被编译之后, 可能按照 SISD 组织并运行于串行硬件上,也可能按 SIMD 组织并运行于并行硬件上
- for 循环效率高,但 switch 或 case 时效率低
- 向量处理器也是 SIMD 的变体,是一种实现了直接操作一维数组(向量)指令集的 CPU
(3)多指令流单数据流结构(MISD)
- 同时执行多条指令,处理同一个数据
- 实际上不存在这样的计算机
(4)多指令流多数据流结构(MIMD)
- 同时执行多条指令,处理多个不同的数据
- 各指令序列并行执行,分别处理不同的数据
- 是一种线程级并行,甚至是线程级及以上并行技术
- 分为多计算机系统和多处理器系统
- 多计算机系统:
- 每个计算机节点都具有各自的私有存储器,并且具有独立的主存地址空间
- 不能通过存取指令来访问不同节点的私有存储器
- 而要通过消息传递进行数据传送,也称为消息传递 MIMD
- 多处理器系统:
- 共享存储多处理器(SMP)系统的简称
- 它具有共享的单一地址空间,通过访存指令(LOAD/STORE指令)来访问系统中的所有存储器,也称共享存储 MIMD
(5)联系与区别
- SIMD 和 MIMD 是两种并行计算模式(多数据就是并行)
- SIMD 是一种数据级并行模式【数据级别】
- MIMD 是一种并行程度更高的线程级并行或线程级以上并行计算模式【线程级别】
2、硬件多线程
- 引入硬件多线程的目的:为了减少开销
- 硬件多线程中必须为每个线程提供单独的通用寄存器组、单独的程序计数器等
- 线程的激活只需要激活选中的寄存器,从而省略了与存储器数据交换的环节,节省了开销


(1)细粒度多线程
- 多个线程之间轮流交叉执行指令,多个线程之间的指令是互不相关的
- 可以乱序并行执行
- 该方式下,处理器能在每个时钟周期切换线程
- 实现指令级并行
(2)粗粒度多线程
- 连续几个时钟周期都执行同一线程的指令序列
- 仅在一个线程出现较大开销的阻塞时,才切换线程;如 Cache 缺失
- 当发生流水线阻塞的时候,必须清除被阻塞的流水线
- 新线程的指令开始执行前需要重载流水线,开销较上一种较大
- 实现指令级并行
(3)同时多线程(SMT)
- 又叫做超线程技术 HT
- 在实现指令级并行的同时,实现线程级并行
3、多核处理器
- 将多个处理单元集成到单个 CPU 中,每个处理单元称为一个核(core)
- 每个核可以有自己的 Cache,也可以共享一个 Cache
- 所有核一般都是对称的,并且共享主存,因此多核属于共享存储的对称多处理器
- 在多核计算机系统中,若要充分发挥硬件的性能,必须采用多线程执行,使每个核在同一时刻都有线程在执行,这是真正的并行执行
4、共享内存处理器(SMP)
- 定义:具有共享的单一物理地址空间的多处理器
- 处理器通过存储器中的共享变量相互通信,所有处理器都能通过存取指令访存任何存储器的位置
- 即使这些系统共享同一个物理地址空间,它们仍然可以在自己的虚拟地址空间中单独地运行程序
- 单一地址空间的多处理器分类
- 统一存储访问(UMA)多处理器:
- 根据处理器与共享存储器之间的连接方式
- 分为基于总线、基于交叉开关网络和基于多级交换网络连接等几种处理器
- 每个处理器对所有存储单元的访问时间都是大致相同的
- 非统一存储访问(NUMA)多处理器:
- 某些存储器的访存速度较快,具体取决于哪个处理器退出访问请求及访问哪个字【由于主存被分割给了不同的处理器】
- 处理器中不带高速缓存时,被称为 NC-NUMA
- 处理器中带有一致性高速缓存时,被称为 CC-NUMA(某些访问请求要比其他的快)
- 作者:救赎之旅
- 链接:https://jiushuself.nyc.mn/article/f3da96bb-a0e5-4e6d-a1a4-1fa5fffe492c
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
