08/03/09 02:58:25 H29jm950
ROBの説明です。
ROBはかなり異なった実装があるので、一番シンプルなものの説明をします。
ディスパッチステージ以前のどこかで、リオーダバッファ(=ROB)のエントリの確保が行われます。
ROBは、分岐予測ミスやメモリアクセス例外などのイベントが発生した場合に、
プロセッサ状態をインオーダ状態に、つまりイベントが発生したプログラム地点まで巻き戻すために存在します。
ROBの各エントリは、一命令や一物理レジスタに対応することが多いのですが、実装によって異なります。
ROBの各エントリは、出力先レジスタやストアバッファエントリ、例外情報など、
インオーダ状態の更新に必要な情報を保持しています。
ROBのエントリは、プログラム順に確保され、解放されます。
ROBのエントリが解放され、プロセッサ状態が更新されることを、
命令がリタイアする、といいます。コミットする、も同じ意味です。
OoO実行で後続の命令が先に実行が終わっていても、先行の命令がリタイアしていなければ、
後続の命令はリタイアが待たされます。
分岐ミスや例外が発生すると、ROBエントリは無効化され、OoO状態が破棄されます。
ページフォールトなどが起きた場合、ただちに例外を起すのではなく、いったん対応するROBエントリに例外情報が書きこまれます。
そのエントリが解放される時に、例外処理が発生します。