竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS 割り込みはパイプラインのどのステージで起こるか

<<   作成日時 : 2013/06/30 05:59   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0


 パイプライン実行するプロセッサで割り込みはどのタイミングで発生するのか。
ここではヘネシー&パターソンの本にあるパイプライン(5段)に合わせてどのステージでどんな種類の割り込みが発生しうるか整理した。

□IF 命令フェッチ
・ITLBミス→補充後、当命令再実行
・ITLBの回復不可能なエラー(エントリの多重ヒットなど)
・命令アクセスエラー(キャッシュ・主記憶の故障など)

□ID 命令デコード
・未定義命令 命令デコードの結果、どれにも該当しない
・デバッグ用命令 特定の命令パターンにマッチ
→該当するエントリへのCALL命令に差し替える。戻るのは次の命令。

□EX 実行
・演算の例外(オーバーフロー、ゼロ除算など)
・アドレス計算の結果、アライメントエラー
 →LEA命令がある場合は、アライメントエラーは抑止

□MEM メモリ参照
※遅れて発生することがある
・アドレス計算の結果、DTLBミス(ロード・ストア)→補充後、ロードストア動作
・DTLBの回復不可能なエラー(エントリの多重ヒットなど)
・データアクセスエラー(キャッシュ・主記憶の故障など)

□WB レジスタ書き込み
・特になし
 →あるとすれば、レジスタ書き込み時の回復不能なハードエラー

□外部割り込み 以下は現在の命令実行とは無関係に発生しうる。
・リセット
・マシンチェック(異常時)
・WDT(WatchDogTimeout)
 →なんらかの要因でプロセッサの動作がハングアップしている場合、一定時間後に発生させる割り込み
・周辺機器からの割り込み

□外部プロセッサから自キャッシュがスヌープされた時の回復不能なエラー
・キャッシュはデータとタグでエラーが起こりえる。自キャッシュのデータやタグが外部から変更されるような時はメモリのエラーが発生しうる。

□システムコールで使用するトラップ命令は通常の分岐命令と同じ扱い


 プリフェッチ動作でフェッチ前、またはデータロード前にTLB上にないアドレス空間にアクセスした場合はどうなるか?プリフェッチは参照が予測されるメモリの内容を事前にキャッシュメモリに持ってくるための動作であり、時間のかかる割込みを発生させてTLBのエントリを補充するなどの動作はフェッチ、データロードが確定してから行うべきだ。

 あと、性能向上などの目的で追加した機能は、それらが回復不可能なエラーを起こした時に割り込みを発生させる。こうすればプロセッサが誤動作したままでデータを破壊するのを回避できる。回復可能なエラーの場合はプロセッサの内部でフラグを立てておいて、参照可能にしておけばよい。

 メモリ参照に関する割り込みはキャッシュやストアバッファなどを経由すると遅れて発生する。回復不可能なエラーなのでこれ以上データが破壊される前に停止させる。

 外部からの割り込みを除いて考えた場合、スーパースカラやアウトオブオーダ実行のプロセッサでは割り込みが同時に発生または順序が入れ替わって発生することがあり得る。1命令づつ逐次実行することを暗黙の前提としていたプロセッサがアウトオブオーダ実行の実装にした場合は、割り込みが発生順になるよう保証しなければならない。例えば割り込みが発生したらその命令以降の実行をいったん保留し、それ以前の命令を順次完了させ、割り込みを発生させる。以前の命令を順次完了させている途中で割り込みが発生したら同じように処理する。
 Alphaアーキテクチャでは割り込みの発生順序は入れ替わってもよいと定義してあり、割り込みが起こりえる命令の前に、それ以前の割り込みをすべて完了させるまで待たせるトラップバリア命令がある。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




割り込みはパイプラインのどのステージで起こるか 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる