本文主要是介绍408计算机组成原理知识点——第五章 中央处理器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- CPU的功能和基本结构
- CPU的功能
- 运算器和控制器的功能
- 运算器的基本结构
- 专用数据通路方式
- CPU内部单总线方式
- 运算器的基本结构
- 控制器的基本结构
- CPU的基本结构
- 指令执行过程
- 指令周期
- 指令周期流程
- 指令周期的数据流
- 取指周期
- 间址周期
- 执行周期
- 中断周期
- 指令的执行方案
- 数据通路的功能和基本结构
- 总线
- 数据通路的组成
- 组合逻辑元件(操作元件)
- 时序逻辑元件(状态元件)
- CPU内部单总线方式
- CPU内部多总线方式
- 专用数据通路方式
- 控制器的功能和工作原理
- 硬布线控制器
- 微程序控制器
- 微程序控制器的设计思路
- 微程序控制器的基本结构
- 微程序控制器的工作原理
- 微指令的设计
- 微指令的格式
- 微指令的编码方式
- 微指令的地址形成方式
- 硬布线与微程序的比较
- 异常和中断机制
- 异常和中断的基本概念
- 异常和中断的响应时机
- 异常和中断的分类
- 异常的分类
- 故障
- 自陷
- 终止
- 中断的分类
- 可屏蔽中断
- 不可屏蔽中断
- 指令流水线
- 指令流水线基本概念
- 指令流水定义
- 流水线的表示方法
- 指令流水线性能指标
- 吞吐率
- 加速比
- 效率
- 机器周期的设置
- 结构相关(资源冲突、结构冒险)
- 数据相关(数据冲突、数据冒险)
- 控制相关(控制冲突、控制冒险)
- 指令流水线的分类
- 部件功能级、处理机级和处理机间级流水线
- 单功能流水线和多功能流水线
- 动态流水线和静态流水线
- 线性流水和非线性流水
- 流水线的多发技术
- 五段式指令流水线
- 运算类指令
- LOAD指令执行过程
- STORE指令的执行过程
- 条件转移指令执行过程
- 无条件转移指令执行过程
- 多处理器的基本概念
- 多处理器的基本概念
- SISD
- SIMD
- MIMD
- 共享存储多处理器系统(SMP)
- 多计算机系统
- 向量处理器
- 硬件多线程
- 细粒度多线程
- 粗粒度多线程
- 同时多线程
- 多核处理器的基本概念
- 共享内存多处理器基本概念
注:内容参考王道2024考研复习指导
CPU的功能和基本结构
CPU的功能
- 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制。产生完成一条指令所需的操作信号,把各种操作信号送到相应的部件,从而控制这些部件按指令的要求正确执行。
- 时间控制。严格控制各种操作信号的出现时间、持续时间以及出现的时间顺序。
- 数据加工。对数据进行算术运算和逻辑运算。
- 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
运算器和控制器的功能
- 取指令:自动形成指令地址,自动发出取指令的命令。
- 分析指令:操作码译码(分析本条指令要完成什么操作),产生操作数的有效地址。
- 执行指令:根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O
设备完成相应的操作。 - 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。
运算器的基本结构
专用数据通路方式
根据指令执行过程中的数据和地址的流动方向安排连接线路。性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
如果直接用导线连接,相当于多个寄存器同时并且一直向ALU传输数据。
解决方法1:使用多路选择器根据控制信号选择一路输出
解决方法2:使用三态门可以控制每一路是否输出,如:R0out为1时R中的数据输出到A端,R0out为0时R中的数据无法输出到A端。
CPU内部单总线方式
将所有寄存器的输入端和输出端都连接到一条公共的通路上。结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。
运算器的基本结构
- 算术逻辑单元:主要功能是进行算术/逻辑运算。
- 通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
- 暂存寄存器:用于暂存从主存读来的数据,这个数据不能存放在通用寄存器中,否则会破坏其原有内容。
- 累加寄存器(ACC):它是一个通用寄存器,用于暂时存放ALU运算的结果信息,用于实现加法运算。
- 程序状态字寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
- 移位器:对运算结果进行移位运算。
- 计数器:控制乘除运算的操作步数。
控制器的基本结构
- 程序计数器:用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因程序中指令(通常)是顺序执行的,所以PC有自增功能。
- 指令寄存器:用于保存当前正在执行的那条指令。
- 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。
- 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
- 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
- 存储器地址寄存器:用于存放所要访问的主存单元的地址。
- 存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息。
CPU的基本结构
用户可见的寄存器:通用寄存器组、程序状态字寄存器PSW、程序计数器PC。
用户不可见的寄存器:MAR、MDR、IR、暂存寄存器。
指令执行过程
指令周期
指令周期,CPU从主存中每取出并执行一条指令所需的全部时间。指令周期通常用若干机器周期表示,机器周期又叫CPU周期。
一个指令周期由若干个总线周期组成,而一个总线周期时间又包含有若干个时钟周期。
一个机器周期又包含若干时钟周期(也称节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。
存取周期是指存储器进行两次独立的存储操作所需的最小时间间隔。
定长机器周期与不定长机器周期
每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等。
指令周期流程
四个工作周期都有CPU访存操作,只是访存的目的不同。取值周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点。
当CPU执行指令时,首先进入取指周期,从PC指出的主存单元中取出指令,送至指令寄存器,同时PC加“1”以作为下一条指令的地址。当遇到转移指令等改变执行顺序的指令时,在PC加“1”后会重新计算并更新PC值。然后判断是否有间接寻址,如果有,那么进入间址
周期以获取操作数的有效地址。之后进入执行周期,完成取操作数、执行运算和存操作数的任务。执行周期结束后,如果CPU检测到中断请求,则进入中断周期,此时需要关中断、保存断点、修改PC值为中断服务程序的入口地址,并转向中断服务程序。
指令周期的数据流
取指周期
- 当前指令地址送至地址寄存器,
(pc)->MAR
- CU发出控制信号,经控制总线传到主存,读信号(读指令),
1->R
- 将MAR所指主存中的内容经数据总线送入MDR,
M(MAR)->MDR
- 将MDR中的内容(此时为指令)送入IR,
(MDR)->IR
- CU发出控制信号,形成下一条指令地址,
(PC)+1->PC
间址周期
-
将指令的地址码送入MAR,
Ad(IR)->MAR or Ad(MDR)->MAR
-
CU发出控制信号,启动主存做读操作,
1->R
-
将MAR所指主存中的内容经数据总线送入MDR,
M(MAR)->MDR
-
将有效地址送至指令的地址码字段,
(MDR)->Ad(IR)
(此步可不操作,属于部分类型的CPU)
执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
中断周期
中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP表示
栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。
- CU控制将SP减1,修改后的地址送入MAR,
(SP)-1->SP,(SP)->MAR
。本质上是将断点存入某个存储单元,假设其地址为a,故可记为a->MAR
- CU发出控制信号,启动主存做写操作,
1->W
- 将断点(PC内容) 送入MDR,
(PC)->MDR
- CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,
向量地址->PC
指令的执行方案
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
-
方案1:单指令周期。
对所有指令都选用相同的执行时间(一个时钟周期)来完成。指令之间串行执行,指令周期取决于执行时间最长的指令的执行时间。
对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
注:单周期处理器在指令执行过程中控制信号不会发生变化,这是因为每条指令只有一个时钟周期,而在一个时钟周期内,控制信号不会发生变化。
-
方案2:多指令周期。
对不同类型的指令选用不同的执行步骤来完成。指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程。
需要更复杂的硬件设计。
-
方案3:流水线方案。
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
指令之间并行执行。
数据通路的功能和基本结构
数据通路:数据在功能部件之间传送的路径,包括数据通路上流经的部件,如程序计数器、ALU、通用寄存器、状态寄存器、异常和中断处理逻辑等。不包括控制部件。
数据通路的基本结构:
- CPU内部单总线方式
- CPU内部多总线方式
- 专用数据通路方式
总线
总线,英文叫作“BUS”,是连接多个部件的信息传输线,是各部件共享的传输介质。
内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线。
系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线。
注:总线上信号流动的原则是每个时刻只有一个器件发出信息,每个时刻有一个或多个器件接收信息。
数据通路的组成
组合逻辑元件(操作元件)
任何时刻产生的输出仅取决于当前的输入。组合电路不含存储信号的记忆单元,也不受时钟信号的控制,输出与输入之间无反馈通路,信号是单向传输的。数据通路中常用的组合逻辑元件有加法器、算术逻辑单元(ALU)、译码器、多路选择器、三态门等。
时序逻辑元件(状态元件)
任何时刻的输出不仅与该时刻的输入有关,还与该时刻以前的输入有关,因而时序电路必然包含存储信号的记忆单元。此外,时序电路必须在时钟节拍下工作。各类寄存器和存储器,如通用寄存器组、程序计数器、状态/移位/暂存/锁存寄存器等,都属于时序逻辑元件。
CPU内部单总线方式
- 寄存器之间数据传送
把PC内容传送至MAR,实现传送的控制信号为,(PC)->Bus,Bus->MAR
,PCout有效,PC内容送总线,MARin有效,总线内容送MAR。
- 主存与CPU之间的数据传送
CPU从主存读取指令,实现传送操作的流程及控制信号为,(PC)->Bus-MAR,1-R,MEM(MAR)->MDR,MDR->Bus-IR
,PCout和MARin有效,现行指令地址送MAR,CU发出读命令(控制总线发出),MDRin有效,MDRout和IRin有效,现行指令送IR。
- 执行算数或逻辑运算
一条加法指令,微操作序列及控制信号为,Ad(IR)->Bus->MAR,1->R,MEM(MAR)->数据线->MDR,MDR->Bus->Y,(ACC)+(Y)->Z,Z->ACC
,MDRout和MARin有效,CU发读命令,MDRin有效, MDRout和Yin有效,操作数送至Y,ACCout和ALUin有效,CU向ALU发送加命令,Zout和ACCin有效,结果送至ACC。
例题
- 分析指令功能和指令周期
功能:((R0))+(R1)→(R0),指令周期:取指周期、间址周期、执行周期。
- 写出各阶段的指令流程
CPU内部多总线方式
CPU内部有两条或更多的总线时,构成双总线结构或多总线结构。将所有寄存器的输入端和输出端都连接到多条公共通路上,相比之下单总线中一个时钟内只允许传送一个数据,因而指令执行效率很低,因此采用多总线方式,同时在多个总线上传送不同的数据,提高效率。
专用数据通路方式
例题
下图是一个简化了的CPU与主存连接结构示意图(图中省略了所有的多路选择器)。其中有一个累加寄存器(ACC)、一个状态数据寄存器和其他4个寄存器:主存地址寄存器(MAR)、主存数据寄存器(MDR)、程序寄存器(PC)和指令寄存器(IR),各部件及其之间的连线表示数据通路,箭头表示信息传递方向。
(2)简述图中取指令的数据通路。
(PC) → MAR,M(MAR) → MDR,(MDR) → IR
(3)简述数据在运算器和主存之间进行存/取访问的数据通路。
存/取的数据放到ACC中,设数据地址已放入MAR
取:M(MAR) → MDR,(MDR) → ALU → ACC
存:(ACC) → MDR,(MDR) → M(MAR)
控制器的功能和工作原理
硬布线控制器
硬布线控制器由复杂的组合逻辑门电路和触发器构成,也称组合逻辑控制器,其原理是根据指令的要求、当前的时序及内外部的状态,按时间的顺序发送一系列微操作控制信号。
根据指令操作码、目前的机器周期和节拍信号、机器状态条件,即可确定现在这个节拍下应该发出哪些“微命令”。其中,前两者是主要因素。
一个节拍内可以并行完成多个“相容的”微操作。同一个微操作可能在不同指令的不同阶段被使用。
不同指令的执行周期所需节拍数各不相同。为了简化设计,选择定长的机器周期,以可能出现的最大节拍数为准(通常以访存所需节拍数作为参考)。
若实际所需节拍数较少,可将微操作安排在机器周期末尾几个节拍上进行。
微程序控制器
微程序控制器的设计思路
采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中。
程序,由指令序列组成。微程序,由微指令序列组成,每一种指令对应一个微程序。
指令是对程序执行步骤的描述。微指令是对指令执行步骤的描述。
指令是对微指令功能的“封装”。微命令与微操作一一对应,微指令中可能包含多个微命令。
也即,每条机器指令对于一个微程序,每个微程序包含若干个微指令,每条微指令对应一个或多个微操作命令。
微指令是若干微命令的集合,一条微指令通常至少包含两大部分信息:
- 操作控制字段,也称微操作码字段,用于产生某一步操作所需的各种操作控制信号。
- 顺序控制字段,也称微地址码字段,用于控制产生下一条要执行的微指令地址。
微周期是指从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期。
微程序控制器的基本结构
- 起始和转移地址形成部件(或简称微地址形成部件)。用于产生初始和后继微地址,以保证微指令的连续执行。
- 微指令地址寄存器。接收微地址形成部件送来的微地址,为读取微指令做准备。
- 控制存储器。它是微程序控制器的核心部件,用于存放各指令对应的微程序。
- 微指令寄存器。其位数等于微指令字长。
程序 | 微程序 |
---|---|
主存储器用于存放程序和数据,在CPU外部,用RAM实现 | 控制存储器(CM)用于存放微程序,在CPU内部,用ROM实现。存放微指令的控制存储器的单元地址称为微地址。 |
地址寄存器(MAR),用于存放主存的读/写地址。 | 微指令地址寄存器(uPC或CMAR),用于存放待执行的微指令在控制存储器中的微地址。 |
指令寄存器(IR),用于存放从主存中读出的指令。 | 微指令寄存器(uIR或CMDR),用于存放从控制存储器中读出的微指令 |
微程序控制器的工作原理
取址周期微程序,通常是公用的,故如果某指令系统中有n条机器指令,则CM中微程序的个数至少是n+1个。
一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序段。
实际上就是在微程序控制器的控制下计算机执行机器指令的过程,这个过程可描述为:
- 执行取指令公共操作。在机器开始运行时,自动地将取指微程序的入口地址送入uPC(由机器指令的操作码字段指出各个微程序的入口地址),并从CM中读出相应的微指令并送入uR。取指微程序的入口地址一般为CM的0号单元,取指微程序执行完成后,从主存中取出的机器指令就已存入指令寄存器中。
- 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入μPC。
- 从CM中逐条取出对应的微指令并执行。
- 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第1步,以完成取下一条机器指令的公共操作。
微指令的设计
微指令的格式
相容性微命令:可以并行完成的微命令。互斥性微命令:不允许并行完成的微命令。
- 水平型微指令
一条微指令能定义多个可并行的微命令。
优点:微程序短,执行速度快;缺点:微指令长,编写微程序较麻烦。
- 垂直型微指令
一条微指令只能定义一个微命令,由微操作码字段规定具体功能。
优点:微指令短、简单、规整,便于编写微程序;缺点:微程序长,执行速度慢,工作效率低。
- 混合型微指令
在垂直型的基础上增加一些不太复杂的并行操作。微指令较短,仍便于编写;微程序也不长,执行速度加快。
微指令的编码方式
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
- 直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令,某位为“1”表示该控制信号有效。
优点:简单、直观,执行速度快,操作并行性好。
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大。
- 字段直接编码方式
将微指令的控制字段分成若干“段”,每段经译码后发出控制信号。
微命令字段分段的原则:
- 互斥性微命令分在同一段内,相容性微命令分在不同段内。
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。
优点:可以缩短微指令字长。
缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
例:某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7、3、12、5和6个微命令,则操作控制字段至少有多少位?
答:第1个互斥类有7个微命令,要留出1个状态表示不操作,所以需要表示8种不同的状态,故需要3个二进制位。以此类推,后面4个互斥类各需要表示4、13、6、7种不同的状态,分别对应2、4、3、3个二进制位。故操作控制字段的总位数为3+2+4+3+3 = 15 位。
Tips:若采用直接编码方式,则控制字段需要33位。
- 字段间接编码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。
优点:可进一步缩短微指令字长。
缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。
微指令的地址形成方式
- 微指令的下地址字段指出
微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。
- 根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。
-
增量计数器法,
( CMAR ) + 1>CMAR
-
分支转移,转移方式:指明判别条件;转移地址:指明转移成功后的去向。
-
通过测试网络
-
由硬件产生微程序入口地址
第一条微指令地址由专门硬件产生(用专门的硬件记录取指周期微程序首地址)。
中断周期由硬件产生中断周期微程序首地址(用专门的硬件记录)。
例:某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是多少位?
答:总共需要存储32×4+2=130条微指令,标注出130个不同的位置至少需要256个二进制位,下地址字段的位数至少是8位。
硬布线与微程序的比较
异常和中断机制
异常和中断的基本概念
由CPU内部产生的意外事件被称为异常,也称内中断。
由来自CPU外部的设备向CPU发出的中断请求被称为中断,通常用于信息的输入和输出,也称外中断。
异常是CPU执行一条指令时,由CPU在其内部检测到的、与正在执行的指令相关的同步事件;中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件。
注:Cache完全由硬件实现,不会涉及中断层面。
异常和中断的响应时机
异常和中断处理过程的描述如下:若CPU在执行用户程序的第i条指令时检测到一个异常事件,或者执行第i条指令后发现一个中断请求信号,则CPU打断当前程序,然后转去执行相应的异常或中断处理程序。
若异常或中断处理程序能够解决相应的问题,则在异常或中断处理程序的最后,CPU通过执行异常或中断返回指令,回到被打断的用户程序的第i条指令或第i+1条指令继续执行。
若异常或中断处理程序发现是不可恢复的致命错误,则终止用
户程序。通常情况下,对异常和中断的具体处理过程由操作系统(和驱动程序)完成。
异常和中断的分类
异常的分类
异常是由CPU内部产生的意外事件,分为硬故障中断和程序性异常。
硬故障中断是由硬连线出现异常引起的,如存储器校验错、总线错误等。
程序性异常也称软件中断,是指在CPU内部因执行指令而引起的异常事件。如整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。
按异常发生原因和返回方式的不同,可分为故障、自陷和终止。
故障
指在引起故障的指令启动后、执行结束前被检测到的异常事件。
例如,指令译码时,出现“非法操作码”;取数据时,发生“缺段”或“缺页”;执行整数除法指令时,发现“除数为0”等。
对于“缺段”“缺页”等异常事件,经处理后,可将所需的段或页面从磁盘调入主存,回到发生故障的指令继续执行,断点为当前发生故障的指令。
对于“非法操作码”“除数为0”等,因为无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行。
自陷
自陷也称陷阱或陷入,它是预先安排的一种“异常”事件,就像预先设定的“陷阱”一样。
事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个“陷阱”,当执行到被设置了“陷阱”的指令时,无条件或有条件地自动调出操作系统内核程序进行执行,CPU在执行完自陷指令后,自动根据不同“陷阱”类型进行相应的处理,然后返回到自陷指令的下一条指令执行。
注:当自陷指令是转移指令时,并不是返回到下一条指令执行,而是返回到转移目标指令执行。
故障异常和自陷异常属于程序性异常(软件中断)。
终止
如果在执行指令的过程中发生了使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误等,那么程序将无法继续执行,只能终止,此时,调出异常服务程序来重启系统。
终止异常和外中断属于硬件中断。
中断的分类
中断是指来自CPU外部、与CPU执行指令无关的事件引起的中断,包括I/O设备发出的I/O中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按Esc键、定时器计数时间到)等。
可屏蔽中断
指通过可屏蔽中断请求线INTR向CPU发出的中断请求。CPU可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或不屏蔽它,被屏蔽的中断请求将不被送到CPU。
不可屏蔽中断
指通过专门的不可屏蔽中断请求线NMI向CPU发出的中断请求,通常是非常紧急的硬件故障,如电源掉电等。这类中断请求信号不可被屏蔽,以让CPU快速处理这类紧急事件。
中断和异常在本质上是一样的,但它们之间有以下两个重要的不同点:
1)“缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
2)异常的检测由CPU自身完成,不必通过外部的某个信号通知CPU。对于中断,CPU必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。
指令流水线
指令流水线基本概念
指令流水定义
一条指令的执行过程可以分为多个阶段(或过程),每个阶段用的硬件不一样,根据计算机的不同,具体的分法也不同。
取指:根据PC内容访问主存储器,取出一条指令送到IR中。
分析:对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址中取出操作数。
执行:根据操作码字段,完成指令规定的功能,把运算结果写到寄存器或主存中。
设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
- 顺序执行方式
传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。
优点:控制简单,硬件代价小。
缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。
总耗时 T = n × 3 t = 3 n t T=n \times 3t=3nt T=n×3t=3nt
- 一次重叠执行方式
优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。
总耗时 T = 3 t + ( n − 1 ) × 2 t = ( 1 + 2 n ) t T=3t +(n-1)\times 2t=(1+2n)t T=3t+(n−1)×2t=(1+2n)t
- 二次重叠方式
与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。
总耗时 T = 3 t + ( n − 1 ) × t = ( 2 + n ) t T=3t + (n-1)\times t=(2+n)t T=3t+(n−1)×t=(2+n)t
流水线的表示方法
把 k + 1 k+1 k+1条指令的取指阶段提前到第 k k k条指令的译码阶段,从而将第 k + 1 k+1 k+1条指令的译码阶段与第 k k k条指令的执行阶段同时进行。‘
- 指令执行过程图
主要用于分析指令执行过程以及影响流水线的因素。
- 时空图
主要用于分析流水线的性能。
指令流水线性能指标
吞吐率
吞吐率是指在单位时间内流水线所完成的任务数量,或是输出结果的数量。
设任务数为 n n n,处理完成 n n n个任务所用的时间为 T k T_k Tk则计算流水线吞吐率( T P TP TP)的最基本的公式为 T P = n T k TP=\frac{n}{T_k} TP=Tkn
其中 T k = ( k + n − 1 ) Δ t T_k=(k+n-1)\Delta t Tk=(k+n−1)Δt,流水线实际吞吐率为 T P = n ( k + n − 1 ) Δ t TP=\frac{n}{(k+n-1)\Delta t} TP=(k+n−1)Δtn
加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比。
设 T 0 T_0 T0表示不使用流水线时的执行时间,即顺序执行所用的时间; T k T_k Tk表示使用流水线时的执行时间则计算流水线加速比( S S S)的基本公式为 S = T 0 T k S=\frac{T_0}{T_k} S=TkT0
单独完成一个任务耗时为 k Δ t k \Delta t kΔt,则顺序完成 n n n个任务耗时 T 0 = n k Δ t T_0=nk \Delta t T0=nkΔt, T k = ( k + n − 1 ) Δ t T_k=(k+n-1)\Delta t Tk=(k+n−1)Δt
实际加速比为 S = k n k + n − 1 S=\frac{kn}{k+n-1} S=k+n−1kn
效率
流水线的设备利用率称为流水线的效率。
在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所有的时间与k个流水段所围成的时空区总面积之比。
则流水线效率( E E E)的一般公式为 E = n 个任务占用 k 时空区有效面积 n 个任务所用的时间与 k 个流水段所围成的时空区总面积 = T 0 k T k E=\frac{n个任务占用k时空区有效面积}{n个任务所用的时间与k个流水段所围成的时空区总面积}=\frac{T_0}{kT_k} E=n个任务所用的时间与k个流水段所围成的时空区总面积n个任务占用k时空区有效面积=kTkT0
##指令流水线影响因素
机器周期的设置
为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准,即此处应将机器周期设置为100ns。
流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
结构相关(资源冲突、结构冒险)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
解决办法:
- 千亿指令访存时,后一条相关指令(及其后续指令)暂停一个周期
- 一个部件每条指令只能使用一次,且只能在特定阶段使用
- 资源重复配置,设置多个独立的部件:数据存储器+指令存储器
数据相关(数据冲突、数据冒险)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
解决办法:
- 延迟执行相关指令。把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
- 数据旁路技术。不等前一条指令把计算结果写回寄存器,下一条指令也不从寄存器读,而将数据通路中生成的中间数据直接转发到ALU的输入端。
- 编译优化,通过编译器调整指令顺序来解决数据相关。如果load指令与其后紧邻的运算类指令存在数据相关问题,无法通过转发技术解决,称之为load-use数据冒险。
控制相关(控制冲突、控制冒险)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
注:指令在MEM阶段确定是否将PC的值更新为转移的目的地址。
解决办法:
- 转移指令分支预测。简单预测(永远猜ture或false)、动态预测(根据历史情况动态调整)
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
指令流水线的分类
部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
单功能流水线指只能实现一种固定的专门功能的流水线;
多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
线性流水和非线性流水
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
流水线的多发技术
超标量技术
每个时钟周期内可并发多条独立指令,不能调整指令的执行顺序,要配置多个功能部件,通过编译优化技术,把可并行执行的指令搭配起来。
超流水技术
在一个时钟周期内再分段(3 段),不能调整指令的执行顺序,在一个时钟周期内一个功能部件使用多次(3 次),靠编译程序解决优化问题。
注:超流水线CPU在流水线充满后,每个时钟周期还是执行一条指令,CPI=1,但其主频更高,多发射流水线CPU每个时钟周期可以处理多条指令,CPI<1,但其成本更高、控制更复杂。
超长指令字
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条,具有多个操作码字段的超长指令字(可达几百位),采用多个处理部件。
五段式指令流水线
- IF取指
- ID译码&取数
- EX执行
- M访存
- WB写回寄存器
运算类指令
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:取出操作数至ID段锁存器
EX:运算,将结果存入EX段锁存器
M:空段
WB:将运算结果写回指定寄存器
LOAD指令执行过程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm
EX:运算,得到有效地址
M:从数据Cache中取数并放入锁存器
WB:将取出的数写回寄存器
注:通常,RISC处理器只有“取数LOAD”和“存数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:空段
无条件转移指令执行过程
IF:根据PC从指令Cache取指令至IF段的锁存器
ID:偏移量放入Imm
EX:将目标PC值写回PC
M:空段
WB:空段
多处理器的基本概念
多处理器的基本概念
SISD
SISD单指令数据流。
课程一直在学的就是SISD,每条指令可以处理一两个数据。
这种计算机通常仅包含一个处理器和一个存储器,处理器在一段时间内仅执行一条指令,按指令流规定的顺序串行执行指令流中的若干指令。
为了提高速度,有些SISD计算机采用流水线的方式,因此,SISD处理器有时会设置多个功能部件,并且采用多模块交叉方式组织存储器。
SIMD
SIMD单指令流多数据流。
SIMD是指一个指令流同时对多个数据流进行处理,一般称为数据级并行技术。
这种结构的计算机通常由一个指令控制部件、多个处理单元组成。
SIMD在使用for循环处理数组时最有效,比如,一条分别对16对数据进行运算的SIMD指令如果在16个ALU中同时运算,则只需要一次运算时间就能完成运算。SIMD在使用case或switch语句时效率最低,此时每个执行单元必须根据不同的数据执行不同的操作。
MIMD
共享存储多处理器系统(SMP)
多计算机系统
注:SIMD和MIMD是两种并行计算模式,其中SIMD是一种数据级并行模式,而MIMD是一种并行程度更高的线程级并行或线程级以上并行计算模式。
向量处理器
向量处理机的LOAD指令,可以将一个向量取到向量寄存器中;加法指令,可以实现两个向量相加。
应用于:向量计算、大量浮点数计算,空气动力学、核物理学、巨型矩阵计算问题。
注:向量处理器是SIMD的变体,是一种实现了直接操作一维数组(向量)指令集的CPU,而串行处理器只能处理单一数据集。其基本理念是将从存储器中收集的一组数据按顺序放到一组向量寄存器中,然后以流水化的方式对它们依次操作,最后将结果写回寄存器。向量处理器在特定工作环境中极大地提升了性能,尤其是在数值模拟或者相似的领域中。
硬件多线程
细粒度多线程
多个线程之间轮流交叉执行指令,多个线程之间的指令是不相关的,可以乱序并行执行。
在这种方式下,处理器能在每个时钟周期切换线程。例如,在时钟周期i,将线程A中的多条指令发射执行;在时钟周期i+1,将线程B中的多条指令发射执行。
粗粒度多线程
连续几个时钟周期都执行同一线程的指令序列,仅在当前线程出现了较大开销的阻塞时,才切换线程,如Cache缺失。在这种方式下,当发生流水线阻塞时,必须清除被阻塞的流水线,新线程的指令开始执行前需要重载流水线,因此,线程切换的开销比细粒度多线程更大。
上述两种多线程技术都实现了指令级并行,但线程级不并行。
同时多线程
同时多线程(SMT)是上述两种多线程技术的变体。它在实现指令级并行的同时,实现线程级并行,也就是说,它在同一个时钟周期中,发射多个不同线程中的多条指令执行。
注:Intel处理器中的超线程(Hyper-threading)就是同时多线程SMT,即在一个单处理器或单个核中设置了两套线程状态部件,共享高速缓存和功能部件。
多核处理器的基本概念
多核处理器是指将多个处理单元集成到单个CPU中,每个处理单元称为一个核(core),通常也称片上多处理器。每个核既可以有自己的Cache,又可以共享同一个Cache,所有核通常共享主存储器。图下是一个不共享Cache的双核CPU结构。
在多核计算机系统中,如要充分发挥硬件的性能,必须采用多线程(或多进程)执行,使得每个核在同一时刻都有线程在执行。与单核上的多线程不同,多核上的多个线程是在物理上并行执行的,是真正意义上的并行执行,在同一时刻有多个线程在并行执行。而单核上的多线程是一种多线程交错执行,实际上在同一时刻只有一个线程在执行。
共享内存多处理器基本概念
这篇关于408计算机组成原理知识点——第五章 中央处理器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!