CPUの割り込み(インタラプト)とは:定義・仕組み・種類と例
CPUの割り込みを定義から仕組み・種類・実例まで図解でわかりやすく解説。初心者から開発者まで役立つ実践的な入門ガイド。
割り込みとは、プログラムが想定している以外のことが起こったために、マイクロプロセッサが指示されていないことを行うことです。割り込みは、プロセッサがハードウェアから信号を受け取ることで発生することがほとんどですが、プログラムと共に動作しているソフトウェアから発生することもあります。キーボードのキーを押したとき、内蔵タイマーが作動したとき、データ転送が行われたとき、その他プロセッサがすぐにアクションを起こす必要のあるイベントなどが、割り込みを引き起こす原因となることがあります。割り込みは、プロセッサがプログラムを実行している間、プログラムのソースコードのどこにあっても、いつでも発生する可能性があります。
割り込みの基本的な仕組み
- 外部機器や内部回路が発する信号をプロセッサが受け取ることで割り込みが発生します。
- 割り込みが発生すると、プロセッサは現在の実行状態(レジスタやプログラムカウンタなど)を保存し、あらかじめ定められた割り込みハンドラ(ISR: Interrupt Service Routine)へ制御を移します。
- ハンドラは割り込みの原因を処理し、処理が終わると保存しておいた状態を復帰して中断前のプログラム実行を再開します。
- 割り込み制御はプロセッサ内蔵の割り込みコントローラや外部のPIC/APICなどで管理され、優先度やマスク(無効化)を設定できます。
ハードウェア割り込みとソフトウェア割り込み(例)
- ハードウェア割り込み:キーボード入力、タイマー割り込み、ネットワークカードやディスクコントローラからのI/O完了、DMA転送完了など。物理的なイベントに反応します。
- ソフトウェア割り込み:プログラムが意図的に発行する割り込み(例:システムコールを実装するためのソフトウェア割り込み命令)。デバッグ用や例外発生時にも用いられます。
- 例外(トラップ):ゼロ除算やページフォルト、命令不正など、命令実行の結果として発生する内部的な割り込み。通常はプロセッサによって例外として扱われます。
- NMI(Non-Maskable Interrupt):マスクできない高優先度の割り込み。ハードウェア障害や重要な監視イベントに使われます。
割り込み処理の典型的な流れ
- 割り込み要因が発生 → プロセッサに割り込み信号が送られる
- 割り込み受理(優先度判定・マスク判定) → 受理されれば現在の実行状態を保存
- 割り込みベクタに基づき対応するISRへジャンプ
- ISRが割り込み原因を処理(必要に応じてフラグを設定、デバイスに応答)
- 割り込みフラグのクリアやデバイスへの応答完了を確認
- 保存しておいた状態を復帰して通常処理に戻る(復帰命令でIRETなど)
優先度・ネスト・マスク
- 複数の割り込みが同時に発生した場合は優先度に従って処理されます。優先度はハードウェアまたはOSで管理されます。
- 割り込みのネスト(ISR中にさらに割り込みを許す)を使うと高優先度の割り込みを即座に処理できますが、スタック使用量やレイテンシ管理に注意が必要です。
- マスク可能割り込みは一時的に無効化でき、非マスク割り込み(NMI)は無効化できません。OSやドライバは重要なクリティカルセクションで割り込みを禁止することがあります。
設計上の注意点(実装とパフォーマンス)
- ISRは可能な限り短くするのが原則。時間のかかる処理はデファードワーク(ソフトIRQ、タスクレット、ワーカースレッド等)に渡すべきです。
- ISRとメインコードで共有するデータは競合状態になりやすいため、原子的操作やロック、volatile指定、メモリバリアなどで整合性を保つ必要があります。
- 割り込みのレイテンシ(割り込み発生からISR開始までの遅延)や処理時間はリアルタイム性に影響します。リアルタイムOSや専用ハードウェアではこれらを厳密に管理します。
- 無限ループや長時間ブロッキングをISR内で行うと、他の割り込みや通常処理が阻害されるため避けるべきです。
よくある例
- キーボード:キー押下で割り込みが発生 → キースキャン・バッファ格納 → 後段で文字処理
- タイマー:定期的にタイマ割り込み → タスクスケジューリングや統計計測を実行
- ディスクI/O:読み書き完了で割り込み → 完了通知・バッファの後処理
- ネットワーク:受信パケット到着で割り込み → パケット受信処理と上位プロトコルへの受け渡し
まとめると、割り込みはプロセッサが外部・内部のイベントに即応するための基本的なメカニズムです。適切な優先度管理、短いISR設計、共有リソースの保護を行うことで、効率的かつ安全に割り込みを利用できます。

この図は、割り込みが呼び出されたときの様子を示しています。
割り込みの仕組み
ハードウェアまたはソフトウェアによる割り込み要求(IRQ)は、プロセッサ内の「割り込みハンドラ」または「割り込みサービスルーチン」(ISR)によって処理されます。ISRは、その時点で行っていることをスタックに格納し、特定の命令に従って、システムに代わって所定のタスクを実行します(実行するプログラムの一部である必要はありません)。ISRは、その命令に従い終わると、スタックに置いたものを取り返し、割り込みが入る前にやっていたことを続行します。
今日のプロセッサの多くの割り込みコントローラは、割り込みがどこから来たかなどに基づいて割り込みを分類するために、割り込みベクタを使用しています。ベクタには通常、割り込みが発生したときに実行しなければならないコードが含まれています。ISRは一般に、割り込みの処理、つまり「サービシング」を担当し、それ自体を動作状態に維持することもあります。
割り込みの用途
- 一定時間ごとにタスクを起動する
- いつ起こるかわからない外部機器への対応
- 同期ポーリングの必要性を排除
- オペレーティング・システム(OS)にアクションを起こさせること
質問と回答
Q:割り込みとは何ですか?
A:割り込みとは、外部からの事象により、実行中のプログラムに含まれないマイクロプロセッサが行う動作のことです。
Q: プロセッサで割り込みが最も多く発生する原因は何ですか?
A: ハードウェアからの信号を受信することにより、プロセッサ上で最も頻繁に割り込みが発生します。
Q:割り込みはソフトウェアで発生することもあるのですか?
A:はい、実行中のプログラムと並行して動作しているソフトウェアによっても割り込みが発生することがあります。
Q: 割り込みが発生する可能性のある事象の例をいくつか挙げてください。
A:キーボードのキーを押す、タイマーが切れる、データ転送が行われるなどがあります。
Q: 割り込みは、プログラムが実行されている場所に依存するのでしょうか?
A:いいえ、プログラムの実行中であれば、ソースコードのどの位置にいても割り込みは発生します。
Q: 割り込みはマイクロプロセッサーにとって望ましい事象ですか?
A: 割り込みは、プログラムの実行を中断させ、直ちに注意を払う必要があるため、通常、マイクロプロセッサにとっては望ましくない事象です。
Q: マイクロプロセッサはどのように割り込みに対応するのですか?
A: マイクロプロセッサは実行中のプログラムを一時的に中断し、実行中のプログラムに戻る前に割り込みサービスルーチン(ISR)を実行し、割り込みを処理します。
百科事典を検索する