综述:本书中的这个章节——中央处理器主要讲述了cpu在计算机运行过程中,如何控制指令有序高效的进行,也就是说主要讲述的是cpu的控制功能的实现和一些细节。控制的本质是协调高效,可以让计算机像一个现代化自动化流水线工厂一般处理运算问题。
cpu的主要功能
控制器:取指令、分析指令、执行指令
运算器:完成算术运算和逻辑运算
中断处理:对计算机的异常和特殊请求进行处理
cpu基本结构
运算器:由ALU和各种帮助运算的寄存器组成。
- 算术逻辑单元(运算核心)
- 暂存寄存器(暂存主存中读来的数据)
- 累加寄存器(加法运算的输入端)
- 通用寄存器组(各种类型的草稿纸,暂存操作数,地址信息)
- 程序状态字(保留因为运算形成的各种状态信息,以位为单位,各有不同的意思)4
- 移位器(移位运算,实现一种逻辑运算)
- 计数器(控制乘除运算的操作步数,帮助alu实现乘除运算)
控制器:有硬布线控制器和微程序控制器两种实现方式。
- 程序计数器(实现指令自动化进行的关键,可以自动+1实现程序顺序执行)
- 指令寄存器(保存当前正在执行的指令,指令包含操作码和地址码)
- 指令译码器(服务于操作码,向控制器提供操作信号,就像控制器大佬的翻译官)
- 存储器地址寄存器(用于存放所要访问的主存单元)
- 存储器数据寄存器(用于存放cpu与主存存取的信息)
- 时序系统(用于产生各种时序信号,作为时间标尺)
- 微操作信号发生器(控制器中的大佬,根据IR中的操作码、psw中的状态、时序信号产生控制整个计算机系统所需要的控制信号)
注解:关于存储器地址寄存器MAR和存储器数据寄存器MDR的原理。我们可以把主存比作一个数据仓库,而这个仓库的内部是对其他部件是透明的,而MAR就像取数据所需要的票,这个票上记录着数据的地址,在现实中可能就是编号,意思是一样的,然后MDR就是前台,主存内部有工作人员,去把所需要的数据取出来放到前台的桌子上,即放在MDR里面。需要取数据的人就可以从MDR中取走数据了。这一过程实际上就是cpu与主存之间的互动过程。
注解2:用户可见的寄存器有:通用寄存器和程序状态字,其他均是透明的。
指令执行过程
周期:
时钟周期:节拍,是cpu操作的最小单位。
机器周期:机器周期含有若干个时钟周期,根据需要设置几个时钟周期。(定长的为4个,不定长的可以是3个可以是4个)
指令周期:指令周期含有若干个机器周期,一样是根据需要设置几个机器周期。
对于不需要访存的指令,比如JMP X无条件转移指令,此种指令只需要取指周期和执行周期。但是对于一个比较普通的指令,即一个间接寻址且cpu含有中断功能时,一个完整的指令周期含有4个机器周期。分别为取指周期、间址周期(用于间接寻址的访存时间)、执行周期、中断周期。这四个周期都需要访存,但是目的各不相同,同时为了区别他们的不同各设置一个标志位:取之周期FE(取指令)、间址周期IND(为了取有效地址)、执行周期EX(取操作数)、中断周期INT(保存程序断点)。
ps:中断周期中的进栈操作中的栈指针sp是减1,而不是加1,因为计算机的堆栈都是向低地址增加的。
指令周期中具体的数据流
1、取指周期:根据pc中的内容从主存中取出指令代码并放入指令寄存器中。
数据流故事:pc中包含着所取指令的地址,它将这一地址告诉mar,告诉他就能把地址变成主存的取数据票,mar化身为取数据票即包含着这个地址,通过地址总线公共汽车找到了主存。找到主存之后,这个门票不经过控制器大佬的同意是没有效用的,此时CU发出控制信号通过控制总系公共汽车告诉主存,这个mar没问题,可以取。主存接受到了大佬肯定的许可后,把所需要的数据通过数据总线公共汽车运输给mdr,这个时候cpu就拿到了所需要的数据(即指令),接着再把mdr中的指令给IR,这个时候IR获得了他想要的指令。取指周期的最后,cu大佬进行善后,发出命令让pc+1方便下一个周期的使用。
数据流:
pc——mar——地址总线——主存
cu——控制总线——主存
主存——数据总线——mdr——ir
cu——pc——pc++
2、间址周期:取操作数的有效地址(用于多种需要间接寻址的寻址方式)
数据流故事:故事的开始是指令中的地址码,我们需要的是地址码背后的有效地址,而不是现在地址码上的形式地址。因为是地址问题,所以我们依旧去找mdr兄弟帮忙(cpu中的地址都需要mdr的帮忙),mdr再次带着我们的形式地址坐着地址总线大巴去找主存,主存毕竟不是大佬,只是一个数据仓库没有权力,这个时候,等cu大佬发出的命令通过控制总线大巴过来给主存许可后,主存就可以按照这个地址去找好数据,通过数据总线大巴发给前台mdr小姐。此时,cpu得到了它日思夜想的有效地址。间址周期剧终。
数据流:
ad(ir)——mdr——地址总线——主存
cu——控制总线——主存
主存——数据总线——mdr
3、执行周期:根据ir中的指令字的操作码和操作数,通过alu操作产生执行结果。
数据流:没有统一的数据流。
4、中断周期:处理中断请求(程序断点存入堆栈中,sp表示栈顶地址,进栈操作是先修改栈顶指针,后存入数据)
数据流故事:故事的前提是存在中断请求。收到中断请求的第一步,就是保存当前程序的现场。cu大佬控制sp-1,然后将sp中进栈好的地址告诉mar(cpu中的地址问题都找它),通过地址总线到达主存。cu大佬这时候又发出命令通过控制总线给主存许可mar。这回跟之前不太一样的是,这回的mdr带的地址是用来存数据的而不是读。pc中的数据传给mar后就通过数据总线存入主存之中。pc中的东西保存好了,就可以执行中断程序了,所以cu就把中断服务程序的入口地址给了pc,方便完成后面艰巨的任务。
数据流:
cu——sp-1——mar——地址总线——主存
cu——控制总线——主存
pc——mdr——数据总线——主存
cu——pc
ps:相信大家也发现了,计算机中的总线分为外部和内部,在这里就是外部总线,服务于主存与cpu的信息传递的,而cpu内部的信息传输使用叫做内部总线。
数据通路
什么是数据通路?
实现cpu内部运算器和各个寄存器的信息传递。
有两种实现方式:
1)cpu内部单总线方式,把所有寄存器的输入输出连接到一条总线上,很显然,结构简单,效率低。
2)cpu三总线方式。强一点。
3)专用数据通路,硬件成本高,效率好。
总之用于cpu内部各个部件之间传输数据使用,也称为内部总线。
【特别说明】在执行运算的时候也要用到内部总线。由于alu本身没有存储功能的部件,比如要执行加法操作,就需要使用到暂存器Y,暂存器用于存储其中一个加数,另一个放在alu的另一个输入端。最终的结果也要放在暂存器中。这就是暂存器的功能。
控制器
控制器的主要功能:
1)从主存中取出一条指令,并指出下一条执行的指令的位置。
2)对指令进行译码,并产生相应的操作控制信号。
3)指挥并控制各个部件之间的数据流流动,总是需要cu的许可。
控制器的分类
1)硬布线控制器,亦称为组合逻辑控制器,主要由硬件实现其逻辑。
2)微程序控制器,采用存储逻辑实现,即主要由代码软件实现其逻辑。
此两者是重点,接下来将进行详细的介绍。
硬布线控制器(主要用于精简指令集)
在硬布线控制单元中,CU是根据什么信息发出控制信号的那?
CU分别根据节拍发生器、操作码、状态标志以及系统的控制总线(比如中断、dma)
微操作命令分析
取指周期:
命令pc中的现行地址到mar中
命令主存读地址
命令主存通过地址把所需要的指令读到mdr中
命令mdr把指令给指令寄存器ir中
命令ir把其op(操作码)给控制单元cu,cu进行译码
命令pc+1
间址周期:
命令ir中的地址码ad给mar
命令主存读地址
命令主存把所需要的地址读至mdr
执行周期(重点)
执行周期时依据指令不同有不同的操作。
1)非访存指令
- CLA 清空累加器ACC(命令0—ACC)
- COM 累加器ACC取反(命令ACC—ACC)
- SHR算术右移(命令ACC右移)
- CSL循环右移(命令ACC循环右移)
- STP停机指令(命令0—G
2)访存指令
ADD X加法指令:
命令指令寄存器中的地址码给MAR
命令主存允许读地址
命令MDR读到主存给出的数据
命令ACC+MDR并把结果赋值给ACC
STA X存数指令:
命令指令寄存器中的地址码给MAR
命令主存允许写地址
命令ACC中的数据给MDR
命令MDR把写进的地址给MAR
LDA X取数指令:
命令指令寄存器的地址码给MAR
命令主存允许读
命令MAR带着地址去主存取出数据并赋值给MDR
命令MDR给ACC
3)转移指令
JMP X无条件转移指令:Ad(IR)给到PC
BAN X 条件转移(为负值时转移):A*Ad(IR)+!A*(PC)—PC
【总结】执行指令有如下一些特点:
1)非访存指令,就是不需要使用MAR和MDR(这两者是沟通主存所用的部件),仅仅需要对cpu内部的寄存器进行逻辑运算。
2)对访存指令来说,一定是指令中含有地址码的指令。而这种执行的第一步就是Ad(IR)—MAR把地址码传到MAR中去访存,而之后就是控制单元发出允许主存读或者写的许可命令,接着就是通过从MAR到MDR从主存中读,或者就是从MDR到MAR让主存存数。
cpu控制方式
由于每个指令复杂程度不同,所需要的时间不同,而指令又需要依次按照一定的顺序,所以这就需要cpu进行控制。有三种控制方式:
1)同步控制方式:系统有一个统一的时钟,所有的指令使用相同时间的信号,时间间隔就选择需要时间最长的指令。(电路简单,运行速度慢)
2)异步控制方式:此种方式不存在基准时标信号,各个部件按照自己的速度,通过互相应答的方式实现有序进行。(电路复杂,运行速度快)
3)联合控制方式:依旧是与以往相同的思想方式,折中法,大部分采用同步控制,小部分采用异步控制。
【思想】(常用的用成本高的,不常用的用成本低的)或者是(提升效果明显的用成本高的,提升效果不明显的用成本低的)总之用较低的成本得到更高的均值(效果)
硬布线控制单元设计步骤
1)将所有指令列表,把每个指令所需要的最基本的信号都写出来。
2)用逻辑表达式写出来,并且进行化简(逻辑表达式化简是数字电子技术的内容)。
3)根据化简后的逻辑表达式,画出电路的逻辑图。
微程序控制器
微程序控制器采用存储逻辑的方式,把微操作信号代码化,使每条机器指令转换为一个微程序并保存在一个专门的存储器中。
1)微程序控制的基本概念
微操作与微命令:
微程序的基本思想就是将每一条机器指令编写成一个微程序,每个微程序都包含着若干条微指令,而每个微指令对应着一个或几个微操作命令。即微程序>微指令>微操作。微操作是计算机内部控制序列的最小单位。微操作与微命令一一对应,微命令是微操作的控制信号,微操作是微命令的执行过程。即微程序>微指令>微操作(微命令)。微命令有相容性和互斥性两种性质。相容既可以同时产生,互斥则表明不可以同时产生。
微指令:由若干微命令的组合。
微地址:存放微指令的存储单元的地址
微指令包含的两大部分信息:
1)操作控制字段:也称为微操作码字段,用于生成操作所需要的控制信号。
2)顺序控制字段:也称为微地址码字段,用于控制产生下一条微指令地址。
微周期:从控制存储器读取一条微指令到执行完成微操作所需要的时间。
控制存储器:这个存储器用于存放微程序,在cpu的内部,是用只读存储器ROM实现的,是厂家出厂前就写好的,只能读不能写。
一般程序和微程序所使用的存储器务必要区分开:
地址寄存器MAR和微地址寄存器CMAR(用于存放控制存储器的读写微指令地址)
指令寄存器IR和微指令寄存器CMDR(用于存放从控制存储器中读取出来的微指令)
2)微程序控制器组成和工作过程
组成部分
1控制存储器:ROM组成,出厂就固化好了各个指令所对应的微指令。
2微指令寄存器:用于存放从控制存储器中取出来的微指令,位数同微指令字长。
3微地址形成部件:用于产生初始微地址和后续微地址,帮助微指令连续执行。
4微地址寄存器:接收微地址形成部件送来的微指令。为读取微指令作准备。
工作过程
1取指令:在机器开始运行的时候,自动取微程序的入口地址放在CMAR中,并从CM中读出相应的指令放入CMDR中。
2译指令:由机器指令的操作码字段通过微地址形成部件产生所对应的微程序的入口地址。并送入CMAR。
3执行指令:从CM中取出对应的微指令顺序执行。
执行完成一个微程序后又回到取微程序的入口地址。继续第一步。周而复始至程序结束。
机器指令和微程序一一对应,但是微程序并不全和机器指令一一对应,因为为了满足公共的操作,比如取指令,间址,中断周期等公共操作。微程序的总数应该等于所有机器指令加上这些公共操作。
【例子】假如指令系统中有n个机器指令,则控制存储器中的微程序数至少是n+1(1为公共取指微程序)
3)微指令的编码方式
编码就是对微指令的控制字段进行编码,使能识别出这个微指令是由哪些微命令。最好的编码就是在保证速度的情况缩短微指令字长。
1直接访问方式
此种方式简单粗暴,简而言之就是把所有的微命令都列出来,有哪个就把它挑出来,具体实现是这样的:设计微指令时,每个微指令都有n(n为微命令个数)位,然后只要将对应的微命令置1或者置0就可以表达出来由哪些微命令组成的。但是缺点也是显而易见的,这种方式控制存储器空间极大,成本极高。
2字段直接编码方式
将每个微指令中的微命令分类成为不同的字段,将互斥的微命令放在一起,而相容的微命令放在不同的字段。每个字段独立编码,每个字段之间是相互独立的,每种编码在一个字段内表达一个微命令。(这种方式可以缩短指令长度,速度比直接慢)
微命令字段分段原则
- 互斥性微命令在同一段,相容性微命令在不同段内。
- 每个小段中包含的信息位不能太多,否则将增加译码线路负责性和译码时间。
- 每个小段还要留出一个状态,表示本字段不发出任何微命令。(因此,假如某个字段3位,3能构成8种状态,那么只能表示7种互斥的微命令)
3字段间接编码方式
一个字段的某些微命令需要由另一个字段中的某些微命令来解释,由于不是直接编码,所以称为间接编码。一般作为直接编码的辅助手段。
4)微指令的地址形成方式
主要指后继的微地址是如何形成的:
1直接由微指令的下地址字段指出,微指令中包含着一个下地址字段,直接指出下一个微指令的地址。此种方式又称为断定方式。
2根据机器指令的操作码形成,当机器指令取到指令寄存器后,微指令由操作码经过微地址形成部件形成。
【注解】第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向CMAR输入微指令的地址,这个地址就是取指周期微程序的入口地址。
微指令的格式
1水平型微指令:直接编码,字段直接编码,字段间接编码和混合编码都属于水平型编码。一般格式为操作控制哪几个并行执行的基本操作,和判断测试字段和后继地址字段。(微程序短,执行速度快,编写微指令过长,编写微程序麻烦)
2垂直型微指令:由微操作码、目的地址、源地址组成,使用微操作码编译。(微指令短,便于编程,微程序较长,执行速度慢,效率低)
3混合型微指令:在垂直型上增加一些不太复杂的并行操作。微指令较短,仍便于编程,微程序也不长,执行速度加快。
水平与垂直对比
- 水平并行能力强、效率高、灵活
- 水平执行指令时间短
- 水平微指令长但微程序短
- 水平用户难以掌握
- 以上垂直均与水平相反
(6)微程序控制单元的设计
1写出对应的机器指令的微操作命令和节拍安排。即将微程序用所需要的微指令写出来。
2确定微指令格式,格式包括微指令编码格式和后继微指令地址的形成方式和指令字长。
3编写微指令码点,根据操作字段的每一位代表的微操作命令,编写每一条微指令的码点。
(7)动态微程序设计和毫微程序设计
动态微程序设计:如果微程序可以根据用户的要求改变,那么就称这台计算机具有动态微程序设计功能。为了实现这一目的,可使用EPROM。
毫微程序设计:如果硬件不直接有微程序控制,而是通过存放在第二级控制器中的毫微程序来解释的,那这第二级控制存储器称为毫微存储器,直接控制硬件的就是豪微微指令。
【总结】硬布线和微程序控制器的对比
硬布线优点是速度快(因为使用物理电路),缺点是只把最少元件和取得最高速度为设计目标,一旦设计完成无法修改。
微程序优点是可以修改,并且本身指令非常整洁。但是速度慢。
指令流水线
是一种可以让计算机的各个部件高效的并行处理技术
可以把计算机运行过程分为取指、分析、执行三个阶段。
指令的三种执行方式(一步一步认识流水线的思想)
1)顺序执行方式:传统的冯诺依曼机所使用的方法,完全的按照顺序进行,一条指令运行完,才进行下一条指令。第一条取指令分析执行完之后,第二条取指令才能开始。效率是非常底下的,很多部件是空闲的。
2)一次重叠执行方式:这是流水线的初步形成。第一条指令进行取指令分析结束后,准备开始执行的时候,前面取指令所需要的部件已经空闲了很久,这个时候同时第二条指令的取指令与第一条指令的执行是同时进行的,这种方式比传统的方式大约快了1.5倍。
3)二次重叠执行方式:为了进一步提高速度,我们可以进行二次重叠,使系统可以同时进行第k条指令的执行、第k+1条指令的分析、第k+2条指令的取指,这俨然就像一个工厂的流水线。这样可以最大限度的提高计算机运行的效率。若每条指令需要通过n个步骤完成,最快可以实现n-1次重叠的方式。
【总结】n-1次重叠执行方式,使指令的每一个步骤,在任一时刻都有计算机相关期间在处理。即每一个时间点,都有取指、分析、执行等等在执行。这样不仅充分了利用了计算机的资源,并且成倍的提高了指令运行速度。
流水线方式的特点
- 把一个大任务分解成几个有联系的小任务,每个小任务由一个专门的部件执行
- 流水线每一个功能部件的后面都有一个缓冲寄存器,或者称为锁存器。作用是保存本流水段的执行结果,供后面的流水段使用
- 流水线中各个功能段的时间应该尽量相等
- 流水线所处理的任务必须是连续任务,如果不连续无法显示出流水线方法的优越性
- 流水线的装入时间(第一个任务的从进入到流出)和排空时间(最后一个任务的从进入到流出)
流水线的分类
按照级别分类
- 部件功能级流水线:就是将复杂的算术逻辑运算组成流水线的工作方式是。(可以循环解决的问题)
- 处理机级流水线:是把一条指令分成多个子过程,比如前面提到的取指令分析执行访存取回
- 处理机间流水:是更大的单位,是一种宏流水,每一个处理机完成一个专门的任务。
按照功能分类
- 单功能流水线:只能实现一种固定的专门功能
- 多功能流水线:可以通过各段间的不同连接方式同时或不同时的实现不同的功能。
动态与静态
- 静态流水线:在同一时间内,所有流水段是服务于同一种功能的。
- 动态流水线:在同一时间内,不同流水段服务的是不同的运算。(提高了效率,流水线控制变得复杂)
线性与非线性
- 线性流水线:每一次,每个功能段只允许经过一次,不能回头
- 非线性流水线:可以回头
影响流水线的因素
1)结构相关(资源争用):解决办法:1前一条指令访存时,后面指令暂停一个周期。2单独设置专用的存储器,从硬件上解决争用问题。
2)数据相关(数据冲突):存在必须等待前面指令执行完,才能执行后面一条指令。解决办法:1后面指令暂停若干个周期。2设置相关专用通路,即快速通道,省去了前面指令把结果存在寄存器和后面的指令读取寄存器,直接让后面的指令读取前面指令的运算结果。3调整指令顺序,进行优化。
3)控制相关(控制冲突):流水线遇到非顺序执行的控制信号,比如转移指令等改变pc值的指令。解决办法:1对转移指令的目标进行预测。2预先取得转移指令两条路的目标指令3加快和提前形成条件码4提高转移方向的猜测率(主要以预测和穷尽两种思路解决此种问题)
流水线的性能指标
- 吞吐率:吞吐率是任务数n除以处理n个任务所需要的时间。最大重叠数流水线所需要时间为n+k-1(k为阶段数,若为取指令分析执行,那么k就是3)。
- 加速比:就是没有使用流水线的花费时间和使用流水线花费时间之比。
- 流水线的效率:将流水线按照时空顺序画成时空图,那么时空区中的有效面积比上所有面积就是流水线的效率。
超标量流水线技术:布置多个功能部件,使计算机同一时间可以执行多个指令的取指或者分析。即通过加倍硬件来加快速度。(了解即可)
超流水线技术:在一个时钟周期内一个功能部件使用多次。(了解即可)
</div>