だから私はアウトオブオーダー命令実行のためのトマスロアルゴリズムを理解しようとしています。これが私がこれまでに得たものです:
命令は順番にフェッチされ、命令キューに格納されます。
レジスターの名前変更は次のどこかで行われます...? 私が理解していることから、これはレジスタにラベルを付けることで WAR/WAW の危険を回避することです。add r1,r2,r3 (1) add r3,r5,r6 (2) WAR ハザードがあり、r1 に追加する前に命令 (1) が r3 の古い値を読み取ることを確認する必要があるとします。したがって、命令キュー (?) 内で、ハードウェアがレジスタの名前を変更すると思います。
予約ステーションに指示が出されます。私が理解していることから、各機能ユニットには独自の予約ステーションのセットがあります。しかし、それは、適切にタグ付けされたオペランドが共通データ バス上で利用可能な場合に、その機能ユニットが実行する命令のキュー (FIFO) のようなものでしょうか?
命令は任意の順序で (順不同で) 終了する可能性があり、さらに多くの命令が来る可能性があるため... より多くの命令が入る前に、共通データ バスがレジスタ ファイルを更新する段階のようなものはありますか? リオーダーバッファが使用されていると聞いたことがあります。これは基本的に命令を順番に並べ替え (これは、命令に何らかのタグがあることを意味する必要があります)、レジスタの結果がレジスタファイルにコミットされます。
私が混乱しているのは、レジスタの名前変更の実装と、リザベーション ステーションの構造です。
助けてくれてありがとう。