-PR-
解決済み

CPUの割込みについて

  • 困ってます
  • 質問No.88852
  • 閲覧数960
  • ありがとう数4
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 64% (161/248)

CPUの割込みの仕組みと、周辺機器がCPUに対して割込みを発行した場合のCPUの動作の流れについてどうなるのか教えてください。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル11

ベストアンサー率 29% (114/390)

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

以上が大まかな流れです。
長文になってしまいましたがわかりましたでしょうか・・・??
もし焦点のズレた回答になってしまってたならご指摘下さい。
関連するQ&A
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ