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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 割り込み、トラップ、例外、インタラプト…

<<   作成日時 : 2009/11/04 21:59   >>

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

 ある先輩が言っていた、「CPUの設計に割り込みがなきゃいいんだけどね」たしかに割り込みは煩雑だ。パララックス社のプロペラチップみたいに割り込みを受けたらCPUコアを切り換えるずるい(?)やつもある。
そろそろ着手しないと先に進めない部分もあるので、分類を行う。ま、名称などを見ると私が何の影響を受けているかわかるかもね。
 ここでの割り込みの呼び方:
 割り込み − いわゆる割り込み、トラップ、例外、インタラプトを総合して呼び方。
 トラップ − ソフトウェア要因による割り込み。
 例外 − なるべくこの呼び方は使わない。命令フォーマットのビットの例外的使用などと呼び方で混同しないようにするため。
 インタラプト − 外部信号による割り込み。
 リセット − CPUを初期化して(再)スタートさせる。広義には割り込みの一種。

トラップベクタ、インタラプトベクタ
トラップやインタラプトは種類別に複数の飛び先を指定できる。そのジャンプテーブルの先頭を指定するレジスタを用意する。
SR.tvect,SR.ivectのような感じ。

(1)リセット
・POR パワーオンリセット 電源投入時に内部では回路の安定(PLLの同期など)を待ってファームウェアをロードし、実行を開始する。ファームウェアはページテーブルウォークや未実装命令のエミュレートなど。これのみ開始番地(割り込みベクター)は非公開。
・XIR 外部信号によるリセット CPUの動作を止めてファームウェアをロードし、実行を開始する。滞留しているキャッシュのデータ掃き出しなど検討。マルチコアの場合、全コアが対象。
・WDT SR.wdtで設定したウォッチドッグ・タイムアウトによるリセット。
・SIR ソフトウェアによるリセット 特権モードで実行可能。
その他にも、RAS要因による回復不可能な状態になったときのリセット(マシンチェック)などがありうる。
POR,XIRはマルチコアでもいっせいに全コアがリセットされる。WDT,SIRなどは個別のコアをリセットするか要検討。RAS系は要因コアをdisableにするので個別にリセットすることになりそうだ。

(2)外部要因による割り込み(インタラプト)
・NMI マスクできない外部信号割り込み。NMI割り込みベクターに飛ぶ。
・INT1〜7 マスク可能な外部信号割り込み。SR.intで設定した番号以上のインタラプトは受け付けない。NMIはINT0相当。INT8〜15のように拡張もできるが、ここではNMIも含め8本とする。
※NMI,INTnはインタラプトと呼称する。
インタラプトはチップの外から見た割り込みなので、CPUチップ内部がマルチコアでもシングルコアでも同じように受け付けないといけない。マスクも全コア共通。どの割り込みがどの内部コアで実行するかは、セレクタを用意するのがいいのかもしれない。複数のコアが1つのインタラプトを同時に受け付けてはいけない。

(3)内部要因による割り込み(トラップ)
・TRAP命令 ソフトウェアのユーザモードから特権モードに対するリクエスト。
・命令種別トラップ
 ALU系 演算の例外に関するトラップ。
 LD/ST系 ロード/ストア系命令で起こりえるトラップ。TLBミスなどもこれに含む。多分、いちばん複雑になる。
 BRA系 分岐命令で起こりえるトラップ。アライメントエラーなど。
・命令実行ユニット別トラップ 昔風に言えばコプロセッサの例外とでも。
 浮動小数点例外 IEEE754で定義されているトラップ。マスク可能。
 十進命令例外 これはいまのところない。
 その他の拡張命令例外

 あと決めなければならないのは割り込みの優先度。リセット系が最優先だが、LD/ST系などはTLB、命令アクセス、データアクセスがからんでくるし、よく考えないといけない。
 それから、割り込みの多重度。何段まで割り込みが受け付けられるか、割り込みの資源退避はメモリ上のスタックにするのか、決められた個数のハードウェアスタックにするのか。
 割り込みの応答性というのもある。組み込み系ではARMのように高速で割り込みを受け付ける端子を持つものがある。サーバ系だとある程度内部の処理が落ち着いてからおもむろに受け付けるイメージがある。これは実装の違いもあるが、Out-of-Orderだと実行仕掛かり中の命令を破棄し再フェッチするのか保留にしてやり直すかなどがある。一般的に組み込み系の方が応答が早い。
 マルチコアの場合、全コアを割り込み対象にするのか個別でいいのかを検討する必要がある。また、コア間の割り込みの実現についても考えなければならない。2コア程度だとマルチCPUのイメージで外部への割り込みと同じように扱っても大差ないようだが、8コアや16コアとなった場合はどうだろうか?また、マルチスレッドを実現した場合は?

 やっぱり、割り込みはむずかしいな。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
他に
命令供給系(命令フェッチ系)
- I-TLB 関係
- 未定義命令例外 (prefix 例外も?)
- 未実装例外 (FPU 未実装なのに使おうとしたなど)
特権例外 (+ハイパー例外)
- 特権命令
- 特権メモリ空間アクセス (=>I/D TLB)
十進命令については、少なくともゼロ除算例外がありえると思います。

マシンチェック例外も、回復不能なものはリセットと割り切ったとしても(注:メインフレームは回復不能でもただちにリセットしない)、回復可能なものについては(対応するつもりなら)考えておく必要があります。(例えばキャッシュメモリのエラーはそこをアクセスするロード命令などで起きるので同期トラップと同等の扱いになり得ます)
m.ukai
2009/11/05 10:12
ありがとうございます。とりあえず自分が知っているぶんを書き出さないと進めないので、割り込みについて始めてみました。
マシンチェックでもご指摘のとおり、例外発生時の重度による動作(ステートの遷移)についてもまだはっきりとは決めていません。HALT状態で他のプロセッサに解除してもらうか、リセットして再開するかなどは、例えばRAS故障の程度によっても変わります。
houmei
2009/11/05 14:09

コメントする help

ニックネーム
URL(任意)
本 文




ぼくのかんがえたさいきょうCPU 割り込み、トラップ、例外、インタラプト… 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる