200802
本篇是郑纬民《计算机系统结构》的读书笔记,欢迎各位路过指正!今天是第五章:标量处理机。
5. 标量处理机
5.1 先行控制技术
-
指令的重叠执行方式:
- 顺序执行方式:用时 T = ∑ i = 1 n ( t t i + t a i + t e i ) T=\sum_{i=1}^n(t_{ti}+t_{ai}+t_{ei}) T=∑i=1n(tti+tai+tei),其中 t t i t_{ti} tti为取指时间, t a i t_{ai} tai为分析时间, t e i t_{ei} tei为执行时间。
- 一次重叠执行方式:如果两个过程的时间相等,则执行 n n n条指令的时间为: T = ( 1 + 2 n ) t T=(1+2n)t T=(1+2n)t。
- 二次重叠执行方式:如果三个过程的时间相等,执行 n n n条指令的时间为: T = ( 2 + n ) t T=(2+n)t T=(2+n)t。需要采用先行控制技术。
-
先行控制方式的原理:解决两个问题:(1).有独立的取指令部件、指令分析部件和指令执行部件,把一个控制器分解为存储控制器、指令控制器、运算控制器;(2).要解决访问主存储器的冲突问题:采用低位交叉存取方式或两个独立的存储器、独立的指令存储器和数据存储器、采用先行控制技术(缓冲技术和预处理技术)
-
有独立的指令Cache和数据Cache。这种结构被称为哈佛结构。
-
处理机结构:
- 三个独立的控制器:存储控制器、指令控制器、运算控制器。
- 四个缓冲栈:先行指令缓冲栈、先行读数缓冲栈、先行操作栈、后行写数栈。
-
先行指令缓冲栈:处于主存储器与指令分析器之间。平滑主存储器取指令和指令分析器使用指令之间的速度差异。
- RR型指令:不必处理,直接送先行缓冲栈;
- RS型指令,主存有效地址送先行读数栈,用该先行读数栈的寄存器编号替换指令中的主存地址码部分,形成RR*指令送先行缓冲栈;
- RI型指令,指令中的立即数送先行读数栈,用该先行读数栈的寄存器编号替换指令中的立即数部分,形成RR*指令送先行缓冲栈。
- 转移指令,一般在指令分析器中直接执行。
- 先行指令缓冲栈的组成:只要指令缓冲栈没有充满,就自动发出取指令的请求。先行程序计数器PC1,用来指示取指令,现行程序计数器PC,记录指令分析器正在分析的指令地址。但是是分析和执行时间相差大,且有数据相关问题。
- 指令执行时序:设置了指令缓冲栈,取指令的时间就可以忽略不计。
- 理想情况下,指令执行部件应该一直忙碌。连续执行n条指令的时间为: T 先 行 = ∑ i = 1 n t e i T_{先行} = \sum_{i=1}^n t_{ei} T先行=∑i=1ntei。
- 设置先行缓冲栈的目的:使指令分析器和指令执行部件能够独立工作。
-
先行操作栈:处于指令分析器和运算控制器之间使指令分析器和运算器能够各自独立工作。
-
先行读数栈:处于主存储器与运算器之间滑运算器与主存储器的工作。由地址寄存器、操作数寄存器、和标志三部分组成。
-
后行写数栈:由地址寄存器、数据寄存器和标志三部分组成。当运算器执行这条RR*型写数指令时,只要把写到主存的数据送到后行写数栈的数据寄存器中即可。
-
缓冲深度的设计方法:以静态分析为主,通过模拟来确定缓冲深度。
-
先行指令缓冲栈的设计:
- 先行指令缓冲栈已经充满:则缓冲深度为 D I = ⌈ L 1 ( t 2 − t 1 ) t 2 ⌉ D_I = \lceil \frac{L_1(t_2-t_1)}{t_2}\rceil DI=⌈t2L1(t2−t1)⌉,其中 L 1 L_1 L1为指令序列最大长度,平均分析时间为 t 1 t_1 t1,平均取一条指令 的时间为 t 2 t_2 t2。如果这种指令流的连续长度超过 L 1 L_1 L1,则先行指令缓冲栈失去作用。
- 若先行指令缓冲栈原来为空:缓冲深度为: D I = ⌈ L 2 ⋅ ( t 1 ′ − t 2 ′ ) t 1 ′ ⌉ D_{I}=\lceil\frac{L_{2} \cdot\left(t_{1}^{\prime}-t_{2}^{\prime}\right)}{t_{1}^{\prime}}\rceil DI=⌈t1′L2⋅(t1′−t<