cpu有什么用处(计算机组成原理-CPU的结构和功能)

2024-10-15 09:16:11 家电

8.1 CPU的结构

在谈结构前我们先看CPU有哪些功能

8.1.1 CPU的功能

  1. 取指令

控制器必须具备能自动地从存储器中取出指令的功能


  1. 分析指令

分析指令包括两部分内容:其一,分析此指令要完成什么操作,即控制器需发出什么操作命令;其二,分析参与这次操作的操作数地址,即操作数的有效地址。


  1. 执行指令

执行指令就是根据分析指令产生的“操作命令”和“操作数地址”的要求,形成操作控制信号序列,通过对运算器、存储器以及I/O设备的操作,执行每条指令。

CPU必须具有控制程序的顺序执行(称指令控制)、产生完成每条指令的控制命令(称操作控制)、对各种操作加以时间上的控制(称时间控制)、对数据进行算术运算和逻辑运算(称数据加工)、处理中断等功能。


通过CPU的功能,我们来看需要实现这些功能CPU需要哪些结构

8.1.2 CPU的结构

8.1.3 CPU的寄存器

CPU中的寄存器大致可分为两类:

  • 用户可见寄存器,用户可对这类寄存器编程,以及通过优化使CPU因使用这类寄存器而减少对主存的访问次数;
  • 控制和状态寄存器,用户不可对这类寄存器编程,它们被控制部件使用,以控制CPU的操作,也可被带有特权的操作系统程序使用,从而控制程序的执行。


用户可见寄存器

  1. 通用寄存器

通用寄存器可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器。寄存器间接寻址时还可用通用寄存器存放有效地址的地址。


  1. 数据寄存器

数据寄存器用于存放操作数,其位数应满足多数数据类型的数值范围。


  1. 地址寄存器

地址寄存器用于存放地址,其本身可以具有通用性,也可用于特殊的寻址方式。


  1. 条件码寄存器

条件码是CPU根据运算结果由硬件设置的位。将条件码放到一个或多个寄存器中,就构成了条件码寄存器。


状态和控制寄存器

MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址。

MDR:存储器数据寄存器,用于存放欲存入存储器中的数据或最近从存储器中读出的数据。

PC:程序计数器,存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC的值可被修改。

IR:指令寄存器,存放当前欲执行的指令。

PSW:(Program State Word)程序状态字寄存器,存放条件码和其他状态信息。

在具有中断系统的机器中还有中断标记寄存器。


8.1.4 控制单元和中断系统

控制单元(CU)是提供完成计算机全部指令操作的微操作命令序列部件。

微操作命令序列的形成方法有两种:一种是组合逻辑设计方法,为硬连线逻辑;另一种是微程序设计方法,为存储逻辑

这里简单提一下,后文会详细介绍


8.2 指令周期

8.2.1 基本概念

CPU每取出并执行一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间。

取指阶段完成取指令和分析指令的操作,又称取指周期;执行阶段完成执行指令的操作,又称执行周期


由于各种指令操作功能不同,因此各种指令的指令周期是不相同的


具有间接寻址的指令周期 就包括 取指周期间址周期执行周期3个阶段,其中间址周期用于取操作数的有效地址,因此间址周期介于取指周期和执行周期之间。


带有中断周期的指令周期如果有请求,CPU则要进入中断响应阶段,又称中断周期。在此阶段,CPU必须将程序断点保存到存储器中。一个完整的指令周期应包括取值、间址、执行、中断4个子周期。

8.2.2 指令周期的流程

8.2.3 CPU工作期间的标志

  • 取指周期是为了取指令
  • 间址周期是为了取有效地址
  • 执行周期是为了取操作数
  • 中断周期是为了保存程序断点

这4个周期又可称为CPU的工作周期,为了区别它们在CPU内可设置4个标志触发器。

FE、IND、EX、INT分别对应取值、间址、执行、中断4个周期,并以“1”状态表示有效,它们分别由1→FE、1→IND、1→EX、1→INT这4个信号控制。


8.2.4 指令周期的数据流

取指周期数据流

  1. PC中存放现行指令的地址,该地址送到MAR并送至地址总线。
  2. 然后由控制部件CU存储器发出读命令。
  3. 对应MAR所指单元的内容经数据总线送至MDR,再送至IR,并且CU控制PC内容+1,形成下一条指令的地址。

间址周期数据流

  1. 一旦取指周期结束CU便检查IR中的内容,以确定其是否由间址操作。
  2. 如果需要间址操作,则MDR中指示形式地址的右N位(记作Ad(MDR))将被送到MAR,又送至地址总线
  3. 此后CU存储器发出读命令,以获取有效地址并存至MDR

执行周期数据流

由于不同的指令在执行周期的操作不同,因此无法用统一数据流图表示。


中断周期数据流

  1. CU把用于保存程序断点的存储器特殊地址(如栈指针的内容)送往MAR,并送到地址总线上
  2. 然后由CU存储器命令,并将PC的内容送到MDR,最终使程序断点数据总线存入存储器
  3. CU还需将中断服务程序的入口地址送至PC,为下一个指令周期的取指周期做好准备。


8.3 指令流水

指令流水作用

  • 提高器件的性能
  • 改进系统的结构,开发系统的并行性


并行:包含同时性并发性两方面。

  • 同时性指两个或多个事件在同一时刻发生
  • 并发性指两个或多个事件在同一时间段发生。

在同一时刻或同一时间段内完成两种或两种以上性质相同或不同的功能,只要在时间上互相重叠,就存在并行性。

并行性体现在不同等级上。通常分为4个级别:作业级或程序级任务级或进程级指令之间级指令内部级。前两级为粗粒度,又称为过程级;后两级为细粒度,又称为指令级

粗粒度并行性一般用程序算法实现,细粒度并行性一般用硬件实现。


粗粒度并行性是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序;

细粒度并行性是指在处理机的操作级和指令级的并行性,其中指令的流水作业就是一项重要技术。

8.3.1 指令流水的原理

把指令的处理过程分为取指令执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地出现,各条指令按顺序串行执行的。

指令的串行执行

取指令 取指令部件 完成 总有一个部件 空闲


指令的并行执行

二级流水

取指 执行 阶段时间上 完全重叠, 指令周期 减半 速度提高 1 倍

存在两个原因使得执行效率加倍是不可能的:

  • 指令的执行时间 > 取指时间,因此取指阶段可能要等待一段时间,也即存放在指令部件缓冲区的指令还不能立即传给执行部件,缓冲区不能空出。

  • 当遇到条件转移指令时,下一条指令是不可知的。因为必须等到执行阶段结束后,才能获知条件是否成立,从而决定下条指令的地址,造成时间损失。

通常为了减少时间损失,采用猜测法,即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令。

这样如果条件不成立,转移没有发生,则没有时间损失;若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。


可将指令的处理过程分解为更细的几个阶段:

  1. 取指(FI):从存储器取出一条指令并暂时存入指令部件的缓冲区。
  2. 指令译码(DI):确定操作性质和操作数地址的形成方式。
  3. 计算操作数地址(CO):计算操作数的有效地址。
  4. 取操作数(FO):从存储器中取操作数。(若操作数在寄存器中则无须此阶段)
  5. 执行指令(EI):执行指令所需的操作,并将结果存于目的位置(寄存器中)。
  6. 写操作数(WO):将结果存入存储器

六级流水

8.3.2 影响流水性能的因素

在流水过程中会出现三种相关,使流水线不断流实现起来很困难,即结构相关、数据相关、控制相关。

  • 结构相关:当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。
  • 数据相关:指令在流水线中重叠执行时,当后继指令需要用到前面的执行结果时发生的。
  • 控制相关:当流水线遇到分支指令和其他改变PC值的指令时引起的。


以上文中六级流水为例

结构相关

结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,故又有资源相关之称。

当指令1找操作数时,指令4找指令;都需要访问内存,造成冲突

解决冲突的方法

  1. 让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作。
  2. 另一种方法是设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和去另一条指令的操作数实现时间上的重叠。


数据相关

数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。

根据指令间对同一寄存器读和写操作的先后次序关系,数据相关冲突可分为写后读相关(RAW)、读后写相关(WAR)、写后写相关(WAW)。

上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。

在非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则既可能发生RAW相关,还可能发生WAR和WAW相关。


以RAW为例:

  • 第1条指令:R2-R3的结果放在R1里
  • 第2条指令:R5+R1的结果放在R4里,所以要先等第1条指令执行结束将结果放入R1中,第2条指令才能开始取操作数

解决数据相关的方法

  1. 采用后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
  2. 另一种解决方法是采用定向技术,又称为旁路技术或相关专用通路技术。其主要思想是不必待某条指令的执行结果送回到寄存器后,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方

控制相关

控制相关主要是由转移指令引起的。

当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,它可能将程序计数器PC内容改变成转移目标地址,也可能只是使PC加上一个增量,指向下一条指令地址。

在第3条指令的取指阶段不知道是否会发生跳转,所以第4条指令进入流水线模式

在第3条指令执行阶段(EI)发现需要跳转,则红框中的部分即转移损失,因为它们原本是不用执行的

解决控制相关

  1. 可以采用尽早判别转移是否发生,尽早生成转移目标地址;
  2. 预取转移成功或不成功两个控制流方向上的目标指令;
  3. 加快和提前形成条件码;
  4. 提高转移方向的猜准率等方法。


8.3.3 流水线性能

流水线性能通常用吞吐率、加速比、效率3项指标来衡量。

吞吐率

在指令级流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量。吞吐率又有最大吞吐率实际吞吐率之分。

最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为Δt,则最大吞吐率为

流水线仅在连续流动时才可达到最大吞吐率。实际吞吐率总是小于最大吞吐率。

实际吞吐率是指流水线完成n条指令的实际吞吐率。实际吞吐率为:

加速比

流水线的加速比是指m段流水线的速度与等功能的非流水线的速度之比。加速比Sp为

即:

效率

效率是指流水线中各功能段的利用率。通常用流水线各段处于工作时间的时空区与流水线中各段总的时空区之比来衡量流水线的效率。

由于流水线有 建立时间 排空时间, 因此各功能段的 设备不可能一直 处于 工作 状态。

8.3.4 流水线的多发技术

超标量技术

超标量技术是指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上指令编译并执行

要实现超标量技术,要求处理机中配置多个功能部件和指令译码电路,以及多个寄存器端口,以便能实现同时执行多个操作。

即3条流水同时进行


超流水线技术

超流水线技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分段。

即1条流水线再分段


超长指令技术

超长指令字技术(VLIW)和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。

当超标量的指令来自同标准的指令流,VLIW则是由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令,由这条超长指令控制VLIW机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。

VLIW较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对Cache的容量要求更大。

即一条指令有多个执行阶段


8.3.5 流水线结构

指令流水线结构

指令流水线是将指令的整个执行过程用流水线进行分段处理.

典型的指令执行过程分为“取指令——指令译码——形成地址——取操作数——执行指令——回写结果——修改指令指针”这几个阶段。

指令流水线对机器性能的改善程度取决于把处理过程分解为多少个相等的时间段数。

运算流水线

流水线相邻两段在执行不同的操作,因此在相邻两段之间必须设置锁存器或寄存器,以保证在一个时钟周期内流水线的输入信号不变。这一指导思想也适用于指令流水。


8.4 中断系统

8.4.1 概述

引起中断的各种因素

  1. 人为设置的中断:这种中断一般称为自愿中断,因为它是程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理。
  1. 程序性事故:如定点溢出、浮点溢出、操作码不能识别、除法中出现“非法”等,这些都属于由程序设计不周而引起的中断。
  1. 硬件故障
  2. I/O设备:I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求。
  1. 外部事件:用户通过键盘来中断现行程序属于外部事件中断。


通常将能引起中断的各个因素称为中断源

中断源可分为两大类:

一类为不可屏蔽中断,这类中断CPU不能禁止,如电源掉电;

另一类为可屏蔽中断,对可屏蔽中断源的请求,CPU可根据该中断源是否被屏蔽来确定是否给予响应。若未屏蔽则能响应;若已被屏蔽,则CPU不能响应。

8.4.2 中断请求标记和中断判优逻辑

中断请求标记

为了判断是哪个中断源提出的请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为“1”时,表示中断源有请求。

这种触发器可集中设在CPU内,组成一个中断请求标记寄存器。

中断请求触发器越多,说明计算机处理中断的能力越强。这些触发器既可以集中在CPU的中断系统内, 也可以分散到各个中断源中。

中断判优逻辑

任何一个中断系统,在任一时刻,只能响应一个中断源的请求。当某一时刻多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这称为中断判优

各中断源的优先顺序是根据该中断源若得不到及时响应,致使机器工作出错的严重程度而定的。

中断判优可用硬件实现,也可用软件实现。

1. 硬件排队

硬件排队又可分为两种。

  • 链式排队器,对应中断请求触发器分散在各个接口电路中的情况,每一个接口电路中都设有一个非门和一个与非门,它们犹如链条一样串接起来。
  • 排队器设在CPU内,当最高优先级的中断源有请求时INTR1=1,就可封住比它优先级低的中断源的请求。

解释一下这张图:

  • 首先 1 为非门、& 为与非门
  • 假设INTR1和INTR2都有中断请求,为高电平1
  • INTR1经过非门变成0,并把这个0传到后面,再经过一个非门变成1 即INTP1为1;中断请求有效
  • INTR2为1,和INTR1传过来的0做与非运算,得1,再经过非门得0,即INTP2为0;中断请求无效;依次类推......
  • 目的是将优先级低的中断请求屏蔽掉


2. 软件排队

软件排队是通过编写查询程序实现的。程序按中断源的优先等级,从高至低逐级查询各中断源是否有中断请求,这样就可以保证CPU首先响应级别高的中断源的请求。

8.4.3 中断服务程序入口地址的寻找

通常有两种方法寻找入口地址:硬件向量法软件查询法

硬件向量法

硬件向量法就是利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内。


由向量地址寻找中断服务程序的入口地址通常采用两种办法。

  • 一种在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址送至PC,执行这条指令,便可无条件转向打印机服务程序的入口地址200。
  • 另一种是设置向量地址表,该表设在存储器内,存储单元的地址为向量地址,存储单元的地址为入口地址。只要访问向量地址所指示的存储单元,便可获得入口地址。

硬件向量法寻找入口地址速度快。

软件查询法

用软件寻找中断服务程序入口地址的方法称为软件查询法。当查到某一中断源有中断请求时,接着安排一条转移指令,直接指向此中断源的中断服务程序入口地址,机器便能自动进入中断处理。

这种方法不涉及硬件设备,但查询时间较长


8.4.4 中断响应

中断响应的条件

当EINT=1,且有中断请求(即中断请求标记触发器INTR=1)时,CPU可以响应中断。


响应中断的时间

之所以CPU在指令的执行周期后进入中断周期,是因为CPU在执行周期的结束时,统一向所有中断源发出中断查询信号,只有此时CPU才能获知哪个中断源有请求。

可在指令执行过程中设置若干个查询断点,CPU在每个“查询断点”时刻均发中断查询信号,以便发现有中断请求,CPU便可及时响应。

中断隐指令

1. 保护程序断点

保护程序断点就是要将当前程序程序计数器PC的内容保存到存储器中。它可以存在存储器的特定单元内,也可以存入堆栈。


2. 寻找中断服务程序的入口地址

由于中断周期结束后进入下条指令(即中断服务程序的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址。

两种方法寻找入口地址

  1. 在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU执行下一条无条件转移执行,转至中断服务程序入口地址。
  2. 在中断周期内,将软件查询入口地址的程序(又称中断识别程序)首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。


3. 关中断

CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需做的一系列操作不至于又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应中断请求。

当进入中断周期时,INT为“1”状态,触发器原端输出有一个正跳变,经反相后产生一个负跳变,使EINT置“0”,即关中断。

一般只有在多重中断中才会有关中断指令


保护断点寻找入口地址关中断这些操作都是在中断周期内由一条中断隐指令完成的。

中断隐指令:即在机器指令系统中没有的指令,它是CPU 在中断周期内由硬件自动完成的一条指令。

8.4.5 保护现场和恢复现场

保护现场:应该包括保护程序断点和保护CPU内部各寄存器内容的现场两个方面。程序断点的现场由中断隐指令完成,各寄存器内的现场可在中断服务程序中由用户(或系统)用机器指令编程实现。


恢复现场:是指在中断返回前,必须将寄存器的内容回复到中断处理前的状态,这部分工作也由中断服务程序完成。

8.4.6 多重中断

多重中断的概念

当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个中断请求,暂时停止正在运行的服务程序,转去执行新的中断服务程序,这称为多重中断,又称为中断嵌套

如果CPU对新的请求不予响应,待执行完当前的服务程序后再响应,即为单重中断


实现多重中断的条件

1. 提前设置“开中断”指令

多重中断“开中断”指令的位置前于单重中断,从而保证了多重中断允许出现中断嵌套

2. 优先级别高的中断源有权中断优先级别低的中断源

为了保证级别低的中断源不干扰级别高的中断源的中断处理过程,可采用屏蔽技术。

多重中断的断点保护

中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的。

断点可以保存在堆栈中,由于堆栈先进后出的特点,出栈时按相反顺序便可准确返回到程序的间断处。

断点也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的0号地址单元内。在中断服务程序中的开中断指令之前,必须先将0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点。


8.4.7 中断屏蔽技术

屏蔽触发器与屏蔽字

屏蔽触发器

我们也可以将上文中提到的排队器和屏蔽触发器结合使用

无论INTR是1还是0,且前面传过来的是1还是0

只要MASK=1,即被屏蔽了 

  • 先做非运算得0
  • 再经过与非门得1
  • 再经过非门得0 ,即中断请求无效,不能进入排队器

屏蔽字

对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字

屏蔽字与中断源的优先级别是一一对应的。

在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断源的屏蔽作用

屏蔽字屏蔽的是其他中断

当一个中断的屏蔽字为全1时,表示不允许其他中断打断当前的中断,所以屏蔽字为全1的中断优先级最高

屏蔽技术可改变优先等级

优先级包含响应优先级处理优先级

  • 响应优先级是指CPU响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动
  • 处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。

在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。

假设响应优先级为:A、B、C、D