割り込み

読み:わりこみ
外語:interruption
品詞:さ変名詞

マイクロプロセッサの制御機能の一つ。

周辺機器が、自身に対してマイクロプロセッサの処理を必要としたとき、その周辺機器からマイクロプロセッサに信号が送信される。

マイクロプロセッサがその信号を受け取ると(基本的には)それまでの処理を中断してその周辺機器に対する処理を行なうよう制御が変更される。この一連の流れのことを割り込みという。

割り込み機能がマイクロプロセッサに実装されるのは、マイクロプロセッサが各種周辺機器の制御に本格的に使われるようになったときである。

割り込みが存在しない場合

割り込み機能が実装されていないマイクロプロセッサで、周辺機器の制御を行なうことは不可能ではない。

しかしこの場合、プログラムがある一定のタイミングで周辺機器の様子を調べるためにI/Oポートにアクセスしにいく必要があった(ポーリング)。

ポーリングの問題点

  • プログラムが煩雑になる
  • 特に必要もないのにI/Oポートにアクセスすることがある
  • そのために本来行ないたい処理の処理速度に悪影響が出る
  • 処理の流れによってはI/Oポートのアクセスが長時間行なわれず、周辺機器の制御が不確実となる

解決

そのため、周辺機器の処理が必要なときだけ、マイクロプロセッサに確実に働いてもらうという目的のために、周辺機器からの応答にマイクロプロセッサが反応して制御を周辺機器に対する処理に変更させる機構が求められたのである。

一般的には、マイクロプロセッサ(MPU)〜割り込みコントローラ(PIC)〜周辺機器(PICがMPUに内蔵されていることもある)のように接続されている。

周辺機器がPICに信号を送ると、PICがMPUに割り込み番号を送る。MPUは割り込み番号から割り込みベクタを参照し、割り込みベクタに書かれた番地に制御を移す、という動作を行なう。

割り込みと同時にMPUの動作権限が変わることもある。

ハードウェア割り込み

ソフトウェア割り込み

割り込み命令

Z80ではRST命令、80x86ではINT命令が該当する。あたかもCALL命令と同じように使う例も見られるが、それは本来の利用目的ではない。

割り込み処理においては、その処理を行なうためにマイクロプロセッサの処理権限が上がることが一般的であるので、処理権限の低い状態から高い処理権限が必要な処理を行なうような場合に使われることが多い。

例外

マイクロプロセッサという機器が発生させる割り込み。マイクロプロセッサレベルで見れば例外と割り込みは同じものである。

割り込み禁止状態の場合

マイクロプロセッサにおいて、何らかの理由で割り込みが行なわれると問題が発生するような場合(たとえば割り込みベクタの編集中)に割り込み禁止処置が取られることがある。当然、この状態のときは割り込み処理に制御が移ることはない。

この場合、割り込み禁止が解除されるとそれまで止められていた割り込みが即座に処理される。

このため、割り込み禁止状態で無限ループのバグに突入するとオペレーティングシステム(OS)がそのプロセスを制御することができなくなる可能性がある。但し、ユーザーアプリケーションにおいては割り込み禁止の動作を行なうことはできないのが普通である。

割り込みの優先順位の都合

複数の割り込みが同時に発生することは十分に考えられる。処理する順番をあらかじめ決めておかなければ、割り込みが無限ループに陥ってしまう可能性もある。

そのため、割り込みに優先度を付ける。優先度の高い割り込みは、低い割り込みよりも優先的に処理される。その途中で優先度の低い割り込みが発生しても、現在の処理終了まで待たせる。このようにして、割り込みが正しく処理されるようにするのが一般的である。

この場合は、先に行なわれている割り込み処理が終了すると、即座に後から来た割り込みが処理されるようになっている。