第七章CPU结构和功能
一、CPU结构
1.1CPU中的功能
(1)控制器的功能
-
在程序执行过程中,计算机自动完成取指令、执行指令等任务,完成这些工作为控制器。控制器负责协调并控制计算机各部件执行过程的指令序列,基本功能有:取指令、分析指令、执行指令。
-
控制器功能有:指令控制、操作控制、时间控制、处理中断
①取指令:控制器需具备能够自动从存储器中取指令的功能
②分析指令:分析指令要完成什么操作、分析这次操作的操作数地址
③执行指令:发出各种操作命令
④控制程序输入及结果的输出
⑤总线管理
⑥处理异常情况和特殊情况
(2)运算器功能:实现算术运算和逻辑运算,即数据加工。
1.2CPU结构框图
1.3CPU的寄存器
(1)用户可见寄存器进行分类
- 用户可见:在编写程序时,可以利用或者读到寄存器里的值。
①通用寄存器:可以用来存放操作数;也可作某种寻址方式所需的专用寄存器
②数据寄存器:用来存放操作数(满足各种数据类型);两个寄存器拼接存放双倍字长数据
③地址寄存器:存放地址,位数满足最大的地址范围;用于特殊的寻址方式:段基值,栈指针。
④条件码寄存器:存放条件码,可用作程序分支的依据,如正、负、零、溢出、进位等
(2)控制和状态寄存器进行分类
①控制寄存器
计算机取指令:PC→MAR→M(主存)→MDR→IR
其中涉及到的控制寄存器为:PC、MAR、MDR、IR,都是用来控制CPU操作的。
其中PC为用户可见,MAR、MDR、IR为用户不可见。
②状态寄存器:反映了指令执行结果情况或者软件硬件结果标志
其中有:状态寄存器,用来存放条件码
PSW寄存器,用来存放程序状态字
1.4控制单元CU
-
CU:用来产生全部指令的微操作命令序列
-
CU设计方法:
①硬连线逻辑:组合逻辑设计,如RISC
②存储逻辑:微程序设计,如CISC
二、指令周期
1.指令周期
(1)
- 指令周期:取出并执行一条指令所需的全部时间
- 完成一条指令:①取指周期——取指令、分析指令②执行周期——执行指令
(2)具有间接寻址的指令周期
- 在遇到间接寻址得到指令时,指令字给出的是操作数有效地址,为了取出操作数,需要先访问存储器取出有效地址,再访问存储器取出操作数。这样指令周期就变成三个阶段:取值周期、间址周期、执行周期
(3)带有中断周期的指令周期
- CPU采用中断方式实现主机与I/O设备交换信息时,CPU在每条指令执行结束前需要发中断查询信号,以检测是否有某个I/O设备提出的中断请求。当有请求时候,CPU就要进入中断响应阶段,又称中断周期。
(4)指令周期流程
(5)CPU工作周期的标志
CPU访存有四种性质:
①取指令——取指周期
②取地址——间址周期
③存取操作数或结果——执行周期
④存程序断点——中断周期
2.指令周期数据流
(1)取指周期数据流
数据流程:
①PC中存放的现行指令地址送入MAR,并送入地址总线传到存储器:PC→MAR
②由CU向存储器发出命令,使对应的MAR所指单元内容经数据总线送至MDR,再送至IR:CU→MAR→存储器→MDR→IR
③CU控制PC内容加1操作形成下一条指令地址:CU→PC
(2)间址周期数据流
数据流程:
①取指周期结束后,CU检查IR中的内容是否需要间址,若需要,则CU通过控制总线,将MDR的形式地址送入MAR:CU→MDR→MAR
②MAR地址送入地址总线传到存储器,CU向存储器发出命令获取有效地址送到MDR:CU→MAR→存储器→MDR
(3)执行周期数据流:不同指令的执行周期数据流不同
(4)中断周期数据流
数据流程:
①由CU确定保存地址,放入MAR,MAR将地址送入地址总线传到存储器:CU→MAR→存储器
②由CU通过控制总线向存储器发出写命令,且将PC的内容送到MDR:CU→存储器;PC→MDR
③MDR通过数据总线将内容送入存储器:MDR→存储器
④CU还需要将中断服务程序入口送到PC:CU→PC
三、指令流水
3.1如何提高机器速度
(1)提高访存速度:使用高速芯片、采用Cache分级存储、采用多体并行
(2)提高I/O与主机之间传送速度:采用中断方式、DMA方式、采用多总线结构
(3)提高运算器速度:使用高速芯片、改进算法、快速进位链
(4)提高整机处理能力:采用高速部件、改进系统结构开发系统并行性
3.2系统的并行
- 并行包括:①并发②并行
①并发:两个或多个事件在同一时间内间断发生。
②并行:两个活多个事件在同一时间同时发生。
-
并行等级:
①过程级(程序、进程):软件实现
②指令级(指令之间、指令内部):硬件实现
3.3指令流水原理
(1)指令的二级流水
- 若指令周期:取指令和执行指令两个阶段,在取完第一条指令,进行第一条指令的执行同时进去取第二条指令。
- 采用指令流水能够加速指令执行
(2)影响指令流水效率加倍的因素
①执行时间>取指时间:取指时间一般是小于执行时间的,所以存放在指令部件缓冲区的指令不能立即传给执行部件,缓冲区不能空出导致取指令阶段需要等待。
②条件转移指令:如果遇到条件转移指令,需要等待上条指令执行结束后才能确定下条指令的地址,所以必须等待执行阶段结束后才能取指令。
(3)指令的六级流水
假设:完成一条指令需要6个步骤,并且每个步骤占1个时间单位。执行9条指令时间
使用串行执行:6×9=54个时间单位
使用流水线执行:(9-1)+6=14个时间单位
3.4流水线冒险和处理
- 影响指令流水线性能因素有:结构相关、数据相关、控制相关。
- 以上三个相关可能会导致流水线无法正确执行后续指令引起流水线阻塞或停顿,所以也称为流水线冒险:结构冒险(资源冲突)、数据冒险(数据冲突)、控制冒险(控制冲突)
(1)结构冒险
-
当不同指令争用同一个功能部件产生资源冲突时,称为资源冲突。也就是硬件资源竞争造成的冲突。
-
解决办法:
①停顿:前一指令访存时,后一条相关指令暂停一个周期。
②指令存储器和数据存储器分开,使得取数和取指在不同存储器进行。
③采用指令预取技术(适用于访存周期短的情况)
(2)数据冒险
- 不同指令因重叠操作,可能改变操作数的读/写访问顺序。即下一条指令需要用到当前指令计算的结果,此时这两条指令发生数据冲突。
①写后读相关(RAW):表示当前指令数据写入寄存器后,下一条指令才能从该寄存器取数据。如果先读后写回导致读到的错误数据。
【例】①R2-R3结果存入R1②然后R5+R1结果存入R4
如果先运算②,会导致R1的结果不是R2-R3
②读后写相关(WAR):表示当前指令读出数据后,下一条指令才能写该寄存器。如果先写后读导致读到错误数据。
【例】①要把R2的内容存入存储单元②然后R4+R5的运算后要存入R2。
如果先运算②,会导致R2存入存储单元的内容是②结果
③写后写相关(WAW):表示当前指令写入寄存器后,下一条指令才能写该寄存器。如果颠倒使得寄存器值不是最新值。
【例】①要计算R2×R1存入R3②要将R4-R5存入R3。
如果先运算②会导致最终R3所存的是①的结果
- 解决数据冒险的办法:
①后推法:将数据相关的指令暂停若干个周期,直到数据相关问题消失再继续执行,分为硬件阻塞和软件插入"NOP"指令两种方法
②采用数据旁路: 直接把前一条指令的ALU计算结果作为自己的输入数据开始计算过程,使得本来要暂停的操作继续执行。
③优化:通过编译器对数据相关指令编译优化
(3)控制冒险
-
由于执行转移、调用或返回等指令,会改变PC的值,引起控制冒险。
-
解决控制冒险的方法:
①对转移指令进行分支预测,尽早生成转移目标地址。
②加快和提前形成条件码
③预取转移成功和不成功两个控制流方向上的目标指令
④提高转移方向的猜准率。
3.5流水线多发技术
(1)超标量流水线技术
- 超标量流水线技术:也称动态多发射技术,每个时钟周期内可并发多条独立指令,配置多个功能部件。
这种方法不能调整指令的执行顺序,因此可以通过编译优化技术,把可并行执行的指令搭配起来。
(2)超流水线技术
- 超流水线技术:在一个时钟周期内再分段,流水线功能段划分越多,时钟周期就越短,指令吞吐率就能提高。
这种方法不能调整指令的执行顺序,因此可以通过编译程序优化技术
(3)超长指令字技术
- 超长指令字技术:由编译程序挖掘指令间并行性,将多条能并行操作的指令合成一条具有多个操作码字段的超长指令字。
这种方法采用多个处理部件。
3.6流水线性能
(1)流水线吞吐率
-
吞吐率:单位时间内流水线所完成指令或输出结果的数量。
-
最大吞吐率:流水线在连续流动达到稳定状态所获得的吞吐率。
-
实际吞吐率:连续处理n条指令的实际吞吐率。
吞吐率 T = n T k ,其中 n 为指令条数, T k 为处理时间。 当 n → ∞ 时,达到最大吞吐率, T m a x = 1 △ t 若每条指令有 m 段得到流水线,且各段时间为△ t 。要连续处理 n 条指令。 则实际吞吐率 T p = n m × △ t + ( n − 1 ) × △ t 综上,实际吞吐率也可以用最大吞吐率计算 T p = T m a x × n m + ( n − 1 ) \\吞吐率T=\frac{n}{T_k},其中n为指令条数,T_k为处理时间。 \\当n→∞时,达到最大吞吐率,T_{ max}=\frac{1}{△t} \\若每条指令有m段得到流水线,且各段时间为△t。要连续处理n条指令。 \\则实际吞吐率T_p=\frac{n}{m×△t + (n-1)×△t} \\综上,实际吞吐率也可以用最大吞吐率计算T_p=\frac{T_{max} × n}{m + (n-1)} 吞吐率T=Tkn,其中n为指令条数,Tk为处理时间。当n→∞时,达到最大吞吐率,Tmax=△t1若每条指令有m段得到流水线,且各段时间为△t。要连续处理n条指令。则实际吞吐率Tp=m×△t+(n−1)×△tn综上,实际吞吐率也可以用最大吞吐率计算Tp=m+(n−1)Tmax×n
(2)加速比
- 加速比:完成同样一批任务,“不采用流水线”和“采用流水线”所需时间之比
设流水线各段时间为△ t ,若在 m 段流水线上完成 n 条指令,需要流水线时间 T p = m × △ t + ( n − 1 ) △ t 。 若完成 n 条指令在等效得到非流水线上,需要时间 T 0 = n × m × △ t 。 则加速比 S p = T 0 T p = n × m × △ t m × △ t + ( n − 1 ) △ t = n × m m + n − 1 设流水线各段时间为△t,若在m段流水线上完成n条指令,需要流水线时间T_p =m×△t+(n-1)△t。 \\若完成n条指令在等效得到非流水线上,需要时间T_0=n×m×△t。 \\则加速比S_p=\frac{T_0}{T_p}=\frac{n×m×△t}{m×△t+(n-1)△t}=\frac{n×m}{m+n-1} 设流水线各段时间为△t,若在m段流水线上完成n条指令,需要流水线时间Tp=m×△t+(n−1)△t。若完成n条指令在等效得到非流水线上,需要时间T0=n×m×△t。则加速比Sp=TpT0=m×△t+(n−1)△tn×m×△t=m+n−1n×m
(3)效率
- 流水线过程中有建立时间和排空时间,因此各个功能段总会有一段空闲时间。
- 效率:流水线中各功能段的利用率
效率 = 流水线各段处于工作时间的时空区 流水线中各段总的时空区 效率=\frac{流水线各段处于工作时间的时空区}{流水线中各段总的时空区} 效率=流水线中各段总的时空区流水线各段处于工作时间的时空区
四、异常和中断
4.1概述
- 引起中断的各种原因:
①人为设置的中断:如转管指令
②程序性事故:溢出、操作码不能识别、除法非法
③硬件故障
④I/O设备
⑤外部事件:用键盘中断现行程序
- 由CPU内部产生的意外事件称为异常,由CPU外部设备向CPU发出的中断请求称为中断
4.2异常与中断分类
1.异常
-
异常由CPU内部产生的意外事件,分为硬故障中断和程序性异常。
-
硬故障中断是由于硬连线出现异常引起的,如存储器校验错、总线错误
-
程序性异常,如整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。
-
异常按照发生原因和返回方式不同,分为故障、自陷和终止
(1)故障
-
引起故障指令启动后、执行结束前被检查到异常事件。
-
对于“缺页”,“缺段”等异常事件,经过处理后,需要回到发生故障的指令继续执行。
-
对于“非操作码”,"除数为0"等,无法通过异常处理程序恢复故障,无法回到原断点,必须终止进程执行。
(2)自陷
- 这是一种预先安排的“ 异常 ”事件,在程序中预先设定的一种特殊指令。
- 可用于实现程序调试时断点设置以及单步追踪。
(3)终止
- 如果执行指令过程中发生了使计算机无法继续执行的硬件故障,需要调出中断服务程序来重启系统。
2.中断
-
中断是指来自CPU外部、与CPU执行指令无关的事件引起的中断。
-
中断可分为可屏蔽中断、不可屏蔽中断
(1)可屏蔽中断
- 指通过可屏蔽中断请求线INTR向CPU发出的中断请求。
(2)不可屏蔽中断
- 指通过专门不可屏蔽中断请求线NMI向CPU发出中断请求。一般是非常紧急的硬件故障,如电源掉电。
4.3异常和中断响应过程
- CPU在执行指令时,发生了异常或中断请求必须进行相应处理。CPU对异常中断响应过程可分为:关中断、保存断点、识别异常和中断、转到相应处理程序。
(1)关中断
- 关中断:在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断
- 通过设置“中断允许”(IF)触发器来实现,若IF为1则为开中断,IF为0为关中断。
(2)保存断点
- 为了保证CPU处理完异常或中断后能够回到原来执行的程序,需要将断点进行保存。
(3)识别异常和中断
- 异常一般采用软件识别方式,中断可以采用软件也可以采用硬件。
六、多处理器基本概念
- 根据指令流(Instruct)和数据流(Data)的数量是单个(Single)还是多个(Many),可以将计算机分为SISD、SIMD、MISD、MIMD四类
1.单指令单数据流—SISD
- SISD是传统的串行计算机结构。包含了一个处理器和一个存储器。
- 处理器按照顺序串行执行若干条指令,为了提高速度有些SISD也采取了流水线方式,因此SISD处理器有时采用多个功能部件,以及采用多模块交叉方式组织存储器。
2.单指令多数据流—SIMD
- SIMD是指一个指令流同时对多个数据流进行处理,也就是数据级并行技术。
- 这种结构通常由一个指令控制部件和多个处理单元组成。
- SIMD在使用for循环处理数组时最有效,使用case或switch时效率最低。
3.多指令单数据流—MISD
- MISD指同时执行多条指令用来处理同一个数据。
- 这种只是一种概念性的处理器,实际上不存在这种处理器。
4.多指令流多数据流—MIMD
据指令流(Instruct)和数据流(Data)的数量是单个(Single)还是多个(Many),可以将计算机分为SISD、SIMD、MISD、MIMD四类
1.单指令单数据流—SISD
- SISD是传统的串行计算机结构。包含了一个处理器和一个存储器。
- 处理器按照顺序串行执行若干条指令,为了提高速度有些SISD也采取了流水线方式,因此SISD处理器有时采用多个功能部件,以及采用多模块交叉方式组织存储器。
2.单指令多数据流—SIMD
- SIMD是指一个指令流同时对多个数据流进行处理,也就是数据级并行技术。
- 这种结构通常由一个指令控制部件和多个处理单元组成。
- SIMD在使用for循环处理数组时最有效,使用case或switch时效率最低。
3.多指令单数据流—MISD
- MISD指同时执行多条指令用来处理同一个数据。
- 这种只是一种概念性的处理器,实际上不存在这种处理器。
4.多指令流多数据流—MIMD
- MIMD是指多条指令分别处理多个不同数据。
计算机组成原理——刘宏伟
参考文献:计算机组成原理第2版—唐朔飞