CPUの割込みの仕組みと、周辺機器がCPUに対して割込みを発行した場合のCPUの動作の流れについてどうなるのか教えてください。

A 回答 (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にし、退避していたプログラムの実行状態を元に戻し、再び通常の処理に戻り
ます。

以上が大まかな流れです。
長文になってしまいましたがわかりましたでしょうか・・・??
もし焦点のズレた回答になってしまってたならご指摘下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報