先行控制
1.先行控制方式的原理
采用二次重叠执行方式必须解决两个问题:
(1)有独立的取指令部件、指令分析部件和指令执行部件
把一个集中的指令控制器,分解成三个独立的控制器:存储控制器、指令控制器、运算控制器
(2)要解决访问主存储器的冲突问题
取指令、分析指令、执行指令都可能要访问存储器,可以采用先行控制技术解决存储器冲突。采用先行控制技术的关键是缓冲技术和预处理技术。
缓冲技术通--在工作速度不固定的两个功能部件之间设置缓冲栈,用以平滑功能部件之间的工作速度。
预处理技术--将进入运算器的指令均处理成RR型指令,而某些栈为其提供所需的操作数(先行读数栈、后续写数栈),这样运算器在进行预算时无需访问存储器,从而加快速度。
在采用了缓冲技术和预处理技术之后,运算器能够专心于数据的运算,从而大幅度提高程序的执行速度。
2.处理机结构三个独立的控制器:存储控制器、指令控制器、运算控制器。四个缓冲栈:先行指令缓冲栈、先行读数缓冲栈、先行操作栈、后行写数栈。
3.工作原理
充分利用主存带宽,在主存空闲时,即从主存中取出指令放入先行指令缓冲栈,以供指令分析器使用。--预取
先行指令缓冲栈遵循先进先出,缓冲战充满后不能进入,一旦指令被指令分析器取走即从缓冲栈作废。
指令分析器对缓冲栈中的指令进行预处理,并送入先行操作栈。对于无条件转移指令--指令分析器将转移地址送入先行程序计数器以及现行程序计数器中,然后作废先行指令缓冲栈中的指令,重新从主存中预取指令;而此时先行操作栈中可能还有未执行的指令,因此作废缓冲栈中的指令对流水线影响不大。对于条件转移指令--由于分析较慢,因此可能有停顿,要分转移成功和不成功来处理(控制相关的处理方法)。
以上两种类型指令能在分析器中直接处理,因此称为吸收型指令。
对于运算类的指令--则要处理成RR型的指令,如果指令本身就是RR型,则不作任何处理;如果是RS型,则分析器计算出操作数有效地之后送入先行读数栈或后行写数栈的地址寄存器,并将对应的地址寄存器的编号代替指令中的主存地址后送入先行操作栈;如果是RI型,则将立即数送入先行读数栈的操作数寄存器,并用此寄存器的编号代替指令中的立即数字段。这样,所有的运算类指令执行时都将访问寄存器,加快运算速度。
再看先行读数栈,每当先行读数栈收到分析器送来的有效地之后,即将地址有效标志位置位,并向主存申请读操作数,取得的操作数放入对应的先行操作数缓冲寄存器中,并置数据有效标志位,做废刚才的地址有效标志位,以供相应的指令使用操作数。
再看后行写数栈,每当后行写数栈收到分析器送来的有效地之后,即将地址有效标志位置位;这样,当相应的运算类指令执行完毕后不再马上写主存,而是先送入相应的后行写数据缓冲寄存器中,并置数据有效标志位。控制器自动根据相应的后行写地址缓冲寄存器中的地址向主存发出写请求。
4.小结
无论是先行取指还是先行读数,抑或是后行写数,都是充分利用主存带宽,并且优先等级由低至高。通过对指令流和数据流的预处理和缓冲,则能使指令分析部件和指令执行部件(运算器)独立并行工作,并始终处于忙碌状态。