5.5指令流水线

一、指令流水线的基本概念



5.5指令流水线_第1张图片



5.5指令流水线_第2张图片

二、指令流水线的影响因素和分类

5.5指令流水线_第3张图片
取指令 译码 执行 访存 写回
取指令和访存阶段一般都是联系的cache,因为cache的命中率很高,而且cache有两类,一类专门用来存指令,另一类用来存取数据,这样取指令和访存可以并行执行。

译码阶段:完成指令译码和取数操作(把指令所用到的操作数从通用寄存器中取出来,然后放到锁存器A和B中,之前的指令的操作数会直接来自主存,但是在精简指令集系统RISC之下,进行运算的操作数一定来自通用寄存器,或者就算来自主存,也会将其先放到通用寄存器中)
执行阶段:会使用ALU对译码阶段取出来的操作数进行一个运算。imm指的是存放立即数的锁存器(有的会使用立即寻址方式,指令的地址码直接说明了一个立即数,那么可以将指令中的立即数取出放到imm锁存器中,所以有的时候,执行阶段会有两个数,一个来自通用寄存器,另一个来自imm锁存器)
最后结果可能放到主存中,或者放到通用寄存器中
译码阶段会对通用寄存器进行一个读操作,写回阶段可能会对通用寄存器进行一个写操作 ,这样可能会出现有些问题。

5.5指令流水线_第4张图片
资源冲突(操作系统中的互斥问题),数据冲突(指令一前一后的问题)
5.5指令流水线_第5张图片

5.5指令流水线_第6张图片
add命令是r2+r3=r1,在最后的写回阶段才会将r1进行写回
但是sub命令在译码阶段进行读r1,此时r1还没有写回去,这就是同步问题,此后的and or命令都存在问题


nop是空指令,空指令也会完整经过所哟有阶段


其实r1的运算结果在执行阶段完成之后,可以从ALU直接拿到结果,而不用等写回阶段从寄存器中拿到。

把后面的不被前面指令影响的,先给拿到前面执行


程序的顺序执行流改变
5.5指令流水线_第7张图片



5.5指令流水线_第8张图片
5.5指令流水线_第9张图片
5.5指令流水线_第10张图片
5.5指令流水线_第11张图片

三、五段式指令流水线

5.5指令流水线_第12张图片
5.5指令流水线_第13张图片



996是偏移量



你可能感兴趣的:(计组学习)