- ベストアンサー
CPUの割込みについて
CPUの割込みの仕組みと、周辺機器がCPUに対して割込みを発行した場合のCPUの動作の流れについてどうなるのか教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
CPUの「回路としての」仕組みはよくわかりませんので、あくまでもソフトが 利用するモノとしての仕組みを書きます。 CPUの割り込みの種類には「ノンマスカブル割り込み(NMI)」「内部割込み」 「外部割込み」があり、後者2つは「マスカブル割り込み」と総称されます。 周辺機器がCPUに発行する割り込みは「外部割込み」にあたり、これをIRQと呼んで 優先順位が高い方から順に番号が振られています。 内部割込みはタイマーなどに使い、ノンマスカブルはリセット割り込みです。 外部割込みはIRQに割り当てられたポートの状態によってCPUが認識しますが、 この「状態」には「立ち上がりエッジ」「立下りエッジ」があります。(ポート の電圧がL状態からH状態になった瞬間が「立ち上がりエッジ」、「立下りエッ ジ」はその逆です)CPUの種類によっては「H状態である時間が経ったら」など も要因として認識します。 割り込みが発生すると、CPU内部のレジスタ「割り込み状態フラグ」の、対応する ビットが1になり、CPUは例外処理(割り込み発生の処理)に移ります。 この最初の処理をしているのが「割り込みコントローラ」です。 するとまず、「割り込みマスクレジスタ」というレジスタをチェックし、マスク の状態が検出されるとその割り込みは無視されます。(NMIはマスクできません) そしてマスクされていないときは、通常、NMI→内部割込み→外部割込みの順に 「割り込み状態フラグ」の状態をチェックしていき、1のところを見つけると 該当する「割り込みベクタ」という領域に処理を移します。 ここでわかるのは、同時に複数のビットが1になっていても、優先順位の高い ところで引っかかってしまうということです。 さて、「割り込みベクタ」というのは、割り込み処理への分岐先のアドレスが 記述してあるテーブルです。プログラマーはここに、割り込みルーチンのアド レスを登録しておきます。CPUによっては「セカンダリベクタ」という所が 用意されており、プログラマーはセカンダリベクタに割り込みルーチンを登録 するものもあります。 そして「割り込みベクタ」(→「セカンダリベクタ」)から割り込みルーチン に処理が移されるとき、CPUは現在のプログラムの実行状態をすべて退避させ ます(この退避先はCPUによってさまざまです)。それから処理を移し、通常 ここから割り込み処理終了まではNMI以外のすべての割り込みが禁止されます。 (このため、割り込みルーチンは短めにしておかないと、他の割り込みが実行 されなくなってしまいます) そして割り込み処理ルーチンが終了すると、CPUは「割り込み状態フラグ」のビット を0にし、退避していたプログラムの実行状態を元に戻し、再び通常の処理に戻り ます。 以上が大まかな流れです。 長文になってしまいましたがわかりましたでしょうか・・・?? もし焦点のズレた回答になってしまってたならご指摘下さい。