目录
上篇:第七章、指令系统
下篇:第九章、控制单元的功能
第八章 CPU 的结构与功能
8.1 CPU 的结构
8.1.1 CPU 的功能
CPU
实质包括 运算器
和 控制器
两大部分。
对于 冯·诺依曼
结构的计算机而言,一旦程序进入存储器后,就可由计算机自动完成 取指令
和 执行指令
的任务,控制器就是专用于完成此项工作的,它负责协调并控制计算机各部件执行程序的指令序列,其基本功能就是取指令、分析指令和执行指令。
- 取指令:控制器必须具备能自动地从存储器取出指令的功能
- 分析指令:控制器能够分析出此指令需要完成的操作,以及此次操作数的有效地址
- 执行指令:根据分析指令产生的
操作命令
和操作数地址
的要求,形成操作控制信号序列,通过对运算器、存储器以及I/O
设备的操作,执行每条指令
总之,CPU
必须具有控制程序的顺序执行(称 指令控制
)、产生完成每条指令所需的控制命令(称 操作控制
)、对各种操作实施时间上的控制(称 时间控制
)、对数据进行算术和逻辑运算(数据加工
)和 处理中断
等功能。
8.1.2 CPU 结构框图
从 CPU
的功能上分析,取指令要有一个寄存器专用于存放当前指令的地址;分析指令必须有存放当前指令的寄存器和对指令操作码进行译码的部件;执行指令必须有一个能发出各种操作命令序列的控制部件 CU
;要完成算术运算和逻辑运算,必须有存放操作数的寄存器和实现算逻运算的部件 ALU
;处理异常情况和特殊请求,必须要有中断系统。
8.1.3 CPU 的寄存器
CPU
中的寄存器大致可分两类:一类属 用户可见寄存器
,用户可对这类寄存器编程,以及通过优化使 CPU
因使用这类寄存器而减少对主存的访问次数;另一类属 控制和状态寄存器
,用户不可对这类寄存器编程,它们被控制部件使用,以控制 CPU
的操作,也可被带有特权的操作系统程序使用,从而控制程序的执行。
1. 用户可见寄存器
通常 CPU
执行机器语言访问的寄存器为用户可见寄存器,按其特征又可分为以下几类:
- ① 通用寄存器:可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器
- ② 数据寄存器:用于存放操作数,其位数应满足多数数据类型的数值范围,有些机器允许使用两个连续的寄存器存放双倍字长的值,还有些机器的数据寄存器只能保存数据,不能用于操作数地址的计算
- ③ 地址寄存器:用于存放地址,其本身可以具有通用性,也可用于特殊的寻址方式,如用于基址寻址的段指针、用于变址寻址的变址寄存器和用于堆栈寻址的栈指针
- ④ 条件代码寄存器:这类寄存器中存放条件码,它们对于用户来说是透明的。条件码是
CPU
根据运算结果由硬件设置的位(bits),条件码可被测试,作为分支运算的依据,此外有些条件码也可被设置,将条件码放到一个或多个寄存器中,就构成了条件码寄存器
2. 控制和状态寄存器
CPU
中还有一类寄存器用于控制 CPU
的操作或运算,这类寄存器大部分是对用户透明的,如以下四种寄存器在指令执行过程中起重要作用:
- MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址
- MDR:存储器数据寄存器,用于存放欲存入存储器中的数据或最近从存储器中读出的数据
- PC:程序计数器,存放现行指令的地址,通常具有计数功能,当遇到转移类指令时,
PC
的值可被修改 - IR:指令寄存器,存放当前欲执行的指令
通过这四个寄存器,CPU
和 主存
可交换信息,其中 MAR、MDR、IR
用户不可见,PC
用户可见。
在 CPU
内部必须给 ALU
提供数据,因此 ALU
必须可直接访问 MDR
和用户可见寄存器,ALU
的外围还可以有另一些寄存器,这些寄存器用于 ALU
的输入/输出以及用于和 MDR
及用户可见寄存器交换数据。
在 CPU
的控制和状态寄存器中,还有用来存放程序状态字 PSW
的寄存器,该寄存器用来存放条件码和其他状态信息,在具有中断系统的机器中还有中断标记寄存器。
8.1.4 控制单元 CU 和中断系统
控制单元 CU
是提供完成机器全部指令操作的微操作命令序列部件,现代计算机中微操作命令序列的形成方法有两种,一种是 组合逻辑设计方法
,为硬联线逻辑;另一种是 微程序设计方法
,为存储逻辑。
8.2 指令周期
8.2.1 指令周期的基本概念
CPU
每取出并执行一条指令所需的全部时间叫 指令周期
,也即 CPU
完成一条指令的时间叫 指令周期
。
如图所示,图中取指令阶段完成取指令和分析指令的操作,又叫 取指周期
;执行阶段完成执行指令的操作,又叫 执行周期
。在大多数情况下,CPU
就是按取指 — 执行 — 再取指 — 再执行 … 的顺序自动工作的。
由于各种指令操作功能不同,因此各种指令的指令周期是不同的
此外,当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器取出操作数,这样间接寻址的指令周期就包括取指周期、间址周期和执行周期三个阶段,其中间址周期用于取操作数的有效地址,因此间址周期介于取指周期和执行周期之间
如果机器是支持中断的,那么在指令周期的执行周期结束的时候,就要确认是否有中断请求,如果有中断请求的话,则需要响应中断,在响应中断的过程中要保存断点,形成中断服务程序的入口地址和硬件关中断
一个完整的指令周期应包括:取指、间址、执行和中断
四个子周期
总之,上述四个周期都有 CPU
访存操作,只是访存的目的不同。取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点。
这四个周期又可叫 CPU
的工作周期,为了区别它们,在 CPU
内可设置四个标志触发器,如下图所示,FE
、IND
、EX
和 INT
分别对应取指、间址、执行和中断四个周期,并以 1
状态表示有效,它们分别由 1 -> FE
、1 -> IND
、1 -> EX
和 1 -> INT
四个信号控制。
设置 CPU
工作周期标志触发器对设计控制单元十分有利。例如,在取指阶段,只要设置取指周期标志触发器 FE
为 1
,由它控制取指阶段的各个操作,便获得对任何一条指令的取指命令序列。又如在间接寻址时,间址次数可由间址周期标志触发器 IND
确定,当它为 0
状态时,表示间址结束。再如对于一些执行周期不访存的指令〈如转移指令,寄存器类型指令),同样可以用它们的操作码与取指周期标志触发器的状态相 与
,作为相应微操作的控制条件。
8.2.2 指令周期的数据流
为了便于分析指令周期中的数据流,假设 CPU
中有存储器地址寄存器 MAR
、存储器数据寄存器 MDR
、程序计数器 PC
和指令寄存器 IR
。
1. 取指周期的数据流
PC
中存放现行指令的地址,该地址送到 MAR
并送至地址总线,然后由控制部件 CU
向存储器发出读命令,使对应 MAR
所指单元的内容(指令)经数据总线送至 MDR
,再送至 IR
,与此同时 CU
控制 PC
内容加 1
,形成下一条指令的地址。
2. 间址周期的数据流
一旦取指周期结束,CU
便检查 IR
中的内容,以确定其是否有间址操作,如果需间址操作,则 MDR
中指示形式地址的右 N
位(记作Ad(MDR)
)将被送到 MAR
,又送至地址总线,此后 CU
向存储器发读命令,以获取有效地址并存至 MDR
。
3. 执行周期的数据流
由于不同的指令在执行周期的操作不同,因此执行周期的数据流是多种多样的,可能涉及到 CPU
内部寄存器间的数据传送、或对存储器(或 IO
)进行读/写操作、或对 ALU
的操作,因此,无法用统一的数据流图表示。
4. 中断周期的数据流
CPU
进入中断周期要完成一系列操作,其中 PC
当前的内容必须保存起来,以待执行完中断服务程序后可准确返回到该程序的间断处。
由 CU
把用于保存程序断点的存储器特殊地址(如堆栈指针的内容) 送往 MAR
,并送到地址总线上,同时将 PC
的内容(程序断点)送到 MDR
,并命令存储器写,最终使程序断点经数据总线存入存储器。此外,还需将中断服务程序的入口地址送至 PC
,为下一个指令周期的取指周期作好准备。
8.3 指令流水
为了提高访存速度,一方面要提高存储芯片的性能,另一方面从体系结构上,如采用多体、Cache
等分级存储措施来提高存储器的性能 / 价格比,为了进一步提高整机的处理能力,通常从以下两方面入手:
- ① 提高器件性能
- ② 改善系统结构,开发系统的并行性
而系统的并行性体现在不同等级上,通常分为四个级别:作业级或程序级、任务级或进程级、指令之间级和指令内部级
,前两级为粗粒度,又叫 过程级
,后两级为细粒度,又叫 指令级
,粗粒度并行一般用算法(软件)实现,细粒度并行一般用硬件实现。从计算机体系上看,粗粒度并行是在多个处理机上分别运行多个进程,由多台处理机合作完成一个程序;细粒度并行性是指在处理机的操作级和指令级的并行性,其中指令的流水作业就是一项重要技术。
8.3.1 指令流水原理
指令流水类似于工厂的装配线,装配线利用了产品在装配的不同阶段其装配过程不同这一特点,使不同产品处在不同的装配段上,即每个装配段同时对不同产品进行加工,这样可大大提高装配效率。将这种装配生产线的思想用到指令的执行上,就引出了指令流水的概念。
从上面分析可知,完成条指令实际上也可分为许多阶段。为简单起见,把指令的处理过程分为取指令和执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地重复出现,各条指令是按顺序串行执行的。
图中取指令的操作可由指令部件完成,执行指令的操作可由执行部件完成。进一步分析发现,这种顺序执行虽然控制简单,但执行中各部件的利用率不高,如指令部件工作时,执行部件基本空闲,而执行部件工作时,指令部件基本空闲。如果指令执行阶段不访问主存,则完全可以利用这段时间取下一条指令,这样就使取下一条指令的操作和执行当前指令的操作同时进行,如下图所示,这就是两条指令的重叠,也即指令的二级流水。
由指令部件取出一条指令,并将它暂存起来,如果执行部件空闲,就将暂存的指令传给执行部件执行。与此同时,指令部件又可取出下一条指令并暂存起来,这就叫指令预取。显然,这种工作方式能加速指令的执行。如果取指和执行阶段在时间上完全重叠,相当于指令周期将减半。然而进一步分析流水线,就会发现存在两个原因使得执行效率加倍是不可能的。
- ① 指令的执行时间一般大于取指时间,因此取指阶段可能要等待一段时间
- ② 当遇到条件转移指令时,下一条指令是不可知的
尽管这些因素降低了两级流水线的潜在效率,但还是可以获得一定程度上的加速
8.3.2 流水线的性能
- ① 吞吐率(Throughput Rate)
概述:单位时间内完成 流水线所完成指令
或 输出结果
的 数量
设 m
段的流水线各段时间为 Δt
最大吞吐率:指流水线满负荷运转,没有发生资源冲突,也没有发生数据的相关,没有转移指令等等这些条件下,这条流水线所能达到的最大的吞吐率
T p m a x = 1 △ t T_{pmax} = \frac{1}{\bigtriangleup t} Tpmax=△t1
实际吞吐率:用一段时间内所完成的任务数或者是指令的条数除以完成这些指令或者是完成这些任务所花费的时间
连续处理 n
条指令的吞吐量为:
T p = n m ⋅ △ t + ( n − 1 ) ⋅ △ t T_{p} = \frac{n}{m \cdot \bigtriangleup t +(n-1) \cdot \bigtriangleup t} Tp=m⋅△t+(n−1)⋅△tn
- ② 加速比(Speedup Ratio)
概述:m
段的 流水线的速度
与等功能的 非流水线的速度
之比
设流水线各段时间为 Δt
完成 n
条指令在 m
段流水线上共需
T = m ⋅ △ t + ( n − 1 ) ⋅ △ t T = m \cdot \bigtriangleup t +(n-1) \cdot \bigtriangleup t T=m⋅△t+(n−1)⋅△t
完成 n
条指令在等效的非流水线上共需
T ′ = n m ⋅ △ t T' = nm \cdot \bigtriangleup t T′=nm⋅△t
则加速比:
S p = T ′ T = n m m + n − 1 S_{p} =\frac{T'}{T} = \frac{nm}{m+n-1} Sp=TT′=m+n−1nm
可以看出,在 n>m
时,加速比接近于 m
,即当流水线各段时间相等时,其最大加速比等于流水线的段数。
- 效率(Efficiency)
概述:流水线中各功能段的利用率
由于流水线有 建立时间
和 排空时间
,因此各功能段的 设备不可能一直
处于 工作
状态
流水线中各功能段的利用率:
效率 = 流水线各段处于工作时间的时空区 流水线中各段总的时空区 = m n △ t m ( m + n − 1 ) △ t 效率 = \frac{流水线各段处于工作时间的时空区}{流水线中各段总的时空区}=\frac{mn\bigtriangleup t}{m(m+n-1) \bigtriangleup t} 效率=流水线中各段总的时空区流水线各段处于工作时间的时空区=m(m+n−1)△tmn△t
8.3.3 影响流水线性能的因素
(1)访存冲突
取指令、取操作数和存结果都要访问存储器,就可能出现访存冲突,为了避免冲突,可以采用以下方法:
- ① 设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和取另一条指令的操作数实现时间上的重叠
- ② 采用指令预取技术,将指令预先取到指令队列中排队
- ③ 停顿
(2)相关问题
所谓相关问题是指程序的相近指令之间出现某种关联,使指令流水线出现停顿,影响了指令流水线的效率。
指令间的相关大体可分两类:
- ① 控制相关:如果一条指令要等前一条(或几条)指令作出转移方向的决定后,才能进入流水线,便发生了控制相关,最典型的情况就是条件转移指令
- ② 数据相关:是发生在几条相近的指令间共用一个存储单元或寄存器时发生的
8.3.4 流水线中的多发技术
流水线技术使计算机系统结构产生重大革新,为了进一步发展,除了采用好的指令调度算法、重新组织指令执行顺序、降低相关带米的干扰以及优化编译外,还可开发流水线中的多发技术,没法在一个时钟周期(机器主频的倒数)内,产生更多条指令的结果。常见的多发技术有超标量技术、超流水线技术和超长指令字技术。
1. 超标量技术
它是指在每个时钟周期内可同时并发多条独立指令,实现该技术要求处理机中配置多个功能部件和指令译码电路,以及多个寄存器端口和总线,以便能实现同时执行多个操作,此外还要编译程序决定哪几条相邻指令可并行执行。
超标量计算机不能重新安排指令的执行顺序,但可以通过编译优化技术,把能并行执行的指令搭配起来,挖掘更多的指令并行性。
2. 超流水线技术
该技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分道,如图所示,将原来一个时钟周期又分成三段,这样,在原来的时钟周期内,功能部件被使用三次,使流水线以 3 倍于原来时钟频率的速度运行。
3. 超长指令字技术
超长指令字(VLIW
)技术和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。但超标量的指令来自同一标准的指令流,VLIW
则是由编译程序在编译时 挖掘
出指令间 潜在
的 并行性
后,把 多条
能 并行操作
的指令组合成条具有多个,作码字段的超长指令(指令字长可达几百位),由这条超长指令控制 VLIW
机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。
VLIW
较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对 Cache
的容量要求更大。
8.3.5 流水线结构
1. 指令流水线结构
指令流水线是将指令的整个执行过程用流水线进行分段处理,典型的指令执行过程分为:取指令 — 指令译码 — 形成地址 — 取操作数 — 执行指令 — 回写结果 — 修改指令指针。
指令流水线对机器性能的改善程度取决于把处理过程分解成多少个相等的时间段数。
2. 运算流水线
上述讨论的指令流水线是指令级的流水技术,实际上流水技术还可用于部件级,例浮点加法运算,可分为 对阶
、尾数加
及 结果规格化
三段,每一段都有一个专门的逻辑电路完成操作,并将其结果保存在锁存器中,作为下一段的输入。如图所示,当对阶完成后,将结果存入锁存器,便又可进入下一条指令的对阶运算。
分段原则:每段 操作时间
尽量 一致
8.4 中断系统
8.4.1 概述
采用中断方式实现主机与 I/O
交换信息可使 CPU
和 I/O
并行工作,提升 CPU
的效率。其实,计算机在运行过程中,除了会遇到 I/O
中断外,还有许多意外事件发生,如电源突然掉电,机器硬件突然出现故障,人们在机器运行过程中想随机抽查计算的中间结果,实现人机联系等。
1. 引起中断的各种因素
- ① 人为设置的中断
- ② 程序性事故
- ③ 硬件故障
- ④ I/O 设备
- ⑤ 外部事件
2. 中断系统需解决的问题
- ① 各中断源如何向
CPU
提出中断请求 - ② 当多个中断源同时提出中断请求时,中断系统如何确定优先响应哪个中断源的请求
- ③
CPU
在什么条件、什么时候、以什么方式来响应中断 - ④
CPU
响应中断后如何保护现场 - ⑤
CPU
响应中断后,如何停止原程序的执行而转入中断服务程序的入口地址 - ⑥ 中断处理结束后,
CPU
如何恢复现场,如何返回到原程序的间断处 - ⑦ 在中断处理过程中又出现了新的中断请求,
CPU
该如何吃醋里
8.4.2 中断请求标记和中断判优逻辑
1. 中断请求标记
为了判断是哪个中断源提出请求,在中断系统中必须设置中断请求标记触发器,简称 中断请求触发器
,记作 INTR
,当其状态为 1
时,表示中断源有请求。这种触发器可集中设在 CPU
内,组成一个中断请求标记寄存器,如图所示:
2. 中断判优逻辑
任何一个中断系统,在任一时刻,只能响应一个中断源的请求。但许多中断源提出请求都是随机的,当某一时刻有多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这就叫 中断判优
。各中断源的优先顺序是根据该中断源若得不到及时响应,致使机器工作出错的严重程度而定的。
中断判优可用硬件实现,也可用软件实现。
- 硬件实现(排队器)
- ①
INTR
分散在各个中断源的接口电路中 —链式排队器
- ②
INTR
集中在CPU
的中断系统内
- ①
- 软件实现(程序查询)
8.4.3 中断服务程序入口地址的寻找
- 硬件向量法:利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址,该方法寻找入口地址速度快,在现代计算机中被普遍采用。
- 软件查询法:用软件寻找中断服务程序入口地址的方法叫软件查询法。
计算机可具备软、硬件两种方法寻找入口地址,使用户使用更方便、灵活。
8.4.4 中断响应
1. 响应中断的条件
CPU
响应 I/O
中断的条件是允许中断触发器必须为 1
,这一结论同样适合于其他中断源。
2. 响应中断的时间
与响应 I/O
中断一样,CPU
总是在指令执行周期结束后,响应任何中断源的请求。
3. 中断隐指令
CPU
响应中断后,即进入中断周期。在中断周期内,CPU
要自动完成一系列操作,如:
- ① 保护程序断点
- ② 寻找中断服务程序的入口地址
- ③ 关中断
8.4.5 保护现场和恢复现场
保护现场应该保护程序断点和保护 CPU
内部各寄存器内容的现场两个方面。程序断点的现场由中断隐指令完成,各寄存器的内容可在中断服务程序中由用户(或系统)用机器指令编程实现。
恢复现场是指在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分工作也由中断服务程序完成。
8.4.6 中断屏蔽技术
中断屏蔽技术主要用于多重中断。
1. 多重中断的概念
当 CPU
正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而 CPU
又响应了这新的请求,暂时停止了正在运行的服务程序,转去执行新的中断服务程序,这就叫 多重中断
,或叫 中断嵌套
。
2. 实现多重中断的条件
- ① 提前设置
开中断
指令 - ② 优先级别高的中断源有权中断优先级别低的中断源
为了保证级别低的中断源不干扰比其级别高的中断源的中断处理过程,保证上述 ② 的实施,可采用屏蔽技术。
3. 屏蔽技术
- (1)屏蔽触发器与屏蔽字
如图所示,程序中断接口电路中完成触发器 D
、中断请求触发器 INTR
和屏蔽触发器 MASK
三者之间的关系。当该中断源屏蔽时(MASK=1),此时即使 D=1
,中断查询信号到来时刻将 INTR
置 0
,CPU
接收不到该中断源的中断请求,即它被屏蔽。若该中断源未被屏蔽(MASK=0),则当设备工作已完成时(D=1),中断查询信号将 INTR
置 1
,表示该中断源向 CPU
发出中断请求,该信号送至排队器进行优先级判断。
如果排队器集中设在 CPU
内,加上屏蔽条件,就可组成具有屏蔽功能的排队器。
显然,对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个 屏蔽寄存器
,屏蔽寄存器的内容称作 屏蔽字
。屏蔽字与中断源的优先级别是一一对应的,如表所示
在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断资源的屏蔽作用。
- (2)屏蔽技术可以改变优先等级
利用屏蔽技术可以任意改变中断源的优先等级。例如 5 级中断源级别高于 6 级中断源,但若在中断服务程序中先设置一个屏蔽字 0000101111111111
,这样,当 5、6 级中断源同时请求时,由于 5 级被屏蔽,6 级未被屏蔽,因此 CPU
优先响应 6 级中断源的请求。
- (3)屏蔽技术的其他作用
屏蔽技术还能给程序控制带来更大的灵活性。例如,在浮点运算中,当程序员估计到执行某段程序时可能出现 阶上溢
,但又不希望因 阶上溢
而使机器停机,为此可设一屏蔽字,使对应 阶上溢
的屏蔽位为 1
,这样,即使出现 阶上溢
,机器也不停机。
4. 多重中断的断点保护
多重中断时,每次中断出现的断点都必须保存起来,中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的。
断点可以保存在堆栈中,也可以保存在特定的存储单元内。
上篇:第七章、指令系统
下篇:第九章、控制单元的功能