【笔记】CPU的结构和功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cbwem/article/details/79683877

一、CPU的结构

1.CPU的功能

  控制器是负责协调并控制计算机各部件执行程序的指令序列,其基本功能是取指令、分析指令和执行指令。

取指令

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

分析指令

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

执行指令

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

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

2.CPU结构框图


这里写图片描述

3.CPU的寄存器

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

用户可见寄存器

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

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

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

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

控制和状态寄存器

  • MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址。
  • MDR:存储器数据寄存器,用于存放欲访问存入存储器中的数据或最近从存储器中读出的数据。
  • PC:程序计数器,存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC的值可被修改。
  • IR:指令寄存器,存放当前欲访问的指令。

  还用用来存放程序状态字PSW的寄存器,该寄存器用来存放条件码和其他状态信息。在具有中断系统的机器中还有中断标记寄存器。

Intel 8086

  它有4个16位的数据寄存器,即AX(累加器)、BX(基址寄存器)、CX(计数寄存器)、DX(数据寄存器),也可兼作8个8位的寄存器(AH、AL、BH、BL、CH、CL、DH、DL)。还有两个16位的指针(栈指针SP和基址指针BP)和两个变址寄存器(源变址寄存器SI和目的变址寄存器DI)。还有4个段地址寄存器(代码段CS、数据段DS、堆栈段SS、附加段ES)以及指令指针IP(相当于PC)和状态标志寄存器F。

控制单元和中断系统

  控制单元(CU)是提供完成计算机全部指令操作的微操作命令序列部件。微操作命令序列的形成方法有两种:一种是组合逻辑设计方法,为硬连线逻辑;另一种是微程序设计方法,为存储逻辑。


二、指令周期

1.指令周期的基本概念

  CPU每取出一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间。取值阶段完成取指令和分析指令的操作,又称为取指周期;执行阶段完成执行指令的操作,又称为执行周期
  各种指令的指令周期是不相同的。


这里写图片描述

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


这里写图片描述

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


这里写图片描述

  取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数(当指令为访存指令时),中断周期是为了保存程序断点。这4个周期又可称为CPU的工作周期,为了区别它们,在CPU内可设置4个标志触发器。


这里写图片描述

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

2.指令周期的数据流

取值周期的数据流


这里写图片描述

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

间址周期的数据流

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

执行周期的数据流

  不同的指令在执行周期的操作不同,因此执行周期的数据流是多种多样的,无法用同意的数据流图表示。

中断周期的数据流

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


这里写图片描述


三、指令流水

  为了进一步提高处理机速度,通常可从来提高器件的性能和改进系统的结构,开发系统的并行性两方面入手。
  (1)提高器件的性能
  (2)改进系统的结构,开发系统的并行性
  所谓并行,包含同时性并发性两个方面。前者是指两个或多个事件在同一时刻发生,后者是指两个或多个事件在同一时间段发生。在同一时刻或同一时间段内完成两种或两种以上性质相同或不同的功能,只要在时间上互相重叠,就存在并行性。
  并行性体现在不同等级上。通常分为4个级别:作业级或程序级任务级或进程级指令之间级和指令内部级。前两级为粗粒度,又称为过程级;后两级为细粒度,又称为指令级。粗粒度并行性一般用算法实现,细粒度并行性一般用硬件实现。粗粒度并行性是在多个处理机上运行多个进程,由多台处理机合作完成一个程序;细粒度并行性是指在处理机的操作级和指令级的并行性,其中指令的流水作业就是一项重要技术。

1.指令流水原理

  简单起见,把指令的处理过程分为取指令和执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地重复出现,各条指令按顺序串行执行的。
  如果指令执行阶段不访问主存,则完全可以利用这段时间取下一条指令,这样就使取下一条指令的操作和执行当前指令的操作同时进行,即指令的二级流水


这里写图片描述

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

  • 指令的执行时间一般大于取指时间,因此取指阶段可能要等待一段时间,也即存放在指令部件缓冲区的指令还不能立即传给执行部件,缓冲区不能空出。
  • 当遇到条件转移指令时,下一条指令是不可知的,因为必须等到执行阶段结束后,才能获知条件是否成立,从而决定下一条指令的地址,造成时间损失。

  采用猜测法,即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令。这样如果条件不成立,转移没有发生,则没有时间损失;若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。

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

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

2.影响流水线性能的因素

  在流水过程中会出现三种相关,使流水线不断流实现起来很困难,这三种相关是结构相关、数据相关、控制相关
  结构相关是当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。
  数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的。
  控制相关是当流水线遇到分支指令和其他改变PC值的指令时引起的。
  假设流水线由5段组成,它们分别是取指令IF、指令译码/读寄存器ID、执行/访存有效地址计算EX、存储器访问MEM、结果写回寄存器WB


这里写图片描述
这里写图片描述

结构相关

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

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

数据相关

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

  解决这种数据相关的方法:

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

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

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

控制相关

  控制相关主要是由转移指令引起的。
  解决控制相关的方法:

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

3.流水线性能

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

吞吐率

  在指令级流水中,吞吐率是指的单位时间内流水线所完成指令或输出结果的数量。吞吐量又有最大吞吐率实际吞吐率之分。
  最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为 Δ t ,则最大吞吐率为

T p m a x = 1 Δ t

  流水线仅在连续流动时才可达到最大吞吐率。实际吞吐率总是小于最大吞吐率。 实际吞吐率是指在流水线完成n条指令的实际吞吐率。实际吞吐率为
T p = n m Δ t + ( n 1 ) Δ t = 1 Δ t [ 1 + ( m 1 ) / n ] = T p m a x 1 + ( m 1 ) / n
仅当 n m 时才会有 T p = T p m a x

加速比

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

S p = m n Δ t m Δ t + ( n 1 ) Δ t = n m m + m 1 = m 1 + ( m 1 ) / n

效率

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

E = m n Δ t m ( m + n 1 ) Δ t = n m + m 1 = S p m = T p Δ t

4.流水线中的多发技术

  除了采用好的指令调度算法、重新组织指令执行顺序、降低相关带来的干扰以及优化编译外,还可开发流水线中的多发技术,设法在一个时钟周期内,产生更多条指令大家结果。常见的多发技术有超标量技术、超流水线技术、超长指令字技术

超标量技术

  在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上指令编译并执行。
  要实现超标量技术,要求处理机中配置多个功能部件和指令译码电路,乙级多个寄存器端口和总线,以便能实现同时执行多个操作。

超流水线技术

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

超长指令字技术

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

5.流水线结构

指令流水线结构

  指令流水线是将指令的整个执行过程用流水线进行分段处理,典型的指令执行过程分为“取指令——指令译码——形成地址——取操作数——执行指令——回写结果——修改指令指针”这几个阶段。指令流水线对机器性能的改善程度取决于把处理过程分解成多少个相等的时间段数。

运算流水线

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


这里写图片描述


四、中断系统

1.引起中断的因素

  (1)人为设置的中断
  这种中断一般称为自愿中断,因为它是在程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理。
  (2)程序性事故
  如定点溢出、浮点溢出、操作码不能识别、除法中出现“非法”等,这些都属于由程序设计不周而引起的中断。
  (3)硬件故障
  硬件故障类型很多,如插件接触不良、通风不良、磁表面损坏、电源掉电等,这些都属于硬设备故障。
  (4)I/O设备
  I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求。
  (5)外部事件
  用户通过键盘来中断现行程序属于外部事件中断。

  通常将能引起中断的各个因素称为中断源。中断源可分为两大类:一大类为不可屏蔽中断,这类中断CPU布恩那个禁止响应,如电源掉电;另一类为可屏蔽中断,对可屏蔽中断源的请求,CPU可根据该中断源是否被屏蔽来确定是否给予响应。若未屏蔽则能响应;若已被屏蔽,则CPU不能响应。

2.中断请求标记和中断判优逻辑

中断请求标记

  为了判断是那个中断源提出请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为“1”时,表示中断源有请求。这种触发器可集中设在CPU内,组成一个中断请求标记寄存器。
  中断请求触发器越多,说明计算机处理中断的能力越强。这些触发器既可以集中在CPU的中断系统内,也可以分散到各个中断源中。


这里写图片描述

中断判优逻辑

  任何一个中断系统,在任一时刻,只能相应一个中断源的请求。当某一时刻有多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这称为中断判优。各中断源的优先顺序是根据该中断源若得不到及时响应,致使机器巩固总出错的严重程度而定的。
  中断判优可用硬件实现,也可用软件实现。
  (1)硬件排队
  硬件排队又分两种。一种为链式排队器,对应中断请求触发器分散在各个接口电路中的情况,每一个接口电路中都设有一个非门和一个与非门,它们犹如链条一样串接起来。另一种排队器设在CPU内。当最高优先级的中断源有请求时 I N T R 1 = 1 ,就可封住比它级别低的中断源的请求。


这里写图片描述

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


这里写图片描述

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

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

硬件向量法

  硬件向量法就是利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内。
  由向量地址寻找中断服务程序的入口地址通常采用两种办法。一种在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址送至PC,执行这条指令,便可无条件转向打印机服务程序的入口地址200。另一种是设置向量表,该表设在存储器内,存储单元的地址为向量地址,存储单元的内容为入口地址,只要访问向量地址所指示的存储单元,便可获得入口地址。
  硬件向量法寻超入口地址速度快。


这里写图片描述

软件查询法

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

4.中断响应

响应中断的条件

  在中断系统中有一个允许中断触发器EINT,它可被中断指令置“1”,也可被关中断指令置“0”。故当EINT=1,且有中断请求(即中断请求标记触发器INTR=1)时,CPU可以响应中断。

响应中断的时间

  之所以CPU在指令的执行周期后进入中短周期,是因为CPU在执行周期的结束时刻统一向所有中断源发中断查询信号,只有此时CPU才能获知那个中断源有请求。
  可在指令执行过程中设置若干个查询断点,CPU在每个“查询断点”
时刻均发中断查询信号,以便发现有中断请求便可及时响应。

中断隐指令

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

  (2)寻找中断服务程序的入口地址
  由于中断周期结束后进入下条指令(即中断服务程度的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址。
  其一,在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU执行下一条无条件转移指令,转至中断服务程序的入口地址。
  其二,在中断周期内,将软件查询入口地址的程序(又称中断识别程序)首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。

  (3)关中断
  CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需的一系列操作不至于又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应新的中断请求。当进入中断周期内,INT为“1”状态,触发器原端输出有一个正跳变,经反相后产生一个负跳变,使EINT置“0”,即关中断。

  保护断点、寻找入口地址和关中断这些操作都是在中断周期内由一条中断隐指令完成的。所谓中断隐指令,即在机器指令系统中没有的指令,它是CPU在中断周期内由硬件自动完成的一条指令。

5.保护现场和恢复现场

  保护现场应该包括保护程序断点和保护CPU内部各寄存器内容的现场两个方面。程序断点的现场由中断隐指令完成,各寄存器内的现场可在中断服务程序中由用户用机器指令编程实现。
  恢复现场是指在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分工作也由中断服务程序完成。

6.中断屏蔽技术

多重中断的概念

  当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个新的中断请求,暂时停止正在运行的服务程序,转区执行新的中断服务程序,这称为多重中断,又称中断嵌套。如果CPU对新的请求不予响应,待执行完当前的服务程序后再响应,即为单重中断

实现多重中断的条件

  1、提前设置“开中断”指令
  多重中断“开中断”指令的位置前于单重中断,从而保证了多重中断允许出现中断嵌套。
  2、优先级别高的中断源有权中断优先级别低的中断源。
  为了保证级别低的中断源不干扰比其他级别高的中断源的中断处理过程,保证上述2的实施,可采用屏蔽技术。

屏蔽技术

  (1)屏蔽触发器与屏蔽字
  对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字。屏蔽字与中断源的优先级别是一一对应的。
  在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断源的屏蔽作用。

  (2)屏蔽技术可改变优先等级
  优先级包含响应优先级和处理优先级。响应优先级是指CPU响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动。处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。
  在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。

多重中断的断点保护

  中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的。断点可以保存在堆栈中,由于堆栈先进后出的特点。出栈时,按相反顺序便可准确返回到程序间断处。
  断点也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的0号地址单元内。在终端服务程序中的开中断指令之前,必须先将0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点。

猜你喜欢

转载自blog.csdn.net/cbwem/article/details/79683877