• ベストアンサー

CPUの割込みについて

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

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

  • ベストアンサー
  • hero1000
  • ベストアンサー率29% (114/390)
回答No.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にし、退避していたプログラムの実行状態を元に戻し、再び通常の処理に戻り ます。 以上が大まかな流れです。 長文になってしまいましたがわかりましたでしょうか・・・?? もし焦点のズレた回答になってしまってたならご指摘下さい。

関連するQ&A

  • CPUの割り込みを強くしてあるけど、大丈夫?

    ぱっぱと処理を進めてほしくてレジストリをいじりC PUの割り込みを強く設定して使っているけど、 CPUの寿命が縮まったりとかしますか?

  • マルチタスクOSとCPUについて

    マルチタスクOSとしてITRONをよく聞きます。 マルチタスクOS(ITRONに限らず)を動作させるCPUは、マルチタスクに対応した何らかの仕組みを搭載したCPUでないと動作させることができないのでしょうか。 ノンプリエンプティブ方式だったらどんなCPUでも実現可能である、とかプリエンプティブ方式はCPUにこういった仕組みが搭載されていないと実現不可能とか(その逆とか)。 どんなCPUでも実現可能だが、CPUがこういう仕組みを搭載しているとオーバーヘッドが小さい(効率がいい)等を知りたいです。 よろしくお願いします。

  • PIC16F1827の外部割込み

    PIC16F1827のRB0を 外部割込みとして入力の立上りで割込みを発生するように 設定します。 1.割込み禁止 2.プログラムAスタート 3.RB0に立上り入力あり 4.プログラムA終了 5.割込み許可 ・・・のような場合 5.以降に割込みが発生するでしょうか? ご教授お願いします。

  • 64bit CPUでは・・・

    すごく初歩的な質問ですみません。 64bit対応のCPU(Athlon64x2とか、Pentium4の上位とPenD,PenEx)では、64bit版のOSを使わないとならないのでしょうか?(普通の32bit版では動作しないのでしょうか?) 64bitではまだ、周辺機器のドライバの対応が不完全だとか、不安定だとか聞いたのですがどうなのでしょうか? また、もし32bitでも動作するのだとしたら、その場合64bitで動作される場合に比べて処理能力が落ちたりするのでしょうか? ちなみに、当方でメモリを8GBも必要とされていないし、もし動作不安定だったり、互換性が問題あるのなら、できればWinXPでは32bitで行きたいと考えています。 質問が多くなってしまって、すみません。よろしくお願いします。

  • 外部割込みについて

    今3052というマイコンを使ってIRQによる外部割込みの勉強をしています。3つの押しボタンスイッチ(赤、青、黄色)にそれぞれ赤ボタンを押されたらDCモータを動かす、青ボタンを押されたらサーボモータを動かす、黄色ボタンを押されたらLEDを点滅させるというプログラムを作りました。動作が終わった後に次の動作ボタンを押すと問題なく3つ動くのですが、作業中にボタンを押すと一瞬動作が止まったりしてしまいます。そこで動作中割り込み禁止にし、動作は止まらなくならました。 ですが、エレベータのボタンのように作業中に押されたら作業を止めないで作業が終了したらその時押されたボタンに対応する作業をするようにできません。どうゆう風にすればいいのか教えてください。お願いします。ちなみに言語はC言語を使っています。

  • [VB.NET]WriteAllBytes中の割込み処理について

    [VB.NET]WriteAllBytes中の割込み処理について いつも大変お世話になっています。 早速ですが、 ファイルをFile.WriteAllBytesで フロッピーディスクへ書き込んでいる最中に プログレスバー(またはgifアニメーション)を 動作させたいのですが可能でしょうか? もし可能であればアドバイスお願いいたします。 'タイマー処理 Timer1.Interval = 500 Timer1.Start() 'byte配列のファイルへの書き込み File.WriteAllBytes(name, dest) '<- 固まったように見える... Timer1.Stop() 割込み時の処理には My.Application.DoEvents() を使用しています。

  • CPUの交換

    会社で使っているデスクトップ DELL をマルチディスプレイにしました。 セカンダリのモニタはUSBポートから映像信号をとり VGAに変換しています。 ところが、そのセカンダリのモニタは描画するのに時間がかかってしまい、例えばヤフーの画面を描画するのに1秒ちょっとくらいかかってしまします。 多分原因は動作環境だと思います。 このPCは古くて、CPUは Intel Pentium III プロセッサ 996MHz 320MB RAMです。 それでそのセカンダリのモニタを使用するためにインストールしたデバイスの動作環境はPentium III 1.2GHz以上です。 つまり、CPUの動作周波数が遅いのでこのような症状が出ているんじゃないかと思いました。他の動作環境は満たしています。 ちなみにOSはXPです。 そこで教えていただきたんですが、 Pentium III 1.2GHz以上のCPUに交換は可能でしょうか? 何か適当なものは未だ、売っていますでしょうか? とにかく、この1.2GHz以上を満たせばよいので特に高スペックなものはいりません。 また、そのようなCPUがあったとして CPUのクロック周波数を上げることによって 他の周辺機器に悪い影響が出ますでしょうか?? また、CPUがあったとして 交換作業は単純にCPUを交換するだけなのでしょうか?? 他に、必要な作業があるのでしょうか?? 教えて下さい。宜しくお願いします。

  • 割り込みへの対応

    最近、悪事を注意した人が刺されるなど、物騒な事件が多発していますが、自分も似たような事になってしまいました。 今朝、ラッシュ時の駅の下り階段で私の横から人が割り込もうとしたので、体を張って割り込みを阻止しました(サッカーの経験があるのでその要領で)。諦めたのか私の横から消えたので、そのまま階段を下りていたら、突然誰かに後ろから押されて階段から転落しました。顔は見えなかったのですが、おそらく割り込もうとした人物だと推測します。周囲の人を巻き込まなかったのは幸いでしたが、一歩間違えば将棋倒しでした。混雑している階段で人を押せばどうなるかわからないのでしょうか?皆並んでいるので、自分の前に入れてしまえば自分だけでなく他の人も不快に思うと考え割り込みを許さなかったのですが、こういう場合、どのような対応が適切なのでしょうか。怪我は今のところ大したことなく一度自宅に戻ったのですが、警察には届けたほうが良いでしょうか?

  • 私のCPUはもう古いですか?

    パソコンはすぐ新しい企画や周辺機器が出るので 今の自分のPCの状態が新しいのやら古いのやら 問題なくてもどのラインやら位置やら全く分かりません 今、一番コストパフォーマンスで優れたCPUは何ですか? そして私の使ってるCPU Intel Core2 Duo E6850 3.00GHz は、どのラインやら位置に属していますか?

  • IntelとAMDのCPUですが

    IntelとAMDのCPUとでは、よく「Intelの方が安定してる」とか言いますが、この安定しているとはどのようなことを言っているのでしょうか。 (1)Intelの方がパソコンが長持ちする。 (2)Intelの方が動作そのものが安定している。 (3)アプリや周辺機器との相性がIntelの方がいい。 (4)トラブルことが少ない。 (5)Win10などの更新の際もトラブルが起きにくい。 (6)CPUそのものはいいが、AMDだとマザーボード側にトラブルが起こりやすい。 (7)Intel製のCPUの方がメモリーとの相性とか不具合が少ない。 私的にはこういうことかなと思うのですが。 よろしく。

専門家に質問してみよう