********************reading from 《超标量处理器设计》--姚永斌***************************
顾名思义,AGU(Address Generate Unit)用来计算地址;
- 访问存储器类型的指令(一般指load/store指令)通常会在指令中携带它们想使用的存储器地址,AGU负责对这些指令进行处理,计算出指令中所携带的地址。
- 其实,在普通流水线的处理器中,都是在ALU中计算这个地址,但是在超标量处理器中,由于需要并行地执行指令,而且访问存储器类型指令的执行效率直接影响了处理器的性能,所以单独使用了一个FU来计算它的地址。
- 对于 MIPS 处理器来说,load/store 指令的地址等于Rs+offset,其中 Rs 是指令携带的源寄存器,offset 是指令携带的立即数,AGU 只需要将两者进行加法运算就可以得到指令所携带的地址了。
如果处理器支持虚拟存储器,那么经过 AGU 运算得到的地址就是虚拟地址,还需要经过 TLB 等部件转化为物理地址,只有物理地址才可以直接访问存储器
- 在一般的处理器中,L2 Cache以及更下层的存储器都是使用物理地址进行寻址的
- 因此在支持虚拟存储器的处理器中,AGU只是完成了地址转换的一小部分,它只是“冰山的一角”,真正的“重头戏”是从虚拟地址转化为物理地址,以及从物理地址得到数据的过程(即访问 D-Cache)。这个过程直接决定了处理器的性能,
- 尤其是对于load/store指令也采用乱序执行的处理器,需要一套复杂的硬件来检测各种违例情况,例如 store/load 违例或者load/load 违例,并且还需要对它们进行修复,这些任务都增加了设计的复杂度,使访问存储器类型的指令成为了超标量处理器中最难以处理的指令
- 这部分内容涉及到 load/store指令的相关性处理,在计算机的术语中称为Memory Disambiguation