计算机体系结构:精确例外与ROB详解
计算机体系结构:精确例外与ROB详解
在计算机体系结构中,精确例外和重排序缓冲区(ROB)是两个重要的概念,它们对于实现高性能的处理器设计至关重要。本文将详细介绍这两个概念及其在现代处理器中的应用。
1 精确例外
在之前提到的Tomasulo算法中,由于采用了非精确的例外处理机制,一旦发生例外,硬件很难处理乱序执行的指令序列。操作系统需要处理器提供精确例外机制,以确保在处理例外时,所有在发生例外指令之前的指令都已经执行完毕,而例外指令之后的所有指令都尚未执行。
精确例外:指在处理例外的时候,发生例外指令之前所有的指令都已经执行完了,例外指令后面的所有指令都还没执行。
为了解决这个问题,需要扩展Tomasulo算法来支持推测执行。具体来说,就是将指令结果的旁路从实际完成操作中分离出来。这样可以允许一条指令执行并将其结果旁路给其他指令,但不允许这条指令执行任何不能撤销的更新操作,直到确认这条指令不再具有不确定性为止。简单来说,就是增加一个缓冲区暂时存放结果,直到这个数据不再更新,再写回寄存器堆。
2 重排序缓冲区(ROB)
重排序缓冲区(ROB)类似于Tomasulo算法通过保留站扩展寄存器集的方式,提供了额外的寄存器资源。ROB会在一定时间内保存指令的结果,这段时间从与指令相关的运算完成开始,到该指令提交完毕为止。
提交(commit):就是在流水线中增加了一个commit阶段,只有在这个阶段才能真正修改计算机的状态。其他时候都是修改ROB中的值。
现在指令的执行步骤分为四步:发射、执行、写结果和提交。
2.1 ROB包含的内容
ROB中的每个项目包含4个字段:
- 指令类型:分支指令、存储指令、寄存器操作指令
- 目的地字段:提供写入结果的寄存器编号
- 值字段:在提交指令前保存指令结果
- 就绪字段:指令已经完成执行,结果值准备就绪
2.2 增加了ROB的流水线结构
2.3 提交(commit)阶段详解
利用ROB实现了乱序执行后的有序结束,防止在指令提交之前采取任何不可撤销的动作。当一个指令到达ROB的头部而且其结果出现在缓冲区中时,则正常提交,此时处理器用结果更新其寄存器,并从ROB中清除该指令。
当预测错误的分支指令到达ROB头部时,它指出推测是错误的。那么ROB被清空,执行过程从该分支的正确后续指令重新开始。如果对该分支的预测正确,则该分支完成提交。
指令一旦提交完毕,它在ROB的相应项将被收回,寄存器或存储器目的地址将被更新,并且不再需要ROB项。
任意一条指令发生例外,就清除操作队列以及ROB,保证了现场的干净,因为在例外之前的指令都已经执行完毕,而后面的指令都未执行(未把结果写回)。
2.4 流水线执行情况详解
3 总结
精确例外和ROB机制共同实现了"有序发射、乱序执行、有序结束"的处理器设计目标,这对于提高处理器的性能和效率至关重要。