赞
踩
本章从分析CPU的功能和内部结构入手,详细讨论机器完成一条指令的全部过程,以及进一步提高数据的处理能力、开发系统的并行性所采取的流水技术。此外,本章还进一步概括了中断技术在提高整机系统效能方面的作用。
第一章说明了CPU实质上包括运算器和控制器两大部分,第六章讨论了计算机内各种运算以及相应的硬件配置,这里重点介绍控制器的功能。
对于冯·诺依曼结构的计算机而言,一旦程序进入存储器后,就可以由计算机自动完成取指令和执行指令的任务,控制器就是完成此项工作的,它负责协调并控制计算机各部件执行程序的指令序列,基本功能是取出指令、分析指令、执行指令。
此外控制器还必须能控制程序的输入和运算结果的输出(即控制主机与I/O设备交换信息)以及对总线的管理,甚至能处理机器运行过程中出现的异常情况和特殊请求,即处理中断的能力。
总之CPU必须具有:
根据CPU的功能不难设想:
要取出指令,必须有一个寄存器专用于存放当前指令的地址,
要分析指令,必须有一个能存放当前指令的寄存器和对操作指令码进行译码的部件,
要执行指令,必须有一个能发出各种操作命令序列的控制部件CU,
要完成算术运算和逻辑运算,必须有存放操作数的寄存器和实现算逻运算的部件ALU,
为了能够处理异常情况和特殊请求,还必须有中断系统。
CPU由如下四个部分(寄存器、CU、ALU、中断系统)组成:
将上图细化,还可以得出下图,图中的ALU实质上只对CPU内部寄存器的数据进行操作。
寄存器是所有存储器中速度最快、容量最小且价格最贵的,通常位于CPU内部,CPU中的寄存器大致可分为两类:
一类是用户可见寄存器,用户对这类寄存器可以编程,以及通过优化使CPU因使用这类寄存器而减少对主存的访问次数。
另一类属于控制和状态寄存器,用户不可对这类寄存器编程,它们被控制部件使用,以控制CPU的操作,也可被带有特权的操作系统程序使用,从而控制程序执行。
1.用户可见寄存器
通常CPU执行机器语言访问的寄存器为用户可见寄存器,按其特征又可以分为以下几类:
在调用子程序前,必须将所有的用户可见寄存器的内容保存起来,这种保存可以由CPU自动完成,也可由程序编程保存,视不同的机器进行处理。
2. 控制和状态寄存器
CPU还有一类寄存器用于控制CPU的操作或运算。在一些机器里,大部分这类寄存器对用户是透明的。如以下四种寄存器在指令执行过程中起重要作用。
通过这四个寄存器,CPU和主存可交换信息。例如,将现行指令地址从PC送至MAR,启动存储器作读操作,存储器就可将指令地址单元内的指令读至MDR,再由MDR读至IR。
在CPU内部必须给ALU提供数据,因此ALU必须可直接访问MDR和用户可见寄存器ALU的外围还可以有另一些寄存器,这些寄存器用于ALU的输入/输出以及用于和MDR及用户可见寄存器交换数据。
在CPU的控制和状态寄存器中,还有用来存放程序状态字PSW的寄存器,该寄存器用来存放条件码和其他状态信息。在具有中断系统的机器中还有中断标记寄存器。
3. 举例
对于不同计算机的CPU,寄存器组织是不一样的。下图给出了三种微处理器的寄存器组成。
控制单元(CU)是提供完成计算机全部指令操作的微操作命令序列部件。现代计算机中微操作命令序列的形成方法有两种:
中断系统主要用于处理计算机的各种中断。
CPU每取出并执行一条指令所需的全部时间称为指令周期,也即CPU完成一条指令的时间,如下图所示:
取值阶段完成取指令和分析指令的操作,又称取指周期。
执行阶段完成执行指令的操作,又称执行周期。
在大多数情况下,CPU就是按取值-执行-再取值-再执行的顺序自动工作。
由于各种指令操作功能不同,因此各种指令的指令周期是不相同的。例如,无条件转移指令JMP X,在执行阶段不需要访问主存,而且操作简单,完全可以在取指阶段的后期将转移地址X送至PC,以达到转移的目的。这样,JMP X指令的指令周期就是取指周期。又如一地址格式的加法指令ADD X,在指令阶段首先要从X所指示存储单元中取出操作数,然后和ACC的内容相加,结果存于ACC,故这种指令的指令周期在取指和执行阶段各访问一次存储器,其指令周期就包括两个存取周期。再如乘法指令,其执行阶段所要完成的操作比加法指令还有多得多,故它的执行周期会更加的长。
此外,当遇到间接寻址的指令时,由于指令字中只给出操作数有效地址的地址,因此,为了取出操作数,需先访问一次存储器,取出有效地址,然后再访问存储器,取出操作数。这样就包括取指周期、间址周期和执行周期三个阶段了,其中间址周期用于取操作数的有效地址,因此间址周期介于取指周期和执行周期之间。
由第五章可知,当CPU采用中断方式实现主机与I/O设备交换信息时,CPU在每条指令执行阶段结束前,都要发出中断查询信号,以检测是否有某个I/O设备提出中断请求。如果有请求,CPU则要进入中断响应阶段,又称中断周期。在此阶段,CPU必须将程序断点保存到存储器中。这样,一个完整的指令周期应包括取指、间址、执行和中断4个子周期,如下图所示,由于间址周期和中断周期不一定包含在每个指令周期内,故图中用菱形框判断。
为了便于分析指令周期中的数据流,假设CPU中有存储器地址寄存器MAR、存储器数据寄存器MDR、程序计数器PC和指令寄存器IR。
1.取指周期的数据流
下图所示的是取指周期的数据流。PC中存放现行指令的地址,该地址送到MAR并送至地址总线,然后由控制部件CU向存储器发读命令,使对应MAR所指单元的内容(指令)经数据总线送至MDR,再送至IR,并且CU控制PC内容加1,形成下一条指令的地址。
2.间址周期的数据流
间址寻址的数据流如下图所示,一旦取指周期结束。CU便检查IR中的内容,以确定其是否有间址操作,如果需要间址操作,则MDR中指示形式地址的右N位(记作Ad(MAR))将被送至MAR,又送至地址总线,此后CU向存储器发读命令,以获取有效地址并存至MDR。
3.执行周期的数据流
由于不同的指令在执行周期的操作不同,因此执行周期的数据流是多种多样的,可能涉及CPU内部寄存器间的数据传送、对存储器(或者I/O)进行读写操作或对ALU的操作,因此,无法用统一的数据流图表示。
4.中断周期的数据流
CPU进入中断周期要完成一系列操作,其中PC当前的内容必须保存起来,以待执行完中断服务程序后可以准确返回到该程序的间断处,这一操作的数据流如下图所示。
图中由CU把用于保存程序断电的存储器特殊地址(如栈指针的内容)送至MAR,并送到地址总线上,然后由CU向存储器发写命令,并将PC里面的内容(程序断点)送至MDR,最终使程序断点经数据总线存入存储器。此外,CU还需将中断服务程序的入口地址送至PC,为下一个指令周期的取指周期做好准备。
由前面的各章介绍可知,为了提高访存速度,一方面要提高存储芯片的性能,另一方面可以从体系结构上,如采用多体、Cache等分级存储措施来提高存储器的性能/价格比。为了提高主机与I/O交换信息的速度,可以采用DMA方式,也可以采用多总线结构,将速度不一的I/O分别挂到不同带宽的总线上,以解决总线的瓶颈问题。为了提高运算速度,可以采用高速芯片和快速进位链,以及改进算法等措施。为了进一步提高处理机速度,通常可从提高器件的性能和改进系统的结构,开发系统的并行性两方面入手。
对于并发和并行的区别,我觉得这个例子讲的很好,只是我再做个补充,可以认为单核CPU的计算机只能并发,任一时刻只可能有一个任务在执行,但是多个任务在一个时间段内可以交替执行,多核CPU的计算机就可以并发,因为同一时刻可以由多个核执行不同的任务。
并行性体现在不同的等级上。
通常有四个等级:作业级/程序级、任务级/进程级、指令之间级、指令内部级。
前两个等级(作业级/程序级、任务级/进程级)为粗粒度,又称为过程级。
后两级(指令之间级、和指令内部级)为细粒度,又称为指令级
指令流水类似于工厂的装配线,装配线利用产品在装配的不同阶段其装配过程不同这一特点,使不同的产品处在不同的装配段上,即每个装配段同时对不同产品进行加工,这样可大大提高装配效率。将这种装配生产线的思想用到指令的执行上,就引出了指令流水的概念。
完成一条指令可以简单地分为两个阶段:取出指令、执行指令,在不采用流水技术的计算机里,取出指令和执行指令是周而复始地重复出现,各条指令是按照顺序串行执行的,如下图所示:
图中取指令的操作可由指令部件完成,执行指令的操作可由执行部件完成。进一步分析发现,这种顺序指令虽然控制简单,但执行中各部件的利用率不高,如指令部件工作时,执行部件基本空闲,而执行部件工作时,指令部件基本空闲。如果指令执行的阶段不访问主存,那么完全可以利用这段时间取下一条指令,这样就使取下一条指令的操作和执行当前指令的操作同时进行,如下图所示,这就是两条指令的重叠,即指令的二级流水。
由指令部件取出一条指令,并将它暂存起来,如果执行部件空闲,就将暂存的指令传给执行部件执行。与此同时,指令部件又可以取出下一条指令并暂存起来,这称为指令预取。显然,这种工作方式能加速指令的执行。如果取指和执行阶段在时间上完全重叠,相当于将指令周期减半。然而进一步分析流水线,就会发现存在两个原因使得执行效率不可能加倍。
通常为了减少时间损失,会采用猜测法:
即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令,这样,如果条件不成立,转移没有发生, 则没有时间损失,若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。
尽管这些因素降低了两级流水线的潜在效率,但还是可以获得一定程度的加速。为了进一步提高处理速度,可将指令的处理过程分解在更细的几个阶段。
要使流水线具有良好的性能,必须设法使流水线能畅通流动,即必须做到充分流水,不发生断流。但通常由于在流水过程中会出现三种相关,使流水线不断流实现起来很困难,这三种相关是结构相关、数据相关、控制相关。
结构相关是当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。
数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的。
控制相关是流水线遇到分支指令和其他改变PC值的指令时引起的。
为了讨论方便起见,假设流水线由5段组成,它们分别是取指令(IF)、指令译码/读寄存器(ID)、执行/访存有效地址计算(EX)、存储器访问(MEM)、结果写回寄存器(WB)。
不同类型指令在各流水段的操作是不同的,下方的表列出了ALU类指令、访存类(取数、存数)指令和转移类指令在各流水线中所进行的操作。
下面分析上述三种相关对流水线工作的影响。
1. 结构相关
结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,故又有资源相关之称。
通常,大多数机器都是将指令和数据保存在同一存储器中,且只有一个访问口,如果在某个时钟周期内,流水线既要完成某条指令对操作数的存储器访问操作,又要完成另一条指令的取指操作,这就会发生访存冲突。
如下表中,在第四个时钟周期,第i条指令(LOAD)的MEM段和第i+3条指令的IF段发生了访存冲突。解决冲突的方法可以让流水线在完成前一条指令对数据的存储器访问时,暂停取后一条指令的操作,如下下表所示,当然,如果第i条指令不是LOAD指令,在MEM段不访存,也就不会发生访存冲突。
解决访存冲突的另一种方法是设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和取另一条指令的操作数实现时间上的重叠。
还可以采用指令预取技术,例如,在CPU(8086)中设置指令队列,将指令预先取到指令队列中排队。**指令预取技术的实现基于访存周期很短的情况,**例如,在执行指令阶段,取数时间很短,因此在执行指令时,主存会有空闲,此时,只要指令队列空出,就可以取下一条指令,并放至空出的指令队列中,从而保证在执行第K条指令的同时对第K+1条指令进行译码,实现执行K与分析K+1的重叠。
2. 数据相关
数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。例如,流水线要执行以下两条指令:
根据指令对同一寄存器读和写操作先后次序关系,**数据相关冲突分为写后读相关(Read After Write,RAW)、读后写相关(Write After Read,WAR)和写后写相关(Write After Write,WAW)。**例如,有i和j两条指令,i指令在前,j指令在后,则三种不同类型的数据相关含义如下:
上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。在非按序流动的流线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则既可能发生RAW相关,也可能发生WAR和WAW相关。
3. 控制相关
控制相关主要是由转移指令引起的。统计表明,转移指令约占总指令的1/4左右,比起数据相关来,它会使得流水线丧失更多的性能。当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,它可能将程序计数器PC内容改变成转移目标地址,也可能只是使PC加上了一个增量,指向下一条指令的地址。下图示意了条件转移的效果:
流水线性能通常用吞吐率、加速比、效率三项指标来衡量。
** 吞吐量**
在指令级流水线中,**吞吐率是指单位时间内流水线所完成指令或输出结果的数量。**吞吐率又有最大吞吐率和实际吞吐率之分。
加速比
效率
流水线技术使得计算机系统结构发生重大革新,为了进一步发展,除了采用好的指令调度算法、重新组织指令执行顺序、降低相关带来的干扰以及优化编译外,还可开发流水线中的多发技术,设法在一个时钟周期(机器主频的倒数)内,产生更多条指令的结果。常见的多发技术有超标量技术、超流水线技术和超长指令字技术。假设处理一条指令分为4个阶段:取指(FI)、译码(ID)、执行(EX)和回写(WR)。
下图是三种多发技术与普通四级流水线技术的比较:
1. 指令流水线结构
2. 运算流水线
第五章已经介绍了有关中断的一些概念,特别是对I/O中断做了较详细的讨论。实际上I/O中断只是CPU众多中断中的一种,引起中断的因素有很多,为了除了各种中断,CPU内通常设有处理中断的机构———中断系统,以解决各种中断的共性问题,本节进一步分析中断系统的功能,以便更深入地了解中断系统在CPU中的作用和地位。
为了提高计算机的效率,为了处理一些异常情况以及实时控制、多道程序和多处理的需要,提出了中断的概念。
1. 引起中断的各种因素
引起中断的因素有很多,大致可分为以下几类:
人为设置的中断
这种中断一般称为自愿中断,因为它是程序中人为设置的,故一旦机器执行这种人为中断,便自愿停止现行程序而转入中断处理,如下图所示:
图中的转管指令可能是转至从I/O设备调入一批信息到主存的管理程序,也可能是转至将一批数据送往打印机的管理程序。显然,当用户程序执行了转管指令后,便中断现行程序,转入管理程序,这种转移完全是自愿的,
程序性事故
如定点溢出、浮点溢出、操作码不能识别、除法中出现非法等,这些都属于有程序设计不周而引起的中断。
硬件故障
硬件故障类型很多,如插件接触不良、通风不良、磁表面损坏、电源掉电等,这些都属于硬设备故障。
I/O设备
I/O设备启动以后,一旦准备就绪,便向CPU发出中断请求。每个I/O设备都能发中断请求,因此这种中断与计算机所配置的I/O设备多少有关。
外部事件
用户通过键盘用中断现行程序属于外部事件中断。
上述各种中断因素,除了自愿中断是人为的,大多都是随机的,通常将能引起中断的各个因素称为中断源。
中断源分为两大类,
一类为不可屏蔽中断,这类CPU不能禁止响应,如电因素称为中断源。
另一类为可屏蔽中断,对可屏蔽中断源的请求,CPU可根据该中断源是否被屏蔽来确定是否给予响应。
若未屏蔽则能响应,若已经被屏蔽,则CPU不能响应。
2. 中断系统需解决的问题
解决上述问题的方法:在中断系统中配置相应的硬件和软件
由于不同的中断源对应不同的中断服务程序,故准确找到服务程序的入口地址是中断处理的核心问题。通常有两种方法寻址入口地址:硬件向量法、软件查询法
中断屏蔽技术主要用于多重中断。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。