第七章 CPU

7.1 CPU的结构

7.1.1 CPU的功能

  1. 控制器的功能

    ​ 取指令:要求控制器能自动形成指令的地址,并能发出取指令的命令,将对应此地址的指令取到挖制器中
    ​ 分析指令:其一,分析控制器需发出什么操作命令;其二,分析操作数的有效地址。
    ​ 执行指令:根据分析指令产生的“操作命令”和“操作数地址”的要求,形成操作控制信号序列,执行每条指令
    ​ 控制程序输入及结果的输出 ​ 总线管理 ​ 处理异常情况和特殊请求

  2. 运算器的功能

7.1.2 CPU结构框图

CPU的结构

7.1.3 CPU的寄存器

  1. 用户可见寄存器
    (1). 通用寄存器:存放操作数,可作某种寻址方式所需的专用寄存器
    (2). 数据寄存器:存放操作数(满足各种数据类型,两个寄存器拼接存放双倍字长数据
    (3). 地址寄存器:存放地址,其位数应满足最大的地址范围。用于特殊的寻址方式 ,如段基值 、栈指针
    (4). 条件码寄存器:存放条件码,可作程序分支的依据。如 正、负、零、溢出、进位等

  2. 控制和状态寄存器
    (1). 控制寄存器

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

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

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

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

      PC——>MAR——>MDR——>IR

    通过这四个寄存器,CPU和主存可交换信息。例如,将现行指令地址从PC送至MAR,启动存储器作读操作,存储器就可将指定地址单元内的指令读至MDR,再由MDR送至IR。

    (2). 状态寄存器

    状态寄存器:存放条件码

    PSW 寄存器:存放程序状态字

7.2 指令周期

7.2.1 指令周期的基本概念

指令周期:取出并执行一条指令所需的全部时间

指令周期

  • 每条指令的指令周期不同

不同指令周期

  • 具有间接寻址的指令周期

当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。这样,间接寻址的指令周期就包括取指周期、间址周期和执行周期三个阶段,其中间址周期用于取操作数的有效地址,因此间址周期介于取指周期和执行周期之间

具有间接寻址的指令周期

  • 带有中断周期的指令周期

当CPU采用中断方式实现主机与I/O交换信息时,CPU在每条指令执行阶段结束前,都要发中断查询信号,以检测是否有某个I/O提出中断请求。如果有请求,CPU则要进入中断响应阶段,又称中断周期

带有中断周期的指令周期

  • 指令周期流程

指令周期流程

  • CPU工作周期的标志

    CPU的4个工作周期:
    取指周期:取指令 间址周期:取地址 执行周期:存取操作数或结果 中断周期:存程序断点

为了区别工作周期,在CPU内可设置四个标志触发器,FE、IND、EX和NT分别对应取指、间址、执行和中断

CPU工作周期的标志

7.2.2 指令周期的数据流

  • 取指周期数据流

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

取指周期数据流

  • 间址周期数据流

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

间址周期数据流

  • 执行周期数据流

不同指令的执行周期数据流不同

  • 中断周期数据流

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

中断周期数据流

7.3 指令流水

7.3.1 指令流水原理

  • 指令的串行执行

指令的串行执行

  • 指令的二级流水

指令的二级流水

  • 影响指令流水效率加倍的因素

(1) 执行时间 > 取指时间

指令部件缓冲区

(2) 条件转移指令对指令流水的影响

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

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

  • 指令的六级流水

指令的六级流水

取指(FI)、指令译码(DI)、计算操作数地址(CO)、取操作数(FO)、执行指令(EI)、写操作数(WO)

7.3.2 影响指令流水线性能的因素

1.访存冲突

取指令、取操作数和存结果都要访问存储器。如在下图的第5个时间单元,取第5条指令与取第二条指令的操作数发生了访存冲突。又如在第6个时间单元,取第6条指令与取第3条指令的操作数和存第1条指令的结果二者之间又出现了访存冲突。

指令的六级流水

为了避免冲突,可采用如下一些方法:

①设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和取另一条指令的操作数实现时间上的重叠。

②采用指令预取技术,如在CPU(8086)中设置指令队列,将指令预先取到指令队列中排队。指令预取技术的实现基于访存周期很短的情况,如在执行指令阶段,取数时间很短,因此在执行指令时,主存会有空闲,此时,只要指令队列空出,就可取下一条指令,并放至空出的指令队列中,从而保证在执行第K条指令的同时对第K+1条指令进行译码,实现“执行K”与“分析K+1的重叠。

2.相关问题

相关问题是指程序的相近指令之间出现某种关联,使指令流水线出现停顿,影响了指令流水线的效率。例如,当下一条指令需用到前面一条(或几条)指令的结果时,必须待前面的指令流出流水线后才能执行。

  • 数据相关

数据相关是发生在几条相近的指令间共用同一个存储单元或寄存器时发生的。

例如某条指令为了计算操作数的地址需用到某寄存器的内容。但是产生这“内容”的指令还未执行结束,也即还没有产生结果,这时流水线也只能暂停等待。

数据相关

解决方法:

旁路技术:即在执行部件与指令部件之问设置直接传送数据的通路,在执行部件产生结果向寄存器送数的同时,把此数直接送至指令部件,计算操作数的有效地址。

  • 控制相关

如果一条指令要等前一条(或几条)指令作出转移方向的决定后,才能进入流水线,便发生了控制相关

假设指令3是条条件转移指令,即指令3必须待指令2的结果出现后(第7个时间单元)才能决定下一条指令是4(条件不满足)还是15(条件满足)。由于结果无法预测,此流水线继续预取指令4,并向前推进。当最后结果满足条件时,发现对第4、5、6、7条指令所做的操作仝部报废。在第8个时间单元,指令15进入流水线。在时间单元9到12间没有指令完成,这就是由于不能预测转移条件而带来的性能损失。

条件转移对指令流水操作的影响

7.3.3 流水线性能

  • 吞吐率

吞吐率

  • 加速比

加速比

  • 效率

效率

7.3.4 流水线的多发技术

1、超标量技术

超标量( Super scalar)技术是指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上(图中所示为三条)指令编译并执行。

超标量技术

  • 不能调整指令的执行顺序
  • 通过编译优化技术,把可并行执行的指令搭配起来

2、超流水线技术

超流水线( Super pipe lining)技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分道,。图中将原来的一个时钟周期又分成三段,使超级流水线的处理器周期比一般流水线的处理器周期短,这样,在原来的时钟周期内,功能部件被使用三次,使流水线以3倍于原来时钟频率的速度运行。

超流水线技术

3、超长指令字技术

由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字可达几百位)

超长指令字技术

7.3.5 流水线结构

  • 指令流水线结构

指令流水线结构

  • 运算流水线

运算流水线

7.4 中断系统

7.4.1 各中断源如何向CPU提出请求?

为了判断是哪个中断源提出请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作ⅠNIR,当其状态为“1”时,表示中断源有请求。这种触发器可集中设在CPU内,组成一个中断请求标记寄存器,如

中断请求标记

尽管中断请求标记寄存器是由各中断请求触发器组成但这些触发器既可以集中在CPU的中断系统内,也可以分散到各个中断源中

7.4.2 各中断源同时提出请求怎么办?

当某一时刻有多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这就叫中断判优。

(1) 硬件实现(排队器)

① 对应中断请求分散在各个中断源的接口电路中。如:链式排队器,每一个接口电路中都设有一个非门和个与非门,它们犹如链条一样串接起来。

② 另一种排队器设在CPU内,如图所示,图中假设其优先顺序按1、2、3、4由高向低排列。这样,当最高优先级的中断源有请求时INTR1=1,就可封住比它级别低的中断源的请求。

排队器

(2) 软件实现(程序查询)

软件实现(程序查询)

7.4.3 如何寻找入口地址?

1、硬件向量法

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

硬件向量法

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

一种在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址(如12H)送至PC,执行这条指令,便可无条件转向打印机服务程序的入口地址200。

另一种是设置向量地址表,该表设在存储器内,存储单元的地址为向量地址,存储单元的内容为入口地址,如图中12H、13H、14H为向量地址,200、300、400为入凵地址,只要访问向量地址所指示的存储单元,便可获得入口地址

2、软件查询法

软件查询法

7.4.3 CPU什么条件、什么时间、以什么方式响应中断?

  • 响应中断的条件

在中断系统中有一个允许中断触发器EINT,它可被开中断指令置“1”,也可被关中断指令置“0″。当允许中断触发器为“1”时,意味着CPU允许响应中断源的请求;当其为“0”时,意味着CPU禁止响应中断。故当EⅠNT=1,且有中断请求(即中断请求标记触发器INTR=1)时,CPU可以响应中断。

  • 响应中断的时间

CPU总是在指令执行周期结束后,响应任何中断源的请求。在指令执行周期结束后,若有中断,CPU则进入中断周期;若无中断,则进入下一条指令的取指周期。

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

响应中断的时间

如图所示,图中$INTR_{i}(i=1,2 ······)$是各个中断源的中断请求触发器,触发器的数据端来自各中断源,当它们有请求时,数据端为“1”,而且只有当CPU查询信号到触发器的时钟端时,才能置“1”$INTR_{i}$

  • 中断隐指令

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

(1) 保护程序断点

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

(2) 寻找服务程序入口地址

中断周期内也有两种方法寻找入口地址:

其一,在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU下一条执行无条件转移指令,转至中断服务程序的入区地址。

其二,在中断周期内,将软件查询入口地址的程序(又叫中断识别程序)其首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。

(3) 硬件关中断

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

硬件关中断示意

上图是CPU自动关中断的示意图。图中允许中断触发器EⅠNT和中断标记触发器INT可选用标准的R-S触发器。当进入中断周期时,INT为“1”状态,触发器原端输出有个正跳变,经反相后产生一个负跳变,使EINT置0,即关中断

7.4.4 保护现场和恢复现场?

  • 保护现场

保护断点由中断隐指令完成,保护寄存器内容由中断服务程序完成

  • 恢复现场

恢复现场由中断服务程序完成

恢复现场

  • 多重中断的断点保护

多重中断的断点保护

7.4.7 处理中断的过程中又出现新的中断怎么办?

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

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

  • 实现多重中断的条件

(1) 提前设置开中断指令
(2) 优先级别高的中断源有权中断优先级别低的中断源

  • 中断屏蔽技术

(1) 屏蔽触发器的作用

屏蔽触发器

当中断源被屏蔽时(MASK=1),此时即使D=1,中断查询信号到来时刻将INTR置0,CPU接收不到该中断源的中断请求,即它被屏蔽。若该中断源未被屏蔽(MASK=0),则当设备工作已完成时(D=1),中断查询信号将INTR置1,表示该中断源向CPU发出中断请求,该信号送至排队器进行优先级判断

显然,对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称作屏蔽字。屏蔽字与中断源的优先级别是一一对应的

(2) 屏蔽字

屏蔽字

(3) 屏蔽技术可改变处理优先等级

屏蔽技术可改变处理优先等级

原屏蔽字

新屏蔽字

(4) 新屏蔽字的设置

新屏蔽字的设置