「割り込み」って聞くと、行列に割り込むイメージがあって、なんか嫌な感じですよね。
でも、コンピュータにおける割込み処理は非常に重要です。
内部割込みと外部割込みの二つがあるので、今回はこの割込み処理に関して、解説していきます!
割込み処理とは?
コンピュータにおける割込みは、実行中のプログラムを一時的に止めて別の処理を優先的に行わせるために利用されます。
あるタスク(処理)が実行中の時に、急に他のタスク(処理)を実行したい際に、割込み処理をすることで、急なタスクを優先的に実行したりします。
この割込み処理が存在する主な理由としては、「周辺機器からの情報を、他の作業をしながらも取り落とすことなく受け取ること」となります。
例えば、タスクを処理している高速なCPUが、低速な周辺機器からの指示を待っていると、その間CPUは暇しているので、CPUの能力が勿体無いですよね。そうならないように普段はCPUがガリガリ動いているなかで、周辺機器からの入力があったら、割込み処理でその処理だけを行うので、無駄がなくなります。
割込みのイメージは以下のような感じですね。
走っていた処理を中断して、割込みされた処理を優先して処理し、終わり次第元の処理が再開されます。
そして、割込み処理には「内部割込み」と「外部割込み」の二つがありますので、その違いを見ていきましょう。
内部割込み
CPU自体が発生させる、実行中のプログラムが原因で発生する割込みのことを内部割込みと呼びます。
内部割込みの例としては以下のようなものがあります。
内部割込み
- プログラム割込み:
ゼロに除算や桁あふれ、書き込みできない領域に書き込みをしようとした場合に生じる割込み - SVC(Super Visor Call)割込み:
入出力処理を要求するなど、カーネル呼び出し命令が発行された時に生じる割込み - ページフォールト:
仮想記憶領域において、存在しないページへアクセスし失敗した際に生じる割込み
いずれもCPU内部が起点に発生する割込みですね。
外部割込み
一方、CPUの周辺装置(外部)から要因が発生する割込みを、外部割込みと呼びます。
外部割込みの例としては以下のようなものがあります。
外部割込み
- 入出力割込み:
入出力装置の動作が完了した際や中断時に生じる割込み - 機械チェック割込み:
電源の以上や記憶装置の障害など、ハードウェアの障害発見時に発生する割込み - コンソール割込み:
利用者により意図的に発生する割込み
CPU外で発生する割り込みなので、色々な種類がありますね。
割込みの優先順位と多重割込みの関係
割込みには優先順位が決められています。
そのため、同時に割込みが発生した場合は、優先順位の高い方の割込み処理が先に実行され、優先順位が低い処理は、高い処理が終わった後に処理が再開されます。
ただし、「多重割込みを許可しない」こともできるので、その際は優先度に関わらず、実行中の割込み処理が終わるのを待って、後から発生した割込みが実行される流れになりますね。
まとめ
今回はコンピュータにおける割込み処理に関して、解説してきました。
割込み処理まとめ
- 割込み処理とは実行中のタスクを中断して、別の処理を優先的に行うこと
- 割込み処理のメリットは、周辺機器からの情報を、他の作業をしながらも取り落とすことなく受け取ること
- 内部割込みは、CPU自体が発生させる割込み
- 外部割込みは、CPUの周辺装置(外部)から要因が発生する割込み
割込み処理によってCPUをリソースを有効活用し、優先度の高い処理結果を早く算出することができますね。
行列や運転中に割込むのはダメなことですが、コンピュータにおいては非常に大事ですね。
あと、仕事をしている時に、暇な人が話し掛けてきて、割込みが発生するのも困ったものですね。。。(笑)
以上です!