Posts Issued on February 23, 2022

posted by sakurai on February 23, 2022 #465

EIT処理

通常の命令処理以外の処理、例外(Exception)、割り込み(Interrupt)、トラップ(割り出し、Trap)を総称してEIT処理と称します。 パイプラインの各ステージで検出されるEITを以下に示します。

  • <PC>: 奇数命令アドレスジャンプ例外
  • <IF>: 命令フェッチアドレス例外、デバッグトラップ
  • <ID>: 無効命令例外、ゼロ除算例外(命令が除算かつdivisorソースレジスタの内容がゼロ)
  • <EX>: 無し
  • <MA>: メモリアクセスアドレス例外、デバッグトラップ
  • <WB>: 無し

割り込みはいずれのパイプラインステージで検出されるか、保留します。 さて、各ステージでEITが検出されると、前後の命令最大4命令でEITが検出されることになり、後続命令のEITが時間的に先に検出されることになります。これを処理すると命令の前後関係が逆転するために、EITを検出するパイプラインステージを揃えることを考えます。

この中で最も時間的に遅いのが、<MA>であるため、割り込みもここで検出することにします。パイプラインストリーム中に検出されたEITは全てパイプラインレジスタで<MA>まで保留し、ここで優先度を判定し、弱い順にEIT要因をスタックに格納します。従って、EITハンドラは優先度の高い順から実行し、弱い順にハンドラ実行することになります。

例外とトラップ、割り込みの違い

EITはいずれも命令ストリームの途中で起きる例外事象ですが、以下のような違いがあります。

  • E(xception): 当該命令は取り消される。具体的には<MA>で起こる場合はメモリに対する書き込みを無効化する。その他の場合は<WB>において書き込みを無効化(パイプラインキャンセル)する。
  • I(nterrupt): 当該命令の後に割り込みハンドラに分岐するので、当該命令は実行する。
  • T(rap): 当該命令の後にトラップハンドラに分岐するので、当該命令は実行する。

左矢前のブログ 次のブログ右矢