文章目录
中央处理器(考研笔记)
一.☀️CPU的功能与结构
1.CPU的功能
CPU的主要功能是执行存储在主存中的指令序列,也就是执行程序
2.指令周期
在执行一条指令的过程中,由CPU完成的一组操作构成一个指令周期
指令周期也被定义为执行一条指令所用的时间
指令周期至少包含两个子周期:(1)取指令子周期 (2)执行指令子周期
3.微操作与微命令
微操作:所谓微操作,即CPU的基本或原子操作。每一个微操作是CPU可以实现的,不可分解的操作动作,它以含有一个寄存器传递操作为标志。
微命令:每一个微操作是通过控制器将控制信号发送到相关部件上引起部件动作完成的,这些控制微操作完成的控制信号称为微命令,微命令是由控制器产生的。
二.☀️硬布线控制器设计
控制器的功能
- (1)产生微命令:控制器要产生CPU实现每个微操作所需的控制信号
- (2)按节拍产生微命令:规定的微操作必须在规定的节拍中完成,因而导致相应的微命令必须在规定的节拍中产生。
硬布线控制器设计法
硬布线控制器设计法将控制单元看作一个顺序逻辑电路或有限状态机,它可以产生规定顺序的控制信号,这些信号与提供给控制单元的指令相对应。
设计目标:使用最少的元器件,达到最快的操作速度
指令的微操作微命令分析
减法指令(间接寻址)
压栈指令(寄存器寻址)
子程序调用和返回指令图解(CALL&RET)
- 在执行子程序调用指令CALL时,会采用堆栈来保存下一条指令的地址
- 当CALL指令要跳转到子程序执行前,会先将当前下一条指令的地址,即PC寄存器的内容压入堆栈,然后再跳转到子程序去执行指令。
- 在执行子程序返回指令时,需要返回到之前调用子程序指令的下一条指令去执行
- 此时可以通过弹出堆栈的方式来获得刚才调用子程序之前保存的下一条指令的地址
子程序调用CALL指令
子程序返回指令RET
控制信号逻辑表达式
两级时序信号结构
时序信号划分为CPU周期和CPU周期内的节拍
一级时序信号结构
时序信号只划分为不同节拍
逻辑表达式:
硬布线法总结:
- 根据以上分析,可以看到每个控制信号的逻辑表达式就是一个与或逻辑方程式,用一个逻辑与或电路就可以实现该控制信号的生成,将所有与或逻辑电路组合在一起就构成了硬布线控制单元。
- 将时序产生器,指令译码器和硬布线控制单元按给定结构组织在一起,就构成了硬布线控制器。
- 时间信息,指令信息,状态信息是硬布线控制单元的输入,控制信号是硬布线控制单元的输出。
硬布线法特点:
- 采用硬布线法设计控制器时,一旦完成了控制器的设计,改变控制器行为的唯一方法就是重新设计控制单元。所以称为“硬布线”。
- 在复杂的处理器中,当控制信号太过庞大,硬件设计太过复杂时(与或逻辑电路实现困难),硬布线法的设计和修改过于困难。
三.☀️微程序控制器设计
微程序设计的指导思想是用软件的方法组织和控制数据处理系统的信息传送,并最终用硬件实现。利用这个指导思想,冯·诺依曼的“存储程序控制原理”被引入到控制器设计中。微程序设计法相当于把控制信号存储起来,所以又称存储控制逻辑法。
1.⭐微指令与微程序
微指令:对在一个时间单位(节拍)内出现的一组微操作进行描述的微编程语句称为微指令。
微程序:一个微指令序列称作微程序或固件。
-
为了实现微指令所描述的微操作,需要微指令提供相应的微命令,所以微指令的核心作用是产生控制信号。
-
一条机器指令对应一个微程序,该微程序包含从取指令到执行指令一个完整微操作序列对应的全部微指令,每条微指令由对应节拍下的微命令定义,通过微指令按序产生微命令(控制信号),一条指令中的所有微操作得以实现,从而实现一条指令的功能。
-
我们把一条微指令执行的时间(包括从控制存储器中取得微指令和执行微指令所用的时间)定义为一个微指令周期,微指令周期即节拍周期。 每一个微指令周期执行一条微指令,每一条微指令产生该节拍下系统所需的控制信号。
-
微指令一般由两部分组成:控制域和地址域。控制域用来产生控制信号(微命令),地址域用来产生下一条要执行的微指令在控制存储器中的存放地址。
2.⭐微程序控制器
-
(1)控制存储器:控制存储器简称控存(CM),是微程序控制器的核心,位于CPU内部,用ROM构成,专用于存放组成各条指令的微指令序列(即微程序)
-
(2)微指令寄存器μIR:又称控制缓冲存储器,用来暂存由控存读出的微指令。它将微指令的控制域字段直接加载到译码器上,产生CPU内外的全部系统控制信号。它将微指令的地址域字段直接加载到时序逻辑上,为生成下一条微指令地址提供依据。
-
(3)微地址寄存器μAR:用来存放访问控制存储器的当前地址。
-
(4)时序逻辑:时序逻辑有两个作用,一是依据时钟按节拍为控制存储器读出控制信号。在每个节拍发一次读出控制信号Read,从控存中读出并执行一条微指令,就可以实现一个节拍下的微操作。二是在微程序运行时依据CPU内外状态(ALU标志,中断请求,DMA请求等)和当前微指令地址域的信息生成下一条微指令地址,并将其装入到微地址寄存器中。
微程序控制器的执行过程:
(1)时序逻辑给控制存储器发出Read命令
(2)从微地址寄存器μAR指定的控存单元读出微指令,送入微指令寄存器μIR。
(3)根据微指令寄存器的内容,产生控制信号,给时序逻辑提供下一条为地址信息。
(4)时序逻辑根据来自微指令寄存器的下一条地址信息和CPU内外状态,给微地址寄存器加载一个新的微地址。
3.⭐微指令设计
三种微指令的地址域编码格式:
1)两地址格式(断定方式)
- 在每条微指令地址域提供两个字段,即顺序地址字段和跳转地址字段,并设置地址选择控制位AC来选择进行跳转还是顺序选取。
- 若控存有1k个存储单元,则控存地址(微地址)为10位编码,那么两地址格式提供的微指令地址域长度应为(2*10+m)位,m为地址选择控制位AC的位数。
2)单地址格式(计数方式)
- 微指令中只需要一个地址字段提供跳转的微指令地址,并设置了地址选择控制位AC来确定何时使用及如何生成实际的跳转地址。
- 利用AC,CPU状态标志及时序分支逻辑生成地址选择信号,若选择信号有效,多路选择器选择跳转地址或微程序首地址之一加载至μPC中,并作为下一条微指令的地址提供给控制存储器;若选择信号无效,则多路选择器不输出,μPC直接加1,将结果作为下一条顺序微指令的地址提供给控存,从而顺序执行微指令。
3)可变格式
- 让微指令在顺序执行时只产生控制信号,需要分支时再提供跳转地址,这样就可以保证微指令执行时不存在冗余信息。
- 控制微指令:标识S占1位,用来识别两种微指令,用S=0标识控制微指令;控制域用来产生计算机系统所要求的各种控制信号。
- 跳转微指令:用S=1表示跳转微指令。在跳转微指令中除标识外只有地址域,它由分支控制AC和跳转地址字段组成。
- 与但地址格式微指令不同,一旦执行跳转微指令必然要发生微程序的分支跳转,所以分支控制AC并不是用来选择顺序或跳转地址的,而是用来提供分支控制模式, 辅助跳转地址字段生成多种可能的实际跳转地址。
4)三种地址格式的比较
- 两地址格式可以从微指令直接获得顺序地址和跳转地址,所以分支逻辑设计简单,下条微指令生成速度快。但存在两个地址字段使得地址域较长,造成微指令较长,控存单元需要更多位数。
- 单地址格式在不增加微程序长度的基础上减少了指令的长度,使控存的容量大为减小。
- 可变地址格式仅有控制域和地址域之一,所以长度最短,要求的控存单元位数最少。但是专用的跳转指令增加了微程序的长度,使控存单元数量随之增加,机器指令的执行时间增长。
占用容量:可变地址格式<单地址格式<两地址格式(占用容量最大)
执行效率:可变地址格式<单地址格式<两地址格式(执行效率最快)
微指令控制域编码
- 水平型微指令可使多个控制信号同时有效,达到多个微操作同时发生的效果。
- 垂直型微指令类似于机器指令,通常一条微指令实现一个微操作。
1)水平型微指令控制域编码
(1)直接表示法(水平编码):
- 在微指令的控制域字段中,每一个二进制位用来定义一个控制信号(微命令)。若计算机系统需要n个控制信号,则控制域字段的长度为n位。若某位设定为“1”表示该位定义的控制信号有效,而“0”则无效。
- 直接表示法可利用一条微指令的执行,使多个控制信号同时有效。
(2)译码法(垂直编码):
- 对于n位长度的控制域,用n位编码中的一个编码表示一个控制信号,n位长度的控制域可表示 2 n 2^n 2n个控制信号,大大减少了控制域的长度。
- 垂直编码不能完成一个节拍提供多个控制信号的任务,因而指令周期的节拍书增多,微程序中包含的微指令个数增多,机器指令执行时间长。
(3)✨字段译码法(字段编码)✨:
- 将控制域分为若干字段,字段内垂直编码,字段间水平编码.
- 在编码时要遵循互斥信号放在同一字段,相容信号放在不同字段
- 若控制域有L个字段,则允许L个控制信号同时有效。且每个字段要设计一个无效控制信号编码,若控制域某字段有m位,则可以提供 2 m − 1 2^m-1 2m−1个有效控制信号的编码。
2)垂直型微指令控制域编码
- 垂直型微指令与水平型微指令的不同之处在于控制域的编码方式不同
- 垂直型微指令的控制域采用与机器指令相似的格式,分为微操作码和微操作对象两部分。
- 垂直型微指令的控制域短小紧凑,减小了微指令长度。
- 垂直型编码的编码对象是微命令,垂直型微指令的编码对象是微操作。
- 每条垂直型微指令只能完成少量微操作,并行能力差,微程序较长,执行速度慢。
4.⭐微程序示例
四.☀️CPU性能的测量
1.CPU时间
- CPU时间被定义为运行一个程序所花费的时间
- 响应时间被定义为CPU时间与等待时间(包括用于磁盘访问,存储器访问,I/O操作,操作系统开销等时间)的总和。
- C P U 时 间 : T C P U = C P U 时 钟 周 期 数 N × 时 钟 周 期 T C L K = C P U 时 钟 周 期 数 时 钟 频 率 f C L K CPU时间:T_{CPU}=CPU时钟周期数N\times时钟周期T_{CLK}=\frac{CPU时钟周期数}{时钟频率f_{CLK}} CPU时间:TCPU=CPU时钟周期数N×时钟周期TCLK=时钟频率fCLKCPU时钟周期数
2.CPI
- CPI(Cycles Per Instruction,每个指令的时钟周期)就是每条指令执行所用的时钟数。
- C P I = 1 I ∑ i = 1 n ( C P I i × I i ) = ∑ i = 1 n ( I i I × C P I i ) CPI=\frac{1}{I}\sum_{i=1}^{n}{(CPI_i\times I_i)}=\sum_{i=1}^{n}(\frac{I_i}{I}\times CPI_i) CPI=I1i=1∑n(CPIi×Ii)=i=1∑n(IIi×CPIi)
- T C P U = I × C P I × T C L K = I × C P I f C L K T_{CPU}=I\times CPI \times T_{CLK}=\frac{I\times CPI}{f_{CLK}} TCPU=I×CPI×TCLK=fCLKI×CPI
3.MIPS
- MIPS被定义为CPU每秒执行的百万指令数(Million Instruction Per Second)‘
- M I P S = 指 令 数 I 执 行 时 间 T × 1 0 6 = f C L K C P I × 1 0 6 MIPS=\frac{指令数I}{执行时间T\times10^6}=\frac{f_{CLK}}{CPI\times10^6} MIPS=执行时间T×106指令数I=CPI×106fCLK
4.Flops
- Flops被定义为每秒完成的浮点数运算次数(Floating Point Operations Per Second)
- F l o p s = 浮 点 运 算 次 数 M 执 行 时 间 T Flops=\frac{浮点运算次数M}{执行时间T} Flops=执行时间T浮点运算次数M