《计算机组成原理》(第3版)第8章 CPU的结构和功能 复习笔记

第8章 CPU的结构和功能

一、CPU的结构

(一)CPU的含义
CPU实质包括运算器和控制器两大部分。
对于冯·诺依曼结构的计算机而言,一旦程序进入存储器后,就可由计算机自动完成取指令和执行指令的任务,控制器就是专用于完成此项工作的,它负责协调并控制计算机各部件执行程序的指令序列,其基本功能是取指令、分析指令和执行指令。
分析指令包括两部分内容:其一,分析此指令要完成什么操作,即控制器需发出什么操作命令;其二,分析参与这次操作的操作数地址,即操作数的有效地址。
执行指令就是根据分析指令产生的“操作命令”和“操作数地址”的要求,形成操作控制信号序列,通过对运算器、存储器以及I/O设备的操作,执行每条指令。
此外,控制器还必须能控制程序的输入和运算结果的输出以及对总线的管理,甚至能处理机器运行过程中出现的异常情况和特殊请求,即处理中断的能力。
总之,CPU必须具有控制程序的顺序执行(称指令控制)、产生完成每条指令所需的控制命令(称操作控制)、对各种操作加以时间上的控制(称时间控制)、对数据进行算术运算和逻辑运算(数据加工)以及处理中断等功能。

(二)CPU结构框图
根据CPU的功能不难设想,要取指令,必须有一个寄存器专用于存放当前指令的地址;要分析指令,必须有存放当前指令的寄存器和对指令操作码进行译码的部件;要执行指令,必须有一个能发出各种操作命令序列的控制部件CU;要完成算术运算和逻辑运算,必须有存放操作数的寄存器和实现算逻运算的部件ALU;为了处理异常情况和特殊请求,还必须有中断系统。可见,CPU可由四大部分组成,如图8-1所示。将图8-1细化,又可得图8-2。图中ALU部件实际上只对CPU内部寄存器的数据进行操作。
在这里插入图片描述
图8-1 使用系统总线的CPU
在这里插入图片描述
图8-2 CPU的内部结构

(三)CPU的寄存器
CPU中的寄存器大致可分两类:一类属于用户可见寄存器,用户可对这类寄存器编程,以及通过优化使CPU因使用这类寄存器而减少对主存的访问次数;另一类属于控制和状态寄存器,用户不可对这类寄存器编程,它们被控制部件使用,以控制CPU的操作,也可被带有特权的操作系统程序使用,从而控制程序的执行。
1.用户可见寄存器
通常CPU执行机器语言访问的寄存器为用户可见寄存器,按其特征又可分为以下几类:
(1)通用寄存器
通用寄存器可由程序设计者指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器。
(2)数据寄存器
数据寄存器用于存放操作数,其位数应满足多数数据类型的数值范围,有些机器允许使用两个连续的寄存器存放双倍字长的值。还有些机器的数据寄存器只能用于保存数据,不能用于操作数地址的计算。
(3)地址寄存器
地址寄存器用于存放地址,其本身可以具有通用性,也可用于特殊的寻址方式,如用于基址寻址的段指针(存放基地址)、用于变址寻址的变址寄存器和用于堆栈寻址的栈指针。地址寄存器的位数必须足够长,以满足最大的地址范围。
(4)条件码寄存器
这类寄存器中存放条件码,它们对用户来说是部分透明的。条件码是CPU根据运算结果由硬件设置的位。条件码可被测试,作为分支运算的依据。
2.控制和状态寄存器
(1)MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址。
(2)MDR:存储器数据寄存器,用于存放欲存入存储器中的数据或最近从存储器中读出的数据。
(3)PC:程序计数器,存放现行指令的地址,通常具有计数功能。当遇到转移类指令时,PC的值可被修改。
(4)IR:指令寄存器,存放当前欲执行的指令。

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

二、指令周期

(一)指令周期的基本概念
CPU每取出并执行一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间,如图8-3所示。图中的取指阶段完成取指令和分析指令的操作,又称取指周期;执行阶段完成执行指令的操作,又称执行周期。在大多数情况下,CPU就是按“取指—执行—再取指一再执行…”的顺序自动工作的。
如乘法指令,其执行阶段所要完成的操作比加法指令多得多,故它的执行周期超过了加法指令,如图8-4所示。
在这里插入图片描述
图8-3 指令周期定义示意图
在这里插入图片描述
图8-4 各种指令周期的比较
间接寻址的指令周期就包括取指周期、间址周期和执行周期3个阶段,其中间址周期用于取操作数的有效地址,因此间址周期介于取指周期和执行周期之间,如图8-5所示。
在这里插入图片描述
图8-5 具有间址周期的指令周期
一个完整的指令周期应包括取指、间址、执行和中断4个子周期,如图8-6所示。由于间址周期和中断周期不一定包含在每个指令周期内,故图中用菱形框判断。
在这里插入图片描述
图8-6 指令周期流程
总之,上述4个周期都有CPU访存操作,只是访存的目的不同。取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数(当指令为访存指令时),中断周期是为了保存程序断点。这4个周期又可称为CPU的工作周期,为了区别它们,在CPU内可设置4个标志触发器,如图8-7所示。
在这里插入图片描述
图8-7 CPU工作周期的标志
图8-7所示的FE、IND、EX和INT分别对应取指、间址、执行和中断4个周期,并以“1”状态表示有效,它们分别由1→FE、1→IND、1→EX和1→INT这4个信号控制。
设置CPU工作周期标志触发器对设计控制单元十分有利。例如,在取指阶段,只要设置取指周期标志触发器FE为1,由它控制取指阶段的各个操作,便获得对任何一条指令的取指命令序列。又如,在间接寻址时,间址次数可由间址周期标志触发器IND确定,当它为“0”状态时,表示间接寻址结束。

(二)指令周期的数据流
为了便于分析指令周期中的数据流,假设CPU中有存储器地址寄存器MAR、存储器数据寄存器MDR、程序计数器PC和指令寄存器IR。
1.取指周期的数据流
在这里插入图片描述
图8-8 取指周期数据流
图8-8所示的是取指周期的数据流。PC中存放现行指令的地址,该地址送到MAR并送至地址总线,然后由控制部件CU向存储器发读命令,使对应MAR所指单元的内容(指令)经数据总线送至MDR,再送至IR,并且CU控制PC内容加1,形成下一条指令的地址。
2.间址周期的数据流
间址周期的数据流如图8-9所示。一旦取指周期结束,CU便检查IR中的内容,以确定其是否有间址操作,如果需要间址操作,则MDR中指示形式地址的右N位(记作Ad(MDR))将被送到MAR,又送至地址总线,此后CU向存储器发读命令,以获取有效地址并存至MDR。
在这里插入图片描述
图8-9 间址周期数据流
3.执行周期的数据流
由于不同的指令在执行周期的操作不同,因此执行周期的数据流是多种多样的,可能涉及CPU内部寄存器间的数据传送、对存储器(或I/O)进行读写操作或对ALU的操作,因此,无法用统一的数据流图表示。
4.中断周期的数据流
CPU进入中断周期要完成一系列操作,其中PC当前的内容必须保存起来.以待执行完中断服务程序后可以准确返回到该程序的间断处,这一操作的数据流如图8-10所示。
在这里插入图片描述
图8-10 中断周期数据流

三、指令流水

(一)指令流水原理
指令流水类似于工厂的装配线,装配线利用了产品在装配的不同阶段其装配过程不同这一特点,使不同产品处在不同的装配段上,即每个装配段同时对不同产品进行加工,这样可大大提高装配效率。将这种装配生产线的思想用到指令的执行上,就引出了指令流水的概念。
完成一条指令实际上也可分为许多阶段,为简单起见,把指令的处理过程分为取指令和执行指令两个阶段,在不采用流水技术的计算机里,取指令和执行指令是周而复始地重复出现,各条指令按顺序串行执行的,如图8-11所示。
在这里插入图片描述
图8-11 指令的串行执行
如果指令执行阶段不访问主存,则完全可以利用这段时间取下一条指令,这样就使取下一条指令的操作和执行当前指令的操作同时进行,如图8-12所示,这就是两条指令的重叠,即指令的二级流水。
在这里插入图片描述
图8-12 指令的二级流水
由指令部件取出一条指令,并将它暂存起来,如果执行部件空闲,就将暂存的指令传给执行部件执行。与此同时,指令部件又可取出下一条指令并暂存起来,这称为指令预取。显然,这种工作方式能加速指令的执行。如果取指和执行阶段在时间上完全重叠,相当于将指令周期减半。然而进一步分析流水线,就会发现存在两个原因使得执行效率加倍是不可能的。
假设上述各段的时间都是相等的(即每段都为一个时间单元),于是可得图8-13所示的指令六级流水时序。在这个流水线中,处理器有6个操作部件,同时对6条指令进行加工,加快了程序的执行速度。
在这里插入图片描述
图8-13 指令六级流水时序

(二)影响流水线性能的因素
要使流水线具有良好的性能,必须设法使流水线能畅通流动,即必须做到充分流水,不发生断流。但通常由于在流水过程中会出现三种相关,使流水线不断流实现起来很困难,这三种相关是结构相关、数据相关和控制相关。
结构相关是当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的。控制相关是当流水线遇到分支指令和其他改变PC值的指令时引起的。
不同类型指令在各流水段的操作是不同的,表8-1列出了ALU类指令、访存类(取数、存数)指令和转移类指令在各流水段中所进行的操作。
表8-1 不同类型指令在各流水段中所进行的操作
在这里插入图片描述在这里插入图片描述
下面分析上述三种相关对流水线工作的影响。
1.结构相关
结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,故又有资源相关之称。
通常,大多数机器都是将指令和数据保存在同一存储器中,且只有一个访问口,如果在某个时钟周期内,流水线既要完成某条指令对操作数的存储器访问操作,又要完成另一条指令的取指操作,这就会发生访存冲突。如表8-2中,在第4个时钟周期,第i条指令(LOAD)的MEM段和第i+3条指令的IF段发生了访存冲突。解决冲突的方法可以让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作,如表8-3所示。当然,如果第i条指令不是LOAD指令,在MEM段不访存,也就不会发生访存冲突。
表8-2 两条指令同时访存造成结构相关冲突
在这里插入图片描述
表8-3 解决访存冲突的一种方案
在这里插入图片描述
2.数据相关
数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。例如,流水线要执行以下两条指令:
ADD R1,R2,R3  ;(R2)+(R3)→R1
SUB R4,R1,R5  ;(R1)-(R5)→R4
这里第二条SUB指令中R1的内容必须是第一条ADD指令的执行结果。可见正常的读写
顺序是先由ADD指令写入R1,再由SUB指令来读R1。在非流水线时,这种先写后读的顺序是自然维持的。但在流水线时,由于重叠操作,使读写的先后顺序关系发生了变化,如表8-4所示。
表8-4 ADD和SUB指令发生先写后读(RAW)的数据相关冲突
在这里插入图片描述
由表8-4可见,在第5个时钟周期,ADD指令方可将运算结果写入R1,但后继SUB指令在第3个时钟周期就要从R1中读数,使先写后读的顺序改变为先读后写,发生了先写后读(RAW)的数据相关冲突。如果不采取相应的措施,按表8-4的读写顺序,就会使操作结果出错。解决这种数据相关的方法可以采用后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
表8-5列出了未对数据相关进行特殊处理的流水线,表中ADD指令在WB段才将计算结果写入寄存器R1中,但SUB指令在其ID段就要从寄存器R1中读取该计算结果。同样,AND指令、OR指令也要受到这种相关关系的影响。对于XOR指令,由于其ID段(第6个时钟周期)在ADD指令的WB段(第5个时钟周期)之后,因此可以正常操作。
表8-5 未对数据相关进行特殊处理的流水线
在这里插入图片描述
如果采用后推法,即将相关指令延迟到所需操作数被写回到寄存器后再执行的方式,就可解决这种数据相关冲突,其流水线如表8-6所示。显然这将要使流水线停顿3个时钟周期。
表8-6 对数据相关进行特殊处理的流水线

另一种解决方法是采用定向技术,又称为旁路技术或相关专用通路技术。图8-16示出了带有旁路技术的ALU执行部件。图中有两个暂存器,当 AND指令将进入EX段时,ADD指令的执行结果已存入暂存器2,SUB指令的执行结果已存入暂存器1,而暂存器2的内容(存放送往R1的结果)可通过旁路通道,经多路开关送到ALU中,这里的定向传送仅发生在ALU内部。
在这里插入图片描述
图8-14 带有旁路技术的ALU部件
①写后读相关:指令j试图在指令i写入寄存器前就读出该寄存器内容,这样,指令j就会错误地读出该寄存器旧的内容。
②读后写相关:指令j试图在指令i读出寄存器之前就写入该寄存器,这样,指令i就错误地读出该寄存器新的内容。
③写后写相关:指令j试图在指令i写入寄存器之前就写入该寄存器,这样,两次写的先后次序被颠倒,就会错误地使由指令i写入的值成为该寄存器的内容。
上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。在非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则既可能发生RAW相关,还可能发生WAR和WAW相关。
3.控制相关
控制相关主要是由转移指令引起的。统计表明,转移指令约占总指令的1/4左右,比起数据相关,它会使流水线丧失更多的性能。当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,它可能将程序计数器PC内容改变成转移目标地址,也可能只是使PC加上一个增量,指向下一条指令的地址。图8-15示意了条件转移的效果。
在这里插入图片描述
图8-15 条件转移对指令流水操作的影响
为了解决控制相关,可以采用尽早判别转移是否发生,尽早生成转移目标地址;预取转移成功或不成功两个控制流方向上的目标指令;加快和提前形成条件码;提高转移方向的准准率等方法。有关的详细内容,读者可查阅相关资料进一步了解。

(三)流水线性能
流水线性能通常用吞吐率、加速比和效率3项指标来衡量。
1.吞吐率(Throughput Rate)
在指令级流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量。吞吐率又有最大吞吐率和实际吞吐率之分。
最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为△t,则最大吞吐率为:
在这里插入图片描述
2.加速比(Speedup Ratio)
流水线的加速比是指m段流水线的速度与等功能的非流水线的速度之比。如果流水线各段时间均为△t,则完成n条指令在m段流水线上共需T=m*△t+(n-1)*△t时间。而在等效的非流水线上所需时间为T’=nm△t。故加速比Sp
在这里插入图片描述
3.效率(Efficiency)
效率是指流水线中各功能段的利用率。由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态,总有一段空闲时间。图8-16是4段(m=4)流水线的时空图,各段时间相等,均为△t。图中mn△t是流水线各段处于工作时间的时空区,而流水线中各段总的时空区是m(m+n-1)△t。通常用流水线各段处于工作时间的时空区与流水线中各段总的时空区之比来衡量流水线的效率。用公式表示为
在这里插入图片描述
图8-16 各段时间相等的流水线时空图

(四)流水线中的多发技术
流水线技术使计算机系统结构产生重大革新,为了进一步发展,除了采用好的指令调度算法、重新组织指令执行顺序、降低相关带来的干扰以及优化编译外,还可开发流水线中的多发技术,设法在一个时钟周期(机器主频的倒数)内,产生更多条指令的结果。常见的多发技术有超标量技术、超流水线技术和超长指令字技术。假设处理一条指令分4个阶段:取指(FI)、译码(ID)、执行(EX)和回写(WR)。图8-17是三种多发技术与普通四级流水线的比较,其中图8-17(a)为普通四级流水线,一个时钟周期出一个结果。
在这里插入图片描述
图8-17 四种流水技术的比较
1.超标量技术
超标量技术如图8-20(b)所示。它是指在每个时钟周期内可同时并发多条独立指令,即以并行操作方式将两条或两条以上(图中所示为3条)指令编译并执行。
要实现超标量技术,要求处理机中配置多个功能部件和指令译码电路,以及多个寄存器端口和总线,以便能实现同时执行多个操作,此外还要编译程序决定哪几条相邻指令可并行执行。
2.超流水线技术
超流水线技术是将一些流水线寄存器插入到流水线段中,好比将流水线再分段,如图8-17(c)所示。图中将原来的一个时钟周期又分成3段,使超流水线的处理器周期比普通流水线的处理器周期(如图8-17(a)所示)短,这样,在原来的时钟周期内,功能部件被使用3次,使流水线以3倍于原来时钟频率的速度运行。与超标量计算机一样,硬件不能调整指令的执行顺序,靠编译程序解决优化问题。
3.超长指令字技术
超长指令字(VLIW)技术和超标量技术都是采用多条指令在多个处理部件中并行处理的体系结构,在一个时钟周期内能流出多条指令。但超标量的指令来自同一标准的指令流,VLIW则是由编译程序在编译时挖掘出指令间潜在的并行性后,把多条能并行操作的指令组合成一一条具有多个操作码字段的超长指令(指令字长可达几百位),由这条超长指令控制VLIW机中多个独立工作的功能部件,每一个操作码字段控制一个功能部件,相当于同时执行多条指令,如图8-17(d)所示。VLIW较超标量具有更高的并行处理能力,但对优化编译器的要求更高,对Cache的容量要求更大。

(五)流水线结构
1.指令流水线结构
指令流水线是将指令的整个执行过程用流水线进行分段处理,典型的指令执行过程分为“取指令—指令译码—形成地址—取操作数—执行指令—回写结果—修改指令指针”这几个阶段,与此相对应的指令流水线结构由图8-18所示的几个部件组成。
在这里插入图片描述
图8-18 指令流水线结构框图
2.运算流水线
上述讨论的指令流水线是指令级的流水技术,实际上流水技术还可用于部件级。例如,浮点加法运算,可以分成“对阶”、“尾数相加”及“结果规格化”3段,每一段都有一个专门的逻辑电路完成操作,并将其结果保存在锁存器中,作为下一段的输入。如图8-19所示,当对阶完成后,将结果存入锁存器,便又可进入下一条指令的对阶运算。
在这里插入图片描述
图8-19 浮点加运算操作流水线

四、中断系统

I/O中断只是CPU众多中断中的一种,引起中断的因素很多,为了处理各种中断,CPU内通常设有处理中断的机构-中断系统,以解决各种中断的共性问题。
(一)概述
1.引起中断的各种因素
(1)人为设置的中断
这种中断一般称为自愿中断,因为它是在程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理,如图8-20所示。
在这里插入图片描述
图8-20 自愿中断示意
(2)程序性事故
如定点溢出、浮点溢出、操作码不能识别、除法中除数出现“非法”等,这些都属于由程序设计不周而引起的中断。
(3)硬件故障
硬件故障类型很多,如插件接触不良、通风不良、磁表面损坏、电源掉电等,这些都属于硬件设备故障。
(4)I/O设备
I/O设备被启动以后,一旦准备就绪,便向CPU发出中断请求。每个I/O设备都能发中断请求,因此这种中断与计算机所配置的I/O设备多少有关。
(5)外部事件
用户通过键盘来中断现行程序属于外部事件中断。
2.中断系统需解决的问题
(1)各中断源如何向CPU提出中断请求;
(2)当多个中断源同时提出中断请求时,中断系统如何确定优先响应哪个中断源的请求;
(3)CPU在什么条件、什么时候、以什么方式来响应中断;
(4)CPU响应中断后如何保护现场;
(5)CPU响应中断后,如何停止原程序的执行而转入中断服务程序的入口地址;
(6)中断处理结束后,CPU如何恢复现场,如何返回到原程序的间断处;
(7)在中断处理过程中又出现了新的中断请求,CPU该如何处理。
只有在中断系统中配置相应的硬件和软件,才能完成中断处理任务。

(二)中断请求标记和中断判优逻辑
1.中断请求标记
为了判断是哪个中断源提出请求,在中断系统中必须设置中断请求标记触发器,简称中断请求触发器,记作INTR。当其状态为“1”时,表示中断源有请求。这种触发器可集中设在CPU内,组成一个中断请求标记寄存器,如图8-21所示。
在这里插入图片描述
图8-21 中断请求标记寄存器
图中1,2,3,4,5,…,n分别对应掉电、过热、主存读写校验错、阶上溢、非法除法……打印机输出等中断源的中断请求触发器,其中任意一个触发器为1,即表明对应的中断源提出了中断请求。显然,中断请求触发器越多,说明计算机处理中断的能力越强。
2.中断判优逻辑
任何一个中断系统,在任一时刻,只能响应一个中断源的请求。但许多中断源提出请求都是随机的,当某一时刻有多个中断源提出中断请求时,中断系统必须按其优先顺序予以响应,这称为中断判优。各中断源的优先顺序是根据该中断源若得不到及时响应,致使机器工作出错的严重程度而定的。中断判优可用硬件实现,也可用软件实现。
(1)硬件排队
硬件排队又分两种。一种为链式排队器,对应中断请求触发器分散在各个接口电路中的情况,每一个接口电路中都设有一个非门和一个与非门,它们犹如链条一样串接起来。另一种排队器设在CPU内,如图8-22所示,图中假设其优先顺序按1、2、3、4由高向低排列。这样,当最高优先级的中断源有请求时INTR1=1,就可封住比它级别低的中断源的请求。
在这里插入图片描述
图8-22 集中在CPU内的排队器
(2)软件排队
软件排队是通过编写查询程序实现的,其程序框图如图8-23所示。程序按中断源的优先等级,从高至低逐级查询各中断源是否有中断请求,这样就可以保证CPU首先响应级别高的中断源的请求。
在这里插入图片描述
图8-23 按A>B>C…优先级别的软件排队

(三)中断服务程序入口地址的寻找
由于不同的中断源对应不同的中断服务程序,故准确找到中断服务程序的入口地址是中断处理的核心问题。通常有两种方法寻找入口地址:硬件向量法和软件查询法。
1.硬件向量法就是利用硬件产生向量地址,再由向量地址找到中断服务程序的入口地址。向量地址由中断向量地址形成部件产生,这个电路可分散设置在各个接口电路中,也可设置在CPU内,如图8-24所示。
由向量地址寻找中断服务程序的入口地址通常采用两种办法。一种在向量地址内存放一条无条件转移指令,CPU响应中断时,只要将向量地址(如12H)送至PC,执行这条指令,便可无条件转向打印机服务程序的入口地址200。另一种是设置向量地址表,如图8-25所示。
硬件向量法寻找入口地址速度快,在现代计算机中被普遍采用。
在这里插入图片描述
图8-24 集中在CPU内的向量地址形成部件
在这里插入图片描述
图8-25 中断向量地址表
2.软件查询法
用软件寻找中断服务程序入口地址的方法称为软件查询法,其框图同图8-23。由图8-23中可见,当查到某一中断源有中断请求时,接着安排一条转移指令,直接指向此中断源的中断服务程序入口地址,机器便能自动进入中断处理。至于各中断源对应的入口地址,则由程序员(或系统)事先确定。这种方法不涉及硬件设备,但查询时间较长。计算机可具备软、硬件两种方法寻找入口地址,使用户使用更方便、灵活。

(四)中断响应
1.响应中断的条件
CPU响应I/O中断的条件是允许中断触发器必须为“1”,这一结论同样适合于其他中断源。在中断系统中有一个允许中断触发器EINT,它可被开中断指令置“1”,也可被关中断指令置“0”。当允许中断触发器为“1”时,意味着CPU允许响应中断源的请求;当其为“0”时,意味着CPU禁止响应中断。故当EINT=1,且有中断请求(即中断请求标记触发器INTR=1)时,CPU可以响应中断。
2.响应中断的时间
与响应I/O中断一样,CPU总是在指令执行周期结束后,响应任何中断源的请求,如图8-26所示。在指令执行周期结束后,若有中断,CPU则进入中断周期;若无中断,则进入下一条指令的取指周期。
之所以CPU在指令的执行周期后进入中断周期,是因为CPU在执行周期的结束时刻统一向所有中断源发中断查询信号,只有此时,CPU才能获知哪个中断源有请求。如图8-26所示,图中INTRi(i=1,2,…)是各个中断源的中断请求触发器,触发器的数据端来自各中断源,当它们有请求时,数据端为“1”,而且只有当CPU发出的中断查询信号输入到触发器的时钟端时,才能将INTR置“1”。
在这里插入图片描述
图8-26 CPU在统一时间发中断查询信号
在某些计算机中,有些指令执行时间很长,若CPU的查询信号一律安排在执行周期结束时刻,有可能因CPU发现中断请求过迟而出差错。为此,可在指令执行过程中设置若干个查询断点,CPU在每个“查询断点”时刻均发中断查询信号,以便发现有中断请求便可及时响应。
3.中断隐指令
CPU响应中断后,即进入中断周期。在中断周期内,CPU要自动完成一系列操作,具体如下:
(1)保护程序断点
保护程序断点就是要将当前程序计数器PC的内容(程序断点)保存到存储器中。它可以存在存储器的特定单元(如0号地址)内,也可以存入堆栈。
(2)寻找中断服务程序的入口地址
由于中断周期结束后进入下条指令(即中断服务程序的第一条指令)的取指周期,因此在中断周期内必须设法找到中断服务程序的入口地址。由于入口地址有两种方法获得,因此在中断周期内也有两种方法寻找入口地址。
其一,在中断周期内,将向量地址送至PC(对应硬件向量法),使CPU执行下一条无条件转移指令,转至中断服务程序的入口地址。
其二,在中断周期内,将如图8-26所示的软件查询入口地址的程序(又称中断识别程序)首地址送至PC,使CPU执行中断识别程序,找到入口地址(对应软件查询法)。
(3)关中断
CPU进入中断周期,意味着CPU响应了某个中断源的请求,为了确保CPU响应后所需做的一系列操作不至于又受到新的中断请求的干扰,在中断周期内必须自动关中断,以禁止CPU再次响应新的中断请求。图8-27是CPU自动关中断的示意图。图中允许中断触发器EINT和中断标记触发器INT可选用标准的R-S触发器。当进入中断周期时,INT为“1”状态,触发器原端输出有一个正跳变,经反相后产生一个负跳变,使EINT置“0”,即关中断。
在这里插入图片描述
图8-27 硬件关中断示意图
上述保护断点、寻找入口地址和关中断这些操作都是在中断周期内由一条中断隐指令完成的。所谓中断隐指令,即在机器指令系统中没有的指令,它是CPU在中断周期内由硬件自动完成的一条指令。

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

(六)中断屏蔽技术
1.多重中断的概念
当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个新的请求,暂时停止正在运行的服务程序,转去执行新的中断服务程序,这称为多重中断,又称中断嵌套,如图8-28所示。如果CPU对新的请求不予响应,待执行完当前的服务程序后再响应,即为单重中断。中断系统若要具有处理多重中断的功能,必须具备各项条件。
在这里插入图片描述
图8-28 多重中断示意图
2.实现多重中断的条件
①提前设置“开中断”指令。
由上述分析可知,CPU进入中断周期后,由中断隐指令自动将EINT置“0”,即关中断,这就意味着CPU在执行中断服务程序中禁止响应新的中断请求。CPU若想再次响应中断请求,必须开中断,这一任务通常由中断服务程序中的开中断指令实现。由于开中断指令设置的位置不同,决定了CPU能否实现多重中断。多重中断“开中断”指令的位置前于单重中断,从而保证了多重中断允许出现中断嵌套。
②优先级别高的中断源有权中断优先级别低的中断源。
在满足①的前提下,只有优先级别更高的中断源请求才可以中断比其级别低的中断服务程序,反之则不然。中断处理示意图如图8-29所示。
在这里插入图片描述
图8-29 多重中断处理示意图
为了保证级别低的中断源不干扰比其级别高的中断源的中断处理过程,保证上述②的实施,可采用屏蔽技术。
3.屏蔽技术
(1)屏蔽触发器与屏蔽字
当中断源被屏蔽时(MASK=1),此时即使D=1,中断查询信号到来时刻只能将INTR置“0”,CPU接收不到该中断源的中断请求,即它被屏蔽。若该中断源未被屏蔽(MASK=0),当设备工作已完成时(D=1),中断查询信号则将INTR置“1”,表示该中断源向CPU发出中断请求,该信号送至排队器进行优先级判断。
如果排队器集中设在CPU内,加上屏蔽条件,就可组成具有屏蔽功能的排队器,如图8-30所示。
在这里插入图片描述
图8-30 具有屏蔽功能的排队器
显然,对应每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成一个屏蔽寄存器,屏蔽寄存器的内容称为屏蔽字。屏蔽字与中断源的优先级别是一一对应的,如表8-7所示。
表8-7 中断优先级与屏蔽字的关系
在这里插入图片描述
(2)屏蔽技术可改变优先等级
严格地说,优先级包含响应优先级和处理优先级。响应优先级是指CPU响应各中断源请求的优先次序,这种次序往往是硬件线路已设置好的,不便于改动。处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就是处理的优先次序。
采用了屏蔽技术后,可以改变CPU处理各中断源的优先等级,从而改变CPU执行程序的轨迹。例如,A、B、C、D这4个中断源的优先级别按A→B→C→D降序排列,根据这一次序,CPU执行程序的轨迹如图8-31所示。当4个中断源同时提出请求时,处理次序与响应次序一致。
在这里插入图片描述
图8-31 CPU执行程序的轨迹
在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。例如,将上述4个中断源的处理次序改为A→D→C→B,则每个中断源所对应的屏蔽字发生了变化,如表8-8所示。表中原屏蔽字对应A→B→C→D的响应顺序,新屏蔽字对应A→D→C→B的处理顺序。
表8-8 中断处理次序与屏蔽字的关系
在这里插入图片描述
在同样中断请求的情况下,CPU执行程序的轨迹发生了变化,如图8-32所示。
在这里插入图片描述
图8-32 改变中断处理次序后CPU执行程序的轨迹
采用了屏蔽技术后,在中断服务程序中需设置新的屏蔽字,流程如图8-33所示。与中断服务程序相比,增加了置屏蔽字和恢复屏蔽字两部分内容。而且为了防止在恢复现场过程中又出现新的中断,在恢复现场前又增加了关中断,恢复屏蔽字之后,必须再次开中断。
在这里插入图片描述
图8-33 采用屏蔽技术的中断服务程序
(3)屏蔽技术的其他作用
屏蔽技术还能给程序控制带来更大的灵活性。例如,在浮点运算中,当程序员估计到执行某段程序时可能出现“阶上溢”,但又不希望因“阶上溢”而使机器停机,为此可设一屏蔽字,使对应“阶上溢”的屏蔽位为“1”,这样,即使出现“阶上溢”,机器也不停机。
4.多重中断的断点保护
多重中断时,每次中断出现的断点都必须保存起来,如图8-28中共出现了3次中断,有3个断点k+1、l+1、m+1需保存。中断系统对断点的保存都是在中断周期内由中断隐指令实现的,对用户是透明的。
断点可以保存在堆栈中,由于堆栈先进后出的特点,因此图8-28中的k+1先进栈,接着是l+1进栈,最后是m+1进栈。出栈时,按相反顺序便可准确返回到程序间断处。
断点也可保存在特定的存储单元内,例如约定一律将程序断点存至主存的O号地址单元内。由于保存断点是由中断隐指令自动完成的,因此3次中断的断点都将存入0地址单元,这势必造成前两次存入的断点k+1和l+1被冲掉。为此,在中断服务程序中的开中断指令之前,必须先将0地址单元的内容转存至其他地址单元中,才能真正保存每一个断点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/871220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ARCGIS PRO 要素标注背景色透明度的设置

使用ArcGIS Pro 设置标注背景色的透明度 一、点击标注属性 二、点击符号、注释 三、下拉框选择背景 四、背景符号 五、点击颜色 六、编辑颜色 七、应用

黑神话:悟空游戏用的什么服务器?

黑神话:悟空游戏用的什么服务器?《黑神话:悟空》游戏使用的是基于云计算的强大服务器,具体型号和配置未公开。这些服务器在游戏发布初期就表现出极强的处理能力和稳定性,尽管同时在线人数一度突破百万,但整…

开放式耳机的优缺点?这里有开放式耳机推荐品牌

随着开放式耳机功能的增加和创新,导致很多人不知道开放式耳机哪款好,开放式耳机和封闭式耳机的优缺点有哪些?还有就是开放式耳机漏音严重吗?等问题。下面我来跟大家一起了解了解开放式耳机为什么好,有哪些值得入手的。…

基于 ComfyUI 原生的 FLUX.1 分区域融合出图技巧,效果超级棒!

前言 今天给小伙伴们分享一下 ComfyUI 的原生的分区域融合出图技巧,不需要额外下载插件哦! 简单来介绍一下,就是把一张大图分割成几个部分,然后每个部分写自己区域的提示词,最终汇总融合成一张图片,可能不…

揭秘GPT-5,探索未来人工智能的无限可能

引言 在过去的几年里,人工智能领域的快速发展引发了全球范围内的广泛关注和讨论。作为这一浪潮的先锋,OpenAI 推出的 GPT 系列模型已经成为了生成式人工智能的代名词。随着 GPT-4 的发布,它在各种任务中表现出的强大能力进一步巩固了其在行业…

C# 不一样的洗牌算法---Simd指令

洗牌算法&#xff0c;以随机打乱数组中元素的位置 测试数据创建 int[] _data; Random rng new Random(); protected override void CreateData() {_data new int[_size];for (int i 0; i < _data.Length; i){_data[i] i;} } 普通打乱数组元素位置 protected overrid…

MySQL 索引合并优化实践

在生产环境的数据库中&#xff0c;经常会看到有些 SQL 的 where 条件包含&#xff1a;普通索引等值 主键范围查询 order by limit。明明走普通索引效率更高&#xff0c;但是选择走了索引合并&#xff0c;本文就对这种索引合并的情况研究一下。 作者&#xff1a;张洛丹&#x…

【Linux】Linux环境基础开发工具使用之Linux调试器-gdb使用

目录 一、程序发布模式1.1 debug模式1.2 release模式 二、默认发布模式三、gdb的使用结尾 一、程序发布模式 程序的发布方式有两种&#xff0c;debug模式和release模式 1.1 debug模式 目的&#xff1a;主要用于开发和测试阶段&#xff0c;目的是让开发者能够更容易地调试和跟…

JSON Web Token (JWT): 理解与应用

JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。JWT通常用于身份验证和授权目的&#xff0c;因为它可以使用JSON对象在各方…

【Python】函数进阶(中)

2、函数和函数名 函数名其实就是一个变量&#xff0c;这个变量只不过代指的是函数而已。 例如&#xff1a; 注意&#xff1a;函数必须先定义才能被调用执行&#xff08;Python是解释型语言&#xff0c;代码从上到下边解释边执行&#xff09; #正确代码 #错误代码 &#xff0…

20 数据可视化

20 数据可视化 本章概述一. `elasticsearch`实现数据统计1.1 创建用户信息索引1.1.1 控制台创建`aggs_user`索引1.1.2 `aggs_user`索引结构初始化1.1.3 创建`aggs_user`索引的`EO`对象1.1.4 用户类型枚举1.1.5 数据初始化****************************************************…

Redis中缓存穿透、缓存击穿、缓存雪崩的详解

如何理解Redis缓存的穿透、击穿、雪崩问题&#xff1a; 缓存穿透 是指缓存中和数据库中都没有数据&#xff0c;而用户不断访问&#xff0c;导致这个不存在的数据每次请求都要到存储层去查询&#xff0c;这样失去了意义。 缓存穿透的解决方案有哪些? 缓存null值布隆过滤增强…

C++观察者模式Observer

组件协作 –(都是晚绑定的&#xff09; ----观察者模式 为某些对象建立一种通知依赖的关系&#xff0c; 只要这个对象状态发生改变&#xff0c;观察者对象都能得到通知。 但是依赖关系要松耦合&#xff0c;不要太依赖。 eg&#xff1a;做一个文件分割器&#xff0c;需要一个…

基于ESP32的OEE分析开发板上MQTT协议的实现

整理自 《Implementation of MQTT Protocol on ESP32-Based OEE Analysis Development Board》&#xff0c;作者是Amir Akbar Wicaksono, Yuli Kurnia Ningsih, 和 Indra Surjati&#xff0c;发表于《MITOR: Jurnal Teknik Elektro》。论文讨论了在工业4.0背景下&#xff0c;通…

Centos7 message日志因dockerd、kubelet、warpdrive、containerd等应用迅速增长

问题&#xff1a;公司服务器在部署一套业务后&#xff0c;message日志记录大量的dockerd、kubelet、warpdrive、containerd应用日志&#xff0c;每天增加2G大小的日志 解决方案&#xff1a; 前期吐槽下&#xff1a;发现某个帖子&#xff0c;需要会员或者花钱才能看&#xff0c…

企业高性能web服务器知识点合集

文章目录 nginx源码编译安装平滑升级及版本回滚平滑升级版本回滚 服务启动脚本核心配置全局配置参数优化调整root与alias自定义错误日志自定义错误页面检测文件是否存在长链接配置下载服务器的配置 nginx高级配置nginx状态页面压缩功能变量内置变量自定义变量 nginx rewrite指令…

【软件测试面试题】WEB功能测试(持续更新)

Hi&#xff0c;大家好&#xff0c;我是小码哥。最近很多朋友都在说今年的互联网行情不好&#xff0c;面试很难&#xff0c;不知道怎么复习&#xff0c;我最近总结了一份在软件测试面试中比较常见的WEB功能测试面试面试题合集&#xff0c;希望对大家有帮助。 建议点赞收藏再阅读…

腾讯云 AI 代码助手四大基础功能介绍

引言 随着技术的不断进步&#xff0c;软件开发者们面临着日益复杂的编程任务和挑战。他们不仅需要处理大量的代码&#xff0c;还要在保证代码质量的前提下&#xff0c;提高开发效率。在这样的背景下&#xff0c;一款能够辅助开发者进行高效编码的工具显得尤为重要。 腾讯云AI…

sentinel 02 核心类

01 02. 03. 04. 05. 4.1 4.2 4.3 4.4 5调用链

从0到1:AI与低代码如何推动企业创新

引言 在当今瞬息万变的商业环境中&#xff0c;创新已成为企业在激烈市场竞争中立于不败之地的关键驱动力。面对快速变化的市场需求、技术进步和全球化竞争&#xff0c;企业亟需打破传统的增长模式&#xff0c;从而实现真正意义上的突破性创新。“从0到1”这一理念&#xff0c;源…