写在前面的话:此系列文章为笔者学习计算机组成原理时的个人笔记,分享出来与大家学习交流。使用教材为唐朔飞第3版,笔记目录大体与教材相同。
网课
计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili
笔记
《计算机组成原理》唐朔飞 第5章 输入输出系统 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第8章 CPU的结构和功能 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第9章 控制单元的功能 - 学习笔记_友人帐_的博客-CSDN博客
《计算机组成原理》唐朔飞 第10章 控制单元的设计 - 学习笔记_友人帐_的博客-CSDN博客
课后习题答案
计算机组成原理(第三版)唐朔飞-课后习题(完整版)_计算机组成原理唐朔飞第三版答案_蓝净云的博客-CSDN博客
哈尔滨工业大学计组实验
计算机组成原理实验一 运算器 预习报告_基本运算器实验_旅僧的博客-CSDN博客
计算机组成原理实验二 存储系统 预习报告_旅僧的博客-CSDN博客
计算机组成原理实验三 系统总线和具有基本输入输出功能的总线接口 预习报告_旅僧的博客-CSDN博客
计算机组成原理实验四 微程序控制器 实验报告_旅僧的博客-CSDN博客
第八章 CPU的结构和功能
8.1 CPU的结构
8.1.1 CPU的功能
- 指令控制:控制程序的顺序执行
- 操作控制:产生完成每条指令所需的控制命令
- 时间控制:对各种操作加以时间上的控制
- 数据加工:对数据进行算数运算和逻辑运算
- 处理中断
8.1.2 CPU的结构框图
8.1.3 CPU的寄存器
- 用户可见寄存器
可对这类寄存器编程,以及通过优化使CPU因使用这类寄存器而减少对主存的访问次数。
(1)通用寄存器
可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器。
(2)数据寄存器
用于存放操作数,其位数应满足多数数据类型的数值范围,有些机器允许使用两个连读的寄存器存放双倍字长的值。还有些机器的数据寄存器只能用于保存数据,不能用于操作数地址的计算。
(3)地址寄存器
用于存放地址,其本身可以具有通用性,也可用于特殊的寻址方式。位数必须足够长,以满足最大的地址范围。
(4)条件码寄存器
存放条件码,对用户来说是部分透明的。条件码是CPU根据运算结果由硬件设置的位。将条件码放到一个或多个寄存器中,就构成了条件码寄存器。
- 控制寄存器
被控制部件使用,以控制CPU的操作,也可被带有特权的操作系统程序使用,从而控制程序的执行。
(1)MAR 存储器地址寄存器
用于存放将被访问的存储单元的地址。
(2)MDR 存储器数据寄存器
用于存放欲存入存储器中的数据或最近从存储器中读出的数据。
(3)PC 程序计数器
存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC值可被修改。
(4)IR 指令寄存器
存放当前欲执行的指令。
- 状态寄存器
(1)状态寄存器
存放条件码。
(2)PSW寄存器
存放程序状态字(中断时保存的程序现场中的一些状态)。
8.1.4 控制单元和中断系统
控制单元(CU)是提供完成计算机全部指令操作的微操作命令序列部件。现代计算机中微操作命令序列的形成方法有两种:一种是组合逻辑设计方法,为硬连线逻辑;另一种是微程序设计方法,为存储逻辑。
中断系统主要用于处理计算机的各种中断。
8.2 指令周期
8.2.1 基本概念
CPU每取出并执行一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间。
CPU的工作周期:
- 取指周期:取指令、分析指令
- 间址周期:取有效地址
- 执行周期:执行指令
- 中断周期:保存程序断点
注意:
- 各种指令的指令周期是不相同的:
- 遇到间接寻址的指令时,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数,会增加一个间址周期:
- CPU在每条指令执行阶段结束前,都要发中断查询信号,以检测是否有某I/O设备提出中断请求。如果有请求,CPU则要进入中断响应阶段,又称中断周期。
标志触发器
为了区别CPU的4个周期,在CPU内可设置4个标志触发器:
FE、IND、EX、INT分别对应取指、间址、执行和中断4个周期,并以“1”状态表示有效,它们分别由 1 → F E 、 1 → I N D 、 1 → E X 、 1 → I N T 1\rightarrow FE、1\rightarrow IND、1\rightarrow EX、1\rightarrow INT 1→FE、1→IND、1→EX、1→INT个信号控制。
8.2.2 指令周期的数据流
假设CPU中有存储器地址寄存器MAR、存储器数据寄存器MDR、程序计数器PC、和指令寄存器IR
- 取指周期的数据流
- 间址周期的数据流
一旦取指周期结束,CU便检查IR中的内容,以确定其是否有间址操作,如果需要间址操作,则MDR中指示形式地址的右位(记作Ad(MDR))将被送到MAR,又送至地址总线,此后CU向存储器发读命令,以获取有效地址并存至MDR。
- 执行周期的数据流
不同的指令在执行周期的操作不同。
- 中断周期的数据流
8.3 指令流水
8.3.1 指令流水原理
(1)系统的并发性
并行:时间上互相重叠
- 并发:两个或两个以上事件在同一时间段发生
- 同时:两个或两个以上事件在同一时刻发生
并行的等级
- 过程级(程序、进程),粗粒度,软件实现
- 指令级(指令之间、指令内部),细粒度,硬件实现
(2)指令流水示例
(取指令和执行指令两阶段)
①串行执行
②二级流水
指令部件工作时,执行部件基本空闲,而执行部件工作时,指令部件基本空闲。如果指令执行阶段不访问主存,则完全可以利用这段时间取下一条指令,这样就使取下一条指令的操作和执行当前指令的操作同时进行。
由指令部件取出一条指令,并将它暂存起来,如果执行部件空闲,就将暂存的指令传给执行部件执行。与此同时,指令部件又可取出下一条指令并暂存起来,这称为指令预取。
影响二级流水效率加倍的因素
-
执行时间 > 取指时间
增加指令部件缓冲区,将取出的指令放入缓存。
-
条件转移指令
必须等上条指令执行结束,才能确定下条指令的地址,造成时间损失。可以采用分支预测等方法。
将指令的处理过程分解为更细的阶段:
- 取指 (FI) :从存储器取出一条指令并暂时存入指令部件的缓冲区。
- 指令译码 (DI) :确定操作性质和操作数地址的形成方式。
- 计算操作数地址 (CO) :计算操作数的有效地址,涉及寄存器间接寻址、间接寻址、变址寻址、基址寻址、相对寻址等各种地址计算方式。
- 取操作数 (FO) :从存储器中取操作数(若操作数在寄存器中,则无须此阶段)。
- 执行指令( EI) :执行指令所需的操作,并将结果存于目的位置(寄存器中)。
- 写操作数 (WO) :将结果存入存储器。
六级流水示例:
8.3.2 影响流水线性能的因素
(1)结构相关
结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,
解决访存冲突:
- 可以让后面的指令暂停一下(一个时钟周期),再继续运行。
- 设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突。
- 采用指令预取技术。
(2)数据相关
数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的。
例如,有i和j两条指令,i在前,j在后:
- 写后读相关 RAW
指令j试图在指令i写入寄存器前就读出该寄存器内容,这样,指令j就会错误地读出该寄存器旧的内容。
- 读后写相关 WAR
指令j试图在指令i读出寄存器之前就写入该寄存器,这样,指令i就错误地读出该寄存器新的内容。
- 写后写相关 WAW
指令j试图在指令i写入寄存器之前就写入该寄存器,这样,两次写的先后次序被颠倒,就会错误地使由指令i写入的值成为该寄存器的内容。
解决冲突:
后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果生成。
定向技术,又称为旁路技术或相关专用通路技术。不将运行结果放置在某个位置,而是直接将其送到其他指令所需要的地方。
(3)控制相关
控制相关是当流水线遇到分支指令和其他改变PC值的指令时引起的。
解决方案:
- 尽早判别转移是否发生,尽早生成转移目标地址;
- 预取转移成功或不成功两个控制流方向上的目标指令;
- 加快和提前形成条件码;
- 提高转移方向的猜准率等。
8.3.3 流水线性能
(1)吞吐率 Throughput Rate
指单位时间内流水线所完成指令或输出结果的数量。分为最大吞吐率和实际吞吐率。
假设指令流水线分为 m m m段,每段的时间均为 Δ t \Delta t Δt
- 最大吞吐率
流水线满负荷运行,无冲突的情况下的吞吐率。
T p m a x = 1 Δ t T_{pmax}=\frac{1}{\Delta t} Tpmax=Δt1
- 实际吞吐率
流水线完成n条指令的实际吞吐率。
连续处理n条指令,第一条指令需要 m Δ t m\Delta t mΔt时间,其余(n-1)条指令,每隔 Δ t \Delta t Δt就会有一个结果输出,共需要 m Δ t + ( n − 1 ) Δ t m\Delta t+(n-1)\Delta t mΔt+(n−1)Δt的时间。
T p = n m Δ t + ( n − 1 ) Δ t = 1 Δ t [ 1 + m − 1 n ] = T p m a x 1 + m − 1 n T_p=\frac{n}{m\Delta t+(n-1)\Delta t}=\frac{1}{\Delta t[1+\frac{m-1}{n}]}=\frac{T_{pmax}}{1+\frac{m-1}{n}} Tp=mΔt+(n−1)Δtn=Δt[1+nm−1]1=1+nm−1Tpmax
**(2)加速比 Speedup Ratio **
指m段流水线的速度与等功能的非流水线的速度之比(使用流水线提高的效率)。
对于m条指令,理想流水线需要 T = m Δ t + ( n − 1 ) Δ t T=m\Delta t + (n-1)\Delta t T=mΔt+(n−1)Δt时间,非流水线需要 T ′ = n m Δ t T'=nm\Delta t T′=nmΔt时间。
S p = n m Δ t m Δ t + ( n − 1 ) Δ t = n m m + n − 1 = m 1 + m − 1 n S_p=\frac{nm\Delta t}{m\Delta t + (n-1)\Delta t}=\frac{nm}{m+n-1}=\frac{m}{1+\frac{m-1}{n}} Sp=mΔt+(n−1)ΔtnmΔt=m+n−1nm=1+nm−1m
(3)效率 Efficiency
指流水线中各功能段的利用率。由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态,总有一段空闲时间。
效率 = 流水线各段处于工作时间的时空区 流水线中各段总的时空区 效率=\frac{流水线各段处于工作时间的时空区}{流水线中各段总的时空区} 效率=流水线中各段总的时空区流水线各段处于工作时间的时空区
E = m n Δ t m ( m + n − 1 ) Δ t = n m + n − 1 = S p m = T p Δ t E=\frac{mn\Delta t}{m(m+n-1)\Delta t}=\frac{n}{m+n-1}=\frac{S_p}{m}=T_p\Delta t E=m(m+n−1)ΔtmnΔt=m+n−1n=mSp=TpΔt
8.3.4 流水线中的多发技术
(1)超标量技术 Superscalar
在每个时钟周期内可同时并发多条独立指令,进入到多条流水线执行。(图示为3条流水线)
不存在数据相关的指令可实现指令级并行。
超标量计算机不能重新安排指令的执行顺序,但可以通过编译优化技术,在高级语言翻译成机器语言时精心安排,把能并行执行的指令搭配起来,挖掘更多的指令并行性。
(2)超流水线技术 Superpipeline
将一些流水线寄存器插入流水线段中,在一个时钟周期内再分段,在一个时钟周期内一个功能部件使用多次。
与超标量计算机一样,硬件不能调整指令的执行顺序,靠编译程序解决优化问题。
(3)超长指令字技术 VLIW
由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一条具有多个操作码字段的超长指令(指令字长可达几百位),由这条超长指令控制VLIW机中多个独立工作的功能部件,由每一个操作码字段控制一个功能部件,相当于同时执行多条指令。
(多个处理部件)
8.3.5 流水线结构
- 指令流水线结构
将指令的整个执行过程用流水线进行分段处理。(上述所讲)
- 运算流水线
流水技术还可用于部件级。
例如,浮点加法运算,可以分成对阶、尾数加、结果规格化3段,每一段都有一个专门的逻辑电路完成操作,并将其结果保存在锁存器中,作为下一段的输入。
分段原则:每段操作时间尽量一致
8.4 中断系统
8.4.1 概述
(1)引起中断的各种因素
- 人为设置的中断:例如转管指令
- 程序性事故:如定点溢出、浮点溢出、操作码不能识别、除法中出现非法等
- 硬件故障
- I/O设备
- 外部事件:用户通过键盘来中断现行程序等
(2)中断源的分类
通常将能引起中断的各个因素称为中断源。
- 不可屏蔽中断:这类中断CPU不能禁止响应,如电源掉电;
- 可屏蔽中断,CPU可根据该中断源是否被屏蔽来确定是否给予响应。若未屏蔽则能响应;若已被屏蔽,则CPU不能响应。
(3)中断系统需要解决的问题
①各中断源如何向CPU提出中断请求。
②当多个中断源同时提出中断请求时,中断系统如何确定优先响应哪个中断源的请求。
③CPU在什么条件、什么时候、以什么方式来响应中断。
④CPU响应中断后如何保护现场。
⑤CPU响应中断后,如何停止原程序的执行而转入中断服务程序的入口地址。
⑥中断处理结束后,CPU如何恢复现场,如何返回到原程序的间断处。
⑦在中断处理过程中又出现了新的中断请求,CPU该如何处理。
8.8.4 中断请求标记和中断判优逻辑
(1)中断请求标记
为了判断是哪个中断源提出请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为“1”时,表示中断源有请求。这种触发器可集中设在CPU内,组成一个中断请求标记寄存器。
其中任意一个触发器为1,即表明对应的中断源提出了中断请求。
INTR可以集中在CPU的中断系统内,也可以分散到各个中断源中。
(2)中断判优逻辑
- 硬件排队
①链式排队器:分散在各个中断源的接口电路中
②集中在CPU内
- 软件排队
通过编写查询程序实现
8.4.3 中断服务程序入口地址的寻找
(1)硬件向量法
利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内。
由向量地址寻找中断服务程序的入口地址通常采用两种办法:
- 在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址送至PC,执行这条指令,便可无条件转向服务程序的入口地址。
- 设置向量地址表:该表设在存储器内,存储单元的地址为向量地址,存储单元的内容为入口地址,只要访问向量地址所指示的存储单元,便可获得入口地址。
硬件向量法寻找入口地址速度快,在现代计算机中被普遍采用。
(2)软件查询法
当查到某一中断源有中断请求时,接着安排一条转移指令,直接指向此中断源的中断服务程序入口地址,机器便能自动进入中断处理。至于各中断源对应的入口地址,则由程序员(或系统)事先确定。
不涉及硬件设备,但查询时间较长。
8.4.4 中断响应
(1)响应中断的条件
在中断系统中有一个允许中断触发器EINT,当为“1”时,CPU允许响应中断源的请求。
(2)响应中断的时间
CPU在执行周期的结束时刻统一向所有中断源发中断查询信号,响应任何中断源的请求。
也有些计算机,可在指令执行过程中设置若干个查询断点,CPU在每个“查询断点”时刻均发中断查询信号,以便发现有中断请求便可及时响应。
(3)中断隐指令
隐指令是中断周期内,CPU要自动完成的一系列操作,不是某一条指令。
- 保护程序断点
将PC内容保存在存储器中
- 保存在存储器的特定单元
- 存入堆栈
- 寻找中断服务程序的入口地址
- 硬件向量法:将向量地址送至PC
- 软件查询法:将中断识别程序首地址送至PC,执行中断识别程序,使用软件查询发找到入口地址。
- 关中断
为了确保CPU响应中断请求后所需做的一系列操作不至千又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应新的中断请求。
8.4.5 保护现场和恢复现场
该包括保护程序断点和保护CPU内部各寄存器内容的现场两个方面。
保护现场由中断隐指令完成,各寄存器内的现场可在中断服务程序中由用户(或系统)用机器指令编程实现;
恢复现场是指在中断返回前,必须将寄存器的内容恢复到中断处理前的状态,这部分工作也由中断服务程序完成。
8.4.6 中断屏蔽技术
中断屏蔽技术主要用于多重中断。
(1)多重中断的概念
(2)实现多重中断的条件
①提前设置“开中断”指令。
②优先级别高的中断源有权中断优先级别低的中断源。
(3)屏蔽技术
- 屏蔽触发器与屏蔽字
屏蔽触发器MASK,置1表示设备被屏蔽。
(完成触发器D,中断请求触发器INTR,屏蔽触发器MASK)
将排队器集中设置在CPU内,加上屏蔽条件,就组成了具有屏蔽功能的排队器。
对应每个中断请求触发器INTR就有一个屏蔽触发器MASK,将所有屏蔽触发器组合在一起,就构成了一个屏蔽寄存器,其内容称为屏蔽字。
屏蔽字与中断源的优先级别是一一对应的。
在中断服务程序中设置适当的屏蔽字,能起到对优先级别不同的中断源的屏蔽作用。如果在4级中断源的服务程序中设置一个屏蔽字0001111111111111,由于第 1~3 位为0,意味着第1~3级的中断源未被屏蔽,因此在开中断指令后,比第4级中断源级别更高的1、2、3级中断源可以中断4级中断源的中断服务程序,实现多重中断。
- 屏蔽技术可改变优先等级
优先级包含响应优先级和处理优先级。响应优先级是指CPU响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动。处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。采用了屏蔽技术后,可以改变CPU处理各中断源的优先等级。
如下图:在B的服务程序中,由于设置了新的屏蔽字0100,即A、C、D可打断B,而A已经执行完毕,C的响应优先级高于D,故CPU响应C,进入C的服务程序。同理……
采用了屏蔽技术后,在中断服务程序中需设置新的屏蔽字,流程如下:
- 屏蔽技术的其他作用
能给程序控制带来更大的灵活性。
例如,在浮点运算中,当程序员估计到执行某段程序时可能出现“阶上溢”,但又不希望因“阶上溢”而使机器停机,为此可设一屏蔽字,使对应“阶上溢”的屏蔽位为“1”。这样,即使出现“阶上溢",机器也不停机。
(4)多重断点的断点保护
中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的。
断点可以保存在堆栈中,也可保存在约定好的特定的存储单元内。
**程序断点存入“0”地址的断点保护:**0地址内容转存。