割り込みの分類

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

 TRONCHIPでは割り込みをEITという言葉で整理している。EITとは
・Exception (例外)
・Interrupt (割り込み)
・Trap (トラップ)
で、Exceptionはハードウェア障害など深刻度が大きい割り込み、Interruptは外部信号からの割り込み、Trapはゼロ除算やシステムコールなどのプログラムの流れの中で発生する割り込み。例外/割り込み/トラップといった呼称はプロセッサによって揺らぎがあるので以降EITで総称することにする。

 EITの発生はその原因となる命令の順序どおりになるとは限らない。メモリのアクセスでエラーとなりExceptionが発生してもそれはずっと前に実行したストア命令かもしれないし、Interruptは命令実行と非同期に発生する。Trapもアウトオブオーダ実行だと入れ替わる可能性がある。

□Trap

・演算結果の例外 演算の結果が正しく表現できない場合に発生する
 ・整数ゼロ除算
 ・整数オーバーフロー
 ・浮動小数点系(ゼロ除算/アンダーフロー/オーバーフロー/不正確/無効演算)
 ・浮動小数点→整数変換オーバーフロー

・システムコール 指定した番号により特定の機能を呼び出す。OSなどが管理

・未定義命令 命令コードが未定義なもの、エミュレーションが必要なものを検出する
 ・エミュレーション ハードウェアとして実装していない命令をエミュレーションする
 ・不正命令 仕様で許していない命令フォーマット
 ・デバッグ機能 特定の命令フォーマットにマッチするパターンを設定し、該当する命令が現れたらトラップ

・パフォーマンス測定 加算の回数など測定したい項目について監視し、ある回数を越えたらトラップ

・エラー通知
 内部でエラーを修復し実行を継続した場合、その頻度によりトラップ

□Interrupt

・リセット系
 ・POR PowerOnReset 電源投入時のリセット
 ・WDT WatchDogTimeout 一定時間ハングアップを検出すると検出回路から割り込む
 ・BOR BrownOutReset 電源のドロップを監視(PICなど一部のマイコン)

・タイマ割り込み 設定から一定時間後に割り込む

・インターバル割り込み 毎回定期的な間隔で割り込む

・外部割り込み
 4〜16レベル程度で設定、優先順がある
 最優先の外部割り込みはマスクできないようにしてあるものもある(NMI)

・他コアが検出した共通リソースの故障 共有のキャッシュやメモリ部分など

□Exception
 主にプロセッサが実装する機能の故障検出。エラーの発生率は以下を想定していることが多い。
  外部メモリ>チップ内メモリ(キャッシュデータやタグなど)>演算器
 以降エラー記録とあるのはソフトウェアによるものではなく内部レジスタへの書き込みのこと。

・TLBミス
 メモリアクセス時にTLBがミスヒットしたら割り込み、アドレス変換テーブルからTLBに新しいエントリを設定してもう一度同じメモリアクセスを行う命令を実行する。これは故障検出ではない。

以下、メモリアクセスに関する機構別

・ロードバッファ パリティエラー
・ストアバッファ パリティエラー

・TLB I/D(命令/データ)
 ・TLB パリティエラー タグ部とデータ部で別々に検出することもある
 ・TLB マルチプルヒット フルアソシアティブ構成のTLBでは複数のエントリがマッチする故障が起こりうる

・一次キャッシュ I/D(命令/データ)
 ・タグパリティエラー
 ・データパリティエラー

・二次キャッシュ U(命令・データ共通)
 ・タグパリティエラー
 ・データパリティエラー

・三次キャッシュ U(命令・データ共通) 他コアと共通
 ・タグパリティエラー
 ・データパリティエラー
※ここで発生したエラーは他コアにも通知しなければならない

・ローカルメモリ
 データパリティエラー
 範囲外アクセス(Time Out)

・メモリ
 データパリティエラー
 範囲外アクセス(Time Out)

・レジスタファイル
 データパリティエラー

・分岐予測バッファ
 データパリティエラー
 →単に分岐予測ミスになるだけで性能は落ちるが演算結果には問題ない。エラー記録のみ行う。

・演算器
 演算器リトライタイムアウト
 →演算エラーはほぼないことが前提で放射線などで起こるビット反転がまれに発生することを想定。このためリトライすれば正しい結果が得られる。もし複数回リトライしてもエラーが検出される場合はハードウェアの固定故障。
 リトライ成功時はエラー発生の記録のみ行う。

□メモリ関係の修復可能なエラーについて
 ECCのように訂正可能な方式で保護されている場合はエラーの発生を記録し、必要があれば累積した値でトラップする。

□プリフェッチについて
 命令やデータのプリフェッチで故障検出した場合は以下の可能性がある:
 ・実際は実行や参照をしないアドレスの範囲にすべってアクセスした場合
  →プリフェッチは無効で無視して問題ない。(できればプリフェッチ機構側で抑える)
 ・プリフェッチ対象で使った機構が本当に故障している場合
  →プリフェッチ動作を保留し、本当にアクセスを行った場合の例外発生にまかせる。該当箇所にアクセスがなければエラー記録だけ行う。


 レジスタファイルや演算器のように実行に近い部分は原因となった命令がわかるが、メモリアクセスで例外が発生した時はキャッシュの掃き出し時などずっと後で起こる場合があるのでどの命令が原因かわからない。この場合は命令実行に非同期に発生するという点でInterruptに近い。どのみち継続不能なので発生した時点で速やかに停止すべきである。
 またTLBミスは例外扱いだがエントリ再設定後にTLBミスを発生させた命令から再実行させるのでプログラムの流れどおりでありTrapに近い。

 あと、Exceptionに関するエラーの検出について。例えばプリフェッチ機構でアドレス範囲外に出さないように抑えたからといってアドレス範囲外のExceptionが発生しないとは限らない。AがあるからBは起こり得ないというのはAが正しいという前提があるからで、Exceptionを発生させる方としては事象に依存関係があってもそれぞれ単独にエラー検出をすべきである。


トロン仕様チップ標準ガイドブックトロン仕様チップ標準ガイドブック
トロン協会

パーソナルメディア 1992-12-20
売り上げランキング : 2164390

Amazonで詳しく見る
by G-Tools

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック