主存简单模型和寻址概念
主存储器的基本组成:
存储体, MAR (Memory Address Register), MDR
存储元 --> 存储单元 (内容是存储字) --> 存储体
主存储器简单模型:
寻址:
存储器芯片的基本结构:
- 译码驱动电路
- 存储矩阵
- 读写电路
- 地址线, 数据线 (推出容量等等), 片选线 (决定该芯片是否工作), 读写控制线 (可能是一根或两根)
寻址:
- 按字节, 字, 半字, 双字寻址
- 多字节存放: 大端方式与小端方式
半导体存储器RAM
半导体随机存储器:
对于两种半导体随机存储器的对比:
现在主存常用 SDRAM
DRAM 的刷新
如何刷新 : 有硬件支持,读出一行的信息后重新写入,占用1个读/写周期
在什么时刻刷新:
SRAM的读周期:
第一根红线与第二根间: 地址线开始传输数据, 由于速度不一, 为保证正确性将等待一段时间
第二根与第三根: 数据从存储指针出来也是需要时间的, 这时候不急着关闭开关
第三根与第四根: 数据稳定后关闭开关, 关闭后数据可能还在传送, 所以地址线和数据线的信号会维持一段时间才关闭
第五根: 当确认读好了就结束了
为了下一次存取的正确性, 会有一段时间的恢复时间
SRAM的写周期:
存储周期Tm = 存取时间Ta + 恢复时间
主存带宽Bm: 数据传输率, 表示每秒从主存进出信息的最大数量
半导体存储器ROM
- 掩膜式只读存储器 (MROM) 内容又制造厂按用户要求在芯片直接写入, 无法修改
- 一次可编程只读存储器 (PROM) 存储内容由用户用专门的设备(编程器)一次性写入,之后无法修改
- 可擦除可编程只读存储器 (EPROM)
- 紫外线擦除 (UVEPROM)
- 电擦除 (EEPROM)
- 闪速存储器 (Flash Memory) 如U盘
- 固态硬盘 (Solid State Drives) 控制单元 + FLASH芯片
RAM 的读写控制线需要连接, ROM的读写控制线是静态的 (若低电平有效就接地)
存储系统
分类:
- 作用(层次)
- 高速缓冲存储器 Cache 使用SRAM 解决速度问题 (硬件)
- 主存储器 (内存) DRAM 和 ROM
- 辅助存储器 (外存) 解决容量问题 (硬件 + 操作系统)
- 可保存性
- 断电信息是否消失
- 易失性: RAM
- 非易失性
- 读出是否破坏信息
- 破坏性读出: DRAM
- 非破坏性读出
- 断电信息是否消失
- 存储介质
- 磁表面存储器 (磁盘, 磁带)
- 磁芯存储器
- 半导体存储器 (易失性)
- 光存储器
- 存取方式
- 随机存取
- RAM
- DRAM
- SRAM
- ROM
- RAM
- 串行访问
- 顺序存取 (磁带)
- 直接存取 (磁盘)
- 随机存取
性能指标:
- 存储容量: 字数 * 字长 bit
- 单位成本: 每位价格 = 总成本 / 总容量
- 存储速度: 数据传输率 = 数据的宽度 / 存储周期
存储周期Tm = 存取时间Ta + 恢复时间
主存带宽Bm: 数据传输率, 表示每秒从主存进出信息的最大数量
主存与CPU的连接
主存容量扩展 - 位扩展:
主存容量扩展 - 字扩展:
线选法 | 译码片选法 (重要) |
---|---|
n条线 ----> n个选片信号 | n条线 ----> 2^n 个选片信号 |
电路简单 | 复杂 |
地址空间不连续 | 连续, 可增加逻辑设计 |
字位同时扩展:
例题:
视频: P64
解题步骤:
- 确认数据线, 地址线
- 分析地址空间, 选择存储芯片
- CPU 与主存的连接
备注: 系统程序区用 ROM, 用户程序区用 RAM
双口RAM和多模块存储器
提高存储器的工作速度
存储周期Tm = 存取时间Ta + 恢复时间
主存带宽Bm: 数据传输率, 表示每秒从主存进出信息的最大数量
硬件开销大, 对专用场景可能有应用
多模块存储器:
多体并行存储器:
高位交叉与低位交叉:
例题:
局部性原理及性能分析
高速缓存
局部性原理
- 空间局部性
- 时间局部性
命中率H: CPU欲访问的信息已在Cache中的比率
设一个程序执行期间,Cache的总命中次数为N, 访问主存的总次数为Nm,则H = Nc / (Nc + Nm)
缺失率M = 1 - H
设tc为命中时的Cache访问时间, tm为未命中时的访问时间
主存系统的平均访问时间Ta = H * tc + (1 - H) * tm
例题:
Cache-地址映射
地址映射:
(1)空位随意放: 全相联映射
(2)对号入座: 直接映射
只存放了绿色部分的值, 节约了空间, 但是对空位利用率低, 且识别信息多的时候电路会比较复杂
(3)按号分组, 组内随意放: 组相联映射
分为4组则需要两位来当作组地址
三种比较:
Cache-替换算法及写策略
- 随机算法(RAND): 随机地确定替换的Cache块。它的实现比较简单,但没有依据程序访问的局部性原理,故可能命中率较低。
- 先进先出算法(FIFO): 选择最早调入的行进行替换。它比较容易实现,但也没有依据程序访问的局部性原理,可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉。
- 近期最少使用算法(LRU): 依据程序访问的局部性原理选择近期内长久未访问过的存储行作为替换的行,平均命中率要比FIFO要高,是堆栈类算法。
LRU算法对每行设置一个计数器,Cache每命中一次,命中行计数器清0,而其他各行计数器均加1,需要替换时比较各特定行的计数值,将计数值最大的行换出。 - 最不经常使用算法(LFU): 将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出。如果相同删除最早插入的那个数据
写策略-命中
写回法(write-back): 当 CPU 对 Cache 写命中时,只修改 Cache 的内容 ( 这样要设置一个脏位来代表数据被修改过了 ),而不立即写入主存,只有当此块被换出时才写回主存,
全写法(写直通法,write-through): 当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲(write buffer)
未命中
写分配法(write-allocate): 把主存中的块调入Cache,在Cache中修改。
搭配写回法使用。
非写分配法(not-write-allocate): 只写入主存,不调入Cache。
搭配全写法使用。
多级Cache: L1, L2, 离 CPU 越远越大, 越慢
例题: P69
容量问题:
工作原理:
虚拟存储器
虚拟存储器是一个逻辑模型
功能:用户给出一个地址,叫做虚地址或逻辑地址,虚拟存储器要给出该地址对应的数据。
实现:由辅助硬件将虚地址映射到主存当中的某个单元,主存单元地址称为实地址或物理地址。
页式虚拟存储器
虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页,虚存的页称为虚页
段式虚拟存储器
段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。虚拟地址分为两部分:段号和段内地址。
段表: 每一行记录了与某个段对应的段号、装入位、段起点和段长等信息。由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。
段页式虚拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页, 主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表。
虚拟地址:段号+段内页号+页内地址
快表TLB
页表、段表存放在主存中,收到虚拟地址后要先访问主存,查询页表、段表,进行虚实地址转换放在主存中的页表称为慢表(Page)。
提高变换速度 → 用高速缓冲存储器存放常用的页表项 → 快表(TLB)
页式虚拟存储器-例题
分析地址空间
指令系统
指令(又称机器指令): 是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
一条指令通常要包括操作码字段和地址码字段两部分:
- 操作码 OP: 干什么
- 地址码 A: 对谁操作
指令格式-地址码
四地址指令: 指令含义: (A1) OP (A2) → A3, A4 = 下一条将要执行指令的地址设指令字长为32位,操作码占8位,4个地址码字段各占6位设存储字长为32位,即4B
- Ai可直接表示 2^6 = 64个不同的位置
- 一条指令的执行(假设每个地址都是主存地址):
取指令 访存1次(假设指令字长=存储字长)
**取两个操作数 **访存2次
**存回结果 **访存1次共访存4次
三地址指令: 指令含义:(A1) OP (A2) → A3
3个地址码字段各占8位,指令操作数直接寻址范围为 2^8 = 256;完成一条指令需要访存4次
(常见) 二地址指令:
指令含义: (A1) OP (A2) → A1
2个地址码字段各占12位,指令操作数直接寻址范围为2^12 = 4K;完成一条指令需要访存4次
一地址指令: 指令含义:
- OP(A1)→A1,如加1、减1、取反、求补等;完成一条指令需要访存3次
- (ACC)OP(A1)→ACC,隐含约定的目的地址为ACC ;完成一条指令需要访存2次
零地址指令: 指令含义:
- 不需要操作数,如空操作、停机、关中断等指令
- 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
定长指令字结构: 指令长度固定
变长指令字结构: 指令长度不等
| OP | A1 | A2 | A3 | A4 |
指令格式-操作码
定长操作码: n位 → 2^n条指令
扩展操作码: 操作码长度可变
扩展操作码举例:
- 在设计扩展操作码指令格式时,必须注意以下两点:
- 1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
- 2)各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
操作类型:
1.数据传送 : 进行主存与 CPU 之间的数据传送
LOAD作用:把存储器 (源) 中的数据放到寄存器 (目的) 中
STORE 作用:把寄存器中的数据放到存储器中
2.算术逻辑操作: 运算类
算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
3.移位操作 程序控制类: 改变程序执行的顺序
算术移位、逻辑移位、循环移位(带进位和不带进位)
4.转移操作
无条件转移 JMP
条件转移 JZ: 结果为0; JO:结果溢出; JC:结果有进位
调用和返回 CALL 和 RETURN
陷阱(Trap)与陷阱指令
5.输入输出操作: 湖北需变更 CPU 和 IO 设备之间的数据传送
CPU寄存器与IO端口之间的数据传送(端口即 IO 接口中的寄存器)
指令寻址
机器字长: CPU一次能处理的二进制数据的位数。
指令字长: 一个指令字中包含二进制代码的位数。
**存储字长:**一个存储单元存储二进制代码的长度。
单字长指令: 指令长度 = 机器字长
半字长指令、双字长指令
注: 这些长度都是字节的整数倍
边界对齐存储与边界不对齐存储
寻址方式
- 指令寻址: 下一条欲执行指令的指令地址 (始终由程序计数器PC给出)
- 数据寻址: 确定本条指令的操作数地址
顺序寻址: PC + 1 --> PC
跳跃寻址: 由转移指令指出 (如: JMP )
数据寻址
一地址指令: | 操作码(OP) | 寻址特征 | 形式地址 | 求出操作数的真实地址称为有效地址
假设指令字长= 机器字长 = 存储字长, 操作数为 3
**1. 立即寻址:**立即寻址:形式地址A就是操作数本身,又称为立即数,一般采用补码形式。
一地址指令: | 操作码(OP) | # | 0…011 |
汇编中 #表示立即寻址特征。
一条指令的执行:
取指令访存1次
执行指令访存0次
暂不考虑存结果
共1次
优点: 指令执行阶段不访问主存,指令执行时间最短
缺点:
A的位数限制了立即数的范围。
共访存1次
如A的位数为n,且立即数采用补码时,可表示的数据范围为-2^(n-1) ~ 2^(n-1)-1
2. 直接寻址
指令字中的形式地址A就是操作数的真实地址EA,即EA = A。
一条指令的执行: 取指令访存1次
执行指令访存1次
暂不考虑存结果共访存2次
优点: 简单, 指令执行阶段仅访问一次主存, 不需专门计算操作数的地址。
缺点: A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。
3. 间接寻址
间接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址
所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。
一条指令的执行:取指令访存1次
执行指令访存2次
暂不考虑存结果共访存3次
多次间址: 主存地址的前面增加一位, 如果是1 则当前地址是间接地址, 如果是 0 则是真实地址
优点:
可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。
便于编制程序(用间接寻址可以方便地完成子程序返回)。
4. 寄存器寻址
寄存器寻址: 在指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在由Ri,所指的寄存器内。
一条指令的执行:取指令访存1次
执行指令访存0次
暂不考虑存结果共访存1次
优点:
指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
缺点:
寄存器价格昂贵,计算机中寄存器个数有限。
5. 寄存器间接寻址
寄存器间接寻址:寄存器Ri,中给出的不是一个操作数,而是操作数所在主存单元的地址, 即EA=(Ri)。
先去寄存器找, 然后去主存找
一条指令的执行: 取指令访存1次
执行指令访存1次
暂不考虑存结果共访存2次
特点:
与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
6. 隐含寻址
隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
另一个操作数隐含在ACC中
优点:有利于缩短指令字长。
缺点:需增加存储操作数或隐含地址的硬件。
总结回顾:
偏移寻址
1. 基址寻址
基址寻址: 将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A。
主要特点: 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器, 但其内容仍由操作系统确定。
优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)
用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序。
2. 变址寻址
变址寻址:有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即**EA= (IX)+A,**其中x为变址寄存器(专用),也可用通用寄存器作为变址寄存器。
注: 变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量), 形式地址A不变(作为基地址)
优点:可扩大寻址范围(变址寄存器的位数大于形式地址A的位数). 在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
缺点:寄存器价格昂贵,逻辑比较复杂
3. 相对寻址
相对寻址:把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是下一条指令的偏移量??,可正可负,补码表示.
优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动。
相对寻址广泛应用于转移指令。
举例:
总结:
访问次数非绝对, 考虑取指令和结果存回来情况要加次数
堆栈寻址
堆栈寻址: 操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。堆栈是存储器(或专用寄存器组)中一块特定的按 “后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。
可以从主存划出一段区域做 软堆栈 来代替寄存器
CISC和RISC替换版
CISC: Complex Instruction Set Computer
设计思路: 一条指令完成一个复杂的基本功能。
RISC: Reduced Instruction Set Computer
设计思路:一条指令完成一个基本“动作”. 多条指令组合完成一个复杂的基本功能。
比如设计一套能输出单词的指令集:
CISC的思路: 每个单词的输出由一条指令完成一条指令可以由一个专门的电路完成: 17万个单词=17万个电路
→ 采用“存储程序”的设计思想,由一个比较通用的电路配合存储部件完成一条指令
RISC的思路: 每个字母的输出由一条指令完成,多条指令组合完成一个单词
26个字母=26个电路
“并行”、“流水线” 优化
CPU的功能和基本结构
功能:
1.指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
⒉.操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
3.时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
4.数据加工。对数据进行算术和逻辑运算。
5.中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
CPU:
- 运算器: 对数据加工
- 控制器: 协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令
取指令: 自动形成指令地址;自动发出取指令的命令。
分析指令: 操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。
执行指令: 根据分析指令得到的“操作命令”和“操作数地址”,形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。
中断处理: 管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。
运算器的基本结构
CPU 内部单总线方式:
由四大部分构成
用户可见的寄存器: 通用寄存器组、程序状态字寄存器PSW、程序计数器PC
用户不可见的寄存器: MAR、MDR、IR、暂存寄存器
指令周期的数据流
指令周期流程
中断周期是写操作: 保存程序断点
取值周期:
间址周期:
最后一步根据不同的书是不同的, 理解意思即可
执行周期:
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALu操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
中断周期:
指令执行方案:
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
- 单指令周期:
对所有指令都选用相同的执行时间来完成。
指令之间串行执行;指令周期取决于执行时间最长的指令的执行时间。
对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。 - 多指令周期:
对不同类型的指令选用不同的执行步骤来完成。指令之间串行执行;可选用不同个数的时钟周期来完成不同指令的执行过程。
需要更复杂的硬件设计。 - 流水线方案:
在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。指令之间并行执行。
回顾:
数据通路的功能和基本结构
数据通路: 数据在功能部件之间传送的路径。
数据通路的基本结构:
1.CPU内部单总线方式 ALU 需要配合暂存器使用
2.CPU内部多总线方式
3.专用数据通路方式
CPU内部单总线方式
内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线;
系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类l/O接口间互相连接的总线。
此时MDR中的地址 = IR 中的地址 IR: 指令寄存器, 保存了正在执行的一条指令
例题:
有括号代表操作数的地址放在了该操作数中 如: ADD (R0), R1
间址周期:
**执行周期: **
如果指令中写了一个 # 和一个数字, 数字代表操作数, 如果写一个如R1 就是地址, 代表地址是 R1 的寄存器, 加括号代表里面内容的地址, 去主存找
专用数据通路
取址周期:
例题:
(1) 问
(2) 问
(PC) —> MAR
M(MAR) —> MDR
(MDR) —> IR
(3) 问
存/取的数据放到ACC中设数据地址已放入MAR取:
M(MAR) → MDR(MDR) → ALU ACC
存:
(ACC) → MDR(MDR) → M(MAR)
(4) 问
X → MAR
M(MAR) → MDR
(MDR) → ALU → ACC
(5) 问
Y → MAR
M(MAR) → MDR
(MDR) → ALU, (ACC) → ALU
ALU → ACC
(6) 问
Z→ MAR
(ACC) → MDR
(MDR) → M(MAR)
控制器1-硬布线
控制器的结构和功能
控制器是计算机系统的指挥中心,控制器的主要功能有:
1)从主存中取出一条指令,并指出下一条指令在主存中的位置。
2)对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作。
3)指挥并控制CPU、主存、输入和输出设备之间的数据流动方向。
控制单元的输入和输出
硬布线控制器
CPU的控制方式: 产生不同微操作命令序列所用的时序控制方式。
1.同步控制方式
整个系统所有的控制信号均来自一个统一的时钟信号。同步控制方式的优点是控制电路简单,缺点是运行速度慢。
2.异步控制方式
异步控制方式不存在基准时标信号。
各部件按自身固有的速度工作,通过应答方式进行联络。
异步控制方式的优点是运行速度快,缺点是控制电路比较复杂。
3.联合控制方式
对各种不同的指令的微操作实行大部分采用同步控制、小部分采用异步控制的办法。
设计步骤:
1.分析每个阶段的微操作序列
2.选择CPU的控制方式 假设采用同步控制方式
3.安排微操作时序 一个机器周期内安排3个节拍(时钟周期)
4.电路设计
取址周期:
间址周期:
执行周期:
中断周期:
组合逻辑设计:
1.列出操作时间表
取址周期时间表
间址周期时间表
执行周期时间表
微操作信号综合
画出逻辑图
设计步骤:
1.分析每个阶段的微操作序列, 这一步是必须会的
2.选择CPU的控制方式
3.安排微操作时序
4.电路设计
(1)列出操作时间表
(2)写出微操作命令的最简表达式
(3)画出逻辑图
控制器2-微程序
硬布线工作原理: 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生
微程序工作原理: 事先把微操作控制信号存储在一个专门的存储器(控制存储器)中, 将每一条机器指令编写成一个微程序,这些微程序可以存到一个控制存储器中,用寻址用户程序机器指令的办法来寻址每个微程序中的微指令。
微程序基本思想:
微程序控制器的基本结构:
控制存储器:
微指令格式:
水平型微指令需要解释很多, 所以微指令长, 编写微程序较麻烦
编码方式
(1) 直接编码方式
(2) 字段直接编码方式
例题:
优点: 可以缩短微指令字长
缺点: 要通过译码电路后再发出微命令, 因此比直接编码方式慢
(3) 字段间接编码方式
优点:可进一步缩短微指令字长。
缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。
微指令的地址形成方式
断定方式例题:
微程序控制的基本概念
微程序控制单元的设计
设计步骤:
-
分析每个阶段的微操作序列
-
写出对应机器指令的微操作命令及节拍安排
-
确定微指令格式
-
编写微指令码点
微程序控制单元的设计:
**零碎概念: **
硬布线与微程序的比较 重要!
指令流水线
一条指令的执行过程可以分成多个阶段(或过程)
根据计算机的不同,具体的分法也不同。
取指 —> 分析 —> 执行
取指: 根据PC内容访问主存储器,取出一条指令送到IR中。
分析: 对指令操作码进行译码,按照给定的寻址方式和地址字段中的内容形成操作数的有效地址EA,并从有效地址EA中取出操作数。
执行: 根据操作码字段,完成指令规定的功能,即把运算结果写到通用寄存器或主存中。
特点: 每个阶段用到的硬件不同
设取指、分析、执行3个阶段的时间都相等,用t表示,按以下几种执行方式分析n条指令的执行时间:
表示方法
流水线性能指标
吞吐率:
加速比:
效率:
影响流水线的因素
1.结构相关(资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
解决办法:
1.后一相关指令暂停一周期
2.资源重复配置: 数据存储器+指令存储器
2.数据相关(数据冲突)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
解决办法:
1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
2.数据旁路技术 (转发技术)
3.编译优化: 通过编译器调整指令顺序来解决数据相关
例题:
数据的基本操作:读(R)、写(W)
冲突的基本类型:RAW、WAR、WAW A代表after
3.控制相关(控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。
解决办法:
1.尽早判别转移是否发生,尽早生成转移目标地址
2.预取转移成功和不成功两个控制流方向上的目标指令
3.加快和提前形成条件码
4.提高转移方向的猜准率
分类:
- 部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程。
处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。 - 单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线。
单功能流水线指只能实现一种固定的专门功能的流水线;
多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。 - 动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。 - 线性流水线和非线性流水线
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
流水线多发技术
1.超标量技术
2.超流水技术
3.超长指令字
总结: