外部割り込み(ガイブワリコミ)とは | 意味や読み方など丁寧でわかりやすい用語解説
外部割り込み(ガイブワリコミ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
がいぶわりこみ (ガイブワリコミ)
英語表記
external interrupt (エクスターナル インタラプト)
用語解説
「外部割り込み」とは、コンピュータのCPUが現在実行している処理を一時的に中断し、外部のハードウェアデバイスからの信号や、システム内部の特定のイベント要求に応じて、あらかじめ定められた別の処理を実行する仕組みである。これは、CPUが単一のタスクに集中するのではなく、複数のタスクや外部イベントに効率的に対応するために不可欠な技術である。例えば、キーボードからの入力、ディスクドライブからのデータ読み書き完了、ネットワークからのデータ受信など、CPUが自ら積極的に監視しなくとも、必要な時にCPUに処理を依頼するための信号として利用される。これにより、CPUはI/Oデバイスの処理完了をひたすら待ち続ける「ポーリング」と呼ばれる非効率な方式から解放され、その時間を他の有用な計算処理に充てることができるため、システム全体の応答性と処理能力が大幅に向上する。
次に、この外部割り込みの仕組みと詳細について解説する。外部割り込みが発生する主な要因は多岐にわたる。最も代表的なものは、キーボード、マウス、プリンタ、ディスクドライブ、ネットワークインターフェースカードといった入出力(I/O)デバイスからの信号である。例えば、ユーザーがキーボードのキーを押すと、その信号がキーボードコントローラを介してCPUに割り込み要求として送られる。ディスクドライブがデータの読み書きを完了した際や、ネットワークカードがデータを受信した際も同様に、CPUに割り込みをかけて処理の継続を促す。また、システム内部のタイマー(システムクロック)による定期的な割り込みも重要である。これは、マルチタスクOSにおいて、複数のプログラムにCPUの利用時間を公平に分配するために、一定時間ごとにCPUに割り込みを発生させ、次に実行するプログラムを切り替える「タイムスライス」の実現に用いられる。さらに、ハードウェアの異常(例:メモリのパリティエラー、電源の異常)や、ユーザーによるリセットボタンの押下なども外部割り込みの一種として扱われ、システムを安定的に動作させるための重要なトリガーとなる。
外部割り込みが発生してから実際に処理が実行されるまでの流れは以下のようになる。まず、外部デバイスやタイマーが特定のイベントを検出すると、そのデバイスに対応する割り込み要求信号(IRQ: Interrupt ReQuest)を発生させる。この信号は、割り込みコントローラ(PIC: Programmable Interrupt Controller)と呼ばれる専用のハードウェアに送られる。割り込みコントローラは、複数のデバイスからの割り込み要求を一元的に管理し、優先順位に基づいてCPUに割り込みを通知する役割を担っている。複数の割り込み要求が同時に発生した場合でも、割り込みコントローラがその優先順位を判断し、最も高い優先順位の割り込み要求をCPUに送ることで、システムの秩序が保たれる。
CPUが割り込み通知を受け取ると、CPUは現在実行中の処理を一時的に中断する。この際、割り込み処理が完了した後に元の処理を正しく再開できるように、現在のプログラムカウンタ(次に実行する命令のアドレスを保持するレジスタ)や、各種レジスタ(CPU内部の一時的なデータ保持領域)の内容といったCPUの状態情報を、メモリ上のスタック領域に退避させる。この状態退避は、割り込み処理から戻る際に、CPUが元の処理を中断した時点からシームレスに再開するために不可欠なステップである。
状態の退避が完了すると、CPUは割り込みの種類を特定する。割り込みの種類は、割り込みコントローラからCPUに送られる割り込み番号(ベクタ番号)によって識別される。CPUはこの割り込み番号を基に、メモリ上の割り込みベクタテーブル(割り込みハンドラのアドレスを格納した表)を参照し、該当する割り込み処理ルーチン、すなわち割り込みハンドラ(または割り込みサービスルーチン, ISR)のアドレスを取得する。そして、CPUの制御は取得した割り込みハンドラのアドレスにジャンプし、割り込みの種類に応じた具体的な処理(例:キーボードからの入力データをバッファに格納する、ディスクの読み書き状態を更新する)を実行する。
割り込みハンドラによる処理が完了すると、割り込みハンドラはCPUに割り込み処理が終了したことを通知する。通常、割り込みコントローラに対して割り込み終了通知(EOI: End Of Interrupt)を送信し、同じデバイスからの次の割り込みを有効にする。その後、CPUはスタックに退避しておいた元のCPUの状態情報(プログラムカウンタやレジスタの内容)を復元する。この復元処理が完了すると、CPUは割り込みによって中断された元の処理を、中断された時点から何事もなかったかのように再開する。
このように、外部割り込みは現代のコンピュータシステムにおいて極めて重要な役割を果たしている。その最大の利点は、CPUの効率的な利用を可能にすることである。割り込み方式がない場合、CPUはI/Oデバイスの準備状況を定期的に確認する「ポーリング」を繰り返す必要があり、その間、他の計算処理はほとんど実行できない。しかし、割り込み方式を採用することで、CPUは通常時は計算処理に専念し、I/Oデバイスが処理の完了やデータの準備ができた場合にのみ割り込みによって通知を受け、必要な処理を実行するだけで済むため、システム全体のパフォーマンスが向上する。また、突発的に発生するイベント(例:ネットワークからの緊急データ受信)に対して、即座に対応できる「リアルタイム応答性」を保証する上でも不可欠である。OS(オペレーティングシステム)の根幹を支える技術でもあり、マルチタスクやマルチプログラミング環境におけるプロセスの切り替え、デバイスドライバによるハードウェア管理、システムコール(アプリケーションからOSの機能を利用する要求)の処理など、OSの主要な機能の多くは割り込み機構の上に成り立っている。
ただし、割り込み処理にはいくつかの注意点も存在する。割り込み処理はCPUの実行フローを強制的に中断させるため、割り込みハンドラの処理時間はできるだけ短くすることが求められる。処理時間が長すぎると、他の重要な割り込みが遅延したり、システム全体の応答性が低下したりする可能性がある。また、複数の割り込みが同時に発生し、それぞれの割り込みハンドラが共有データにアクセスする場合、データの整合性を保つための排他制御が必要になる。このため、割り込みハンドラ内では、デッドロックの回避や、割り込みを一時的に禁止する「割り込み禁止区間」(クリティカルセクション)の適切な管理が求められる。このように、外部割り込みはシステムの高性能化と安定化に大きく貢献する一方で、その設計と実装には慎重な配慮が必要な高度な技術である。