割り込み(Interrupt)とは
コンピュータにおける割り込み(Interrupt)とは、
CPUが
周辺機器などからの要求に応じて、現在実行中の処理を一時中断し、別の処理を実行する仕組みです。多くの
CPUは、この割り込みを効率的に処理するための機能を備えています。
割り込みの目的と効果
割り込みの主な目的は、「
周辺機器からの情報を、他の作業をしながらも取り落とすことなく受け取ること」です。これにより、以下のような具体的な効果が得られます。
CPU資源の有効利用
周辺機器の処理速度は
CPUに比べて遅いため、
周辺機器が処理を行っている間、
CPUが他の処理を行う方が効率的です。割り込みを用いることで、
CPUは
周辺機器の処理完了をポーリング(定期的な確認)する手間を省き、他の処理に専念できます。ただし、近年の高速な
CPUでは、ポーリングによる効率的な処理も研究されています。
応答性の向上
キーボードやマウスなどのユーザーインターフェースは、入力の遅延が許されません。割り込みを使用することで、ユーザーからの入力を確実に処理できます。
コンピュータがフリーズした際、マウスカーソルのみが動くのは、割り込み処理だけが機能している状態です。
例外処理の効率化
周辺機器に障害が発生した場合、割り込みによってプログラム側に迅速に通知できます。また、プログラム上でも例外処理を本来の処理と分離して記述できます。
正確なタイミングの取得
画像表示、音楽再生、時計など、正確なタイミングでの処理が必要な場合、タイマー割り込みを利用して、
CPUに処理のタイミングを指示できます。
透過的な実装
割り込み処理は、割り込まれる側の処理から明示的に呼び出す必要がないため、割り込まれる側の処理は個々の割り込み処理を意識する必要がなく、透過的な実装が可能です。ただし、同じリソースを使用する場合は排他制御が必要です。
CPUの割り込みは、
ハードウェア割り込み(外部割り込み)とソフトウェア割り込み(内部割り込み)に大別されます。通常、「割り込み」と言う場合は
ハードウェア割り込みを指すことが多く、ソフトウェア割り込みはSWI(SoftWare Interrupt)と区別されることがあります。
割り込みの種類
ハードウェア割り込み:CPU外部からの割り込み要求端子の変化によって発生します。
ノンマスカブル割り込み (NMI):マスク不可能な割り込みです。
マスカブル割り込み (IRQ):マスク可能な割り込みです。
ソフトウェア割り込み:
CPU内部の要因で発生します。
狭義のソフトウェア割り込み (SWI):CPUの割り込み命令によって発生します。
例外、トラップ:命令実行の前提条件を満たさない場合や、デバッグなどの明示的な設定に基づいて発生します。
ハードウェア割り込みは、
CPUの外部から割り込み要求端子がアサート(アクティブ化)された場合に発生します。
例えば、キーボードが押されたなどの
周辺機器からのデータ入力があると、IRQ端子の電圧が変化し、
CPUの実行中の命令が中断され、入力処理ルーチンが実行されます。
CPUの割り込み要求端子には、NMIとIRQの2種類があります。NMIはマスクできず、IRQは許可/禁止を制御できます。IRQはOSで制御される
周辺機器の入力に、NMIはデバッグや
ハードウェアエラーなどの特殊な用途に使われます。
IRQ端子のアサート方法には、エッジトリガ(信号の変化を検出)とレベルトリガ(信号のレベルを検出)があります。
CPUが割り込みを認識するためには、割り込み信号がアサートされている必要があります。割り込みソースが多い場合、サンプリングの完了までに時間がかかるため、割り込み許可状態とする時間を考慮する必要があります。
CPUによっては、割り込み時に自動的に割り込みを禁止するものと、より優先度の高い割り込みのみを受け付けるものがあります。後者の例としてPDP-11があり、spl命令で割り込みレベルを設定できます。
ソフトウェア割り込み
ソフトウェア割り込みは、
CPU内部で発生するもので、
CPU命令によるものや、キャッシュなどのモジュールの状態変化やエラーによるものがあります。
CPU命令(INT、TRAP、RSTなど)によるソフトウェア割り込みは、システムコールを実現するために利用され、ユーザーモードから特権モードへの移行を行います。
例外は、ゼロ除算、算術オーバーフロー、ページフォルトなどによって発生する処理要求です。特にページフォルトは、OSがメモリ空間を管理する上で重要な役割を果たします。
CPUがソフトウェア割り込み命令をサポートしていない場合、
ハードウェア割り込み端子を使ってエミュレートすることもあります。
割り込みコントローラ
CPUの割り込み要求端子は1つまたは複数あります。複数の
周辺機器からの割り込みを処理するために、割り込みコントローラが使われます。
割り込みコントローラは、
CPUのIRQ端子を拡張し、割り込み要因毎に異なるハンドラに処理を移す機能を提供します。
代表的な割り込みコントローラの例
Intel 8259 (PIC):Intel 8086ファミリのコントローラで、8本の割り込み端子を持ち、各割り込みに優先順位を設定できます。
Z80ファミリ:集中的なコントローラはなく、各
周辺機器が割り込みベクトルを出力します。
ARMプロセッサ:IRQとFIQ(高速割り込み)があり、FIQはより高速な処理が可能です。
割込処理
割り込みが発生すると、CPUは現在実行中の処理を中断し、割り込みハンドラ(ISR)を実行します。中断された処理に戻るために、元の処理のアドレスや作業状態(コンテキスト)を保存します。
割り込みハンドラの場所は、割り込みベクタテーブルに格納されており、CPUはこれに基づいて適切な処理を実行します。
割込処理のオーバーヘッド
割り込み処理は効率的なイベントドリブンな処理を可能にしますが、レジスタの退避/復帰や特権レベルの移行など、オーバーヘッドが生じます。割り込みの頻度が高いと、システムの応答性や処理速度に影響を与える可能性があります。
場合によっては、ポーリングの方が全体的なパフォーマンスが向上することもあります。一部のデバイスドライバでは、通常は割り込みで動作し、高負荷時にはポーリングで動作する仕組みも存在します。
RISCプロセッサでは、割り込みによるパフォーマンス低下の影響が大きいため、割り込みのオーバーヘッドには注意が必要です。
「割込み」という日本語
コンピュータのこの意味での「割込み」という語は、インタラプト(Interrupt)の訳ではなく、独立に作られたものです。
出典・脚注
(参考文献や脚注はここに記述)
関連項目
CPU
リアルタイム
トラップ
排他制御