关于指令执行周期的细节思考

关于指令执行周期的细节思考

@(组成原理)

(取自2012.44)五段流水线:取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)、结果写回寄存器(WB)。流水线按序发射,按序完成。不采用数据转发技术,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。

只看一个方面的问题:若高级语言程序中某赋值语句为:x = a+b,x,a,b均为int型变量,它们的存储单元地址分别为[x],[a],[b]。该语句对应的指令流水线执行过程是:

I1    LOAD    R1,[a]
I2    LOAD    R2,[b]
I3    ADD     R1,R2
I4    STORE   R2,[x]

关于指令执行周期的细节思考_第1张图片

分析:这样一个简单的指令执行步骤,其实非常值得深入分析,不要跑太快。

首先问,阻塞在指令序列中如何体现的?不连续即阻塞
比如I3的IF段结束后,后面要隔着三个空格才能接上ID,这三个空格就是阻塞,这个指令因为要等到I2写回数据到R2才能继续下去,ID重新开始时就是在I2的WB写完后,被唤醒。很长时间都没有这么分析,也没看到相关的解答这样串联。
再问一个问题,I4的IF为什么不在I3的ID前面执行?根据题干,要顺序执行,在I3阻塞时,I4的指令是不允许执行的。所以I4的IF才在I3的ID下面,即I3开始工作了,才允许I4继续工作。

另外,IF不允许在M下面,是因为M是访问主存,IF也是访问主存。这是隐含性的条件,是作为常识掌握。题干强调了对寄存器的互斥访问,而刻意忽略了主存的互斥访问。

总之,注意IF和M的互斥ID和WB的互斥,再加上对阻塞情况下后序指令不许动的理解,这种绘图型,其实很简洁。

你可能感兴趣的:(组成原理)