割込みシステムとは(全体像)
割込みは、何かのイベントが起きたとき、実行中のプログラムをいったん止めてそちらを処理し、終わったら元に戻るしくみのこと。
身近にたとえると、仕事中に電話が鳴るのが割込みだ。今の作業を中断して電話に出て、終わったらまた作業に戻る。コンピュータも、キーボード入力やタイマなどが起きるたびに、この「中断して処理して戻る」をくり返している。
押さえたいのは、割込みはエラーではなく、ふつうのしくみだということ。キーボード入力やネットワーク受信なども、すべて割込みで処理されている。
詳しく:2つの分け方とNMIだけ覚えれば戦える
ここが記事の心臓部。割込みは2つの軸で分けられる。
割込みの2つの分け方
| 分け方 | 種類 | 意味 |
|---|---|---|
| 発生源 | 外部割込み | I/O・タイマなど。プログラムと無関係なタイミング(非同期) |
| 内部割込み(例外) | 0除算など。実行中の命令で発生(同期) | |
| マスク可否 | マスク可能(IRQ) | CPUの設定で一時的に止められる |
| マスク不可(NMI) | 必ず処理される(電源異常など非常時用) |
ここで取り違えやすいのがNMI(マスク不可割込み)。ふつうの割込み(IRQ)はCPUの設定で一時的に止められるが、NMIは止められず、必ず処理される。電源異常など、見逃せない非常事態のためのものだ。
処理の流れも押さえよう。
割込み処理の流れ
| 順 | やること |
|---|---|
| ① | 割込み信号がCPUに届く |
| ② | 割込みベクタテーブル(処理担当の住所表)を見る |
| ③ | 担当の処理(ISR)を実行する |
| ④ | 終わったら元のプログラムに戻る |
割込みには優先度があり、より高い優先度の割込みは、低い優先度の処理を中断して割り込む(プリエンプト)。つまり、緊急度の高いものが先に処理される、というわけだね。
わかりやすく言い換えると
要するに、割込みは「中断して、対応して、戻る」しくみだ。
①外部割込み … 電話が鳴る(いつ来るか分からない・非同期)。I/Oやタイマ
②内部割込み(例外) … 計算間違いにその場で気づく(同期)。0除算など
③NMI … 火災報知器(どんなときも反応する・止められない最優先)
「割込みはエラーではなく通常のしくみ」「NMIは止められない」だけは取り違えやすい。
試験のツボ
🔴 一番出る:外部(非同期)と内部(同期)
①外部割込みはI/Oやタイマ(非同期)
②内部割込み(例外)は0除算など(同期)
🔴 次に出る:NMIはマスク不可
①ふつうの割込み(IRQ)は一時的に止められる
②NMIは止められず必ず処理される(非常時用)
🟡 押さえると安定:流れと割込みはエラーではない
①信号→ベクタテーブル→ISR→元に戻る
②割込みは通常のしくみ。キーボード入力なども割込み
よくある間違い
①「すべての割込みは止められる(マスクできる)」→ ✗ NMIは止められず、必ず処理される。止められるのはIRQ。
②「割込みはエラーが起きたときだけのしくみ」→ ✗ 割込みは通常のしくみ。キーボード入力やタイマなども割込み。
③「外部割込みはプログラムの特定の命令で同期して起きる」→ ✗ 外部割込みは非同期(いつ来るか分からない)。同期なのは内部割込み(例外)。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(外部と内部)
割込みの種類に関する次の記述のうち、正しいものはどれか。
- 外部割込みは命令の実行中に同期して起き、内部割込みはいつ来るか分からず非同期だ
- 外部割込みはI/Oやタイマで非同期、内部割込み(例外)は0除算など同期で起きる
- 外部割込みも内部割込みもまったく同じもので、発生のしかたに違いはないものとされる
- 内部割込みはキーボードなどの外部装置からのみ起き、計算とは無関係であるとされる
解答は 2 である。
外部割込みはI/Oやタイマで非同期に起き、内部割込み(例外)は0除算など同期で起きるのだ。電話と計算間違いの違いなるぞ。
選択肢1は外部と内部が逆。選択肢3の「同じ」、選択肢4の「内部は外部装置から」も誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 外部と内部が逆 |
| 2 | ✓ | 外部=非同期・内部=同期 |
| 3 | ✗ | 発生のしかたが違う |
| 4 | ✗ | 内部は命令の実行で起きる |
オリジナル問題2(NMI)
NMI(マスク不可割込み)に関する次の記述のうち、正しいものはどれか。
- NMIはふつうの割込みと同じで、CPUの設定で自由に止められるものとされている
- NMIはエラー専用で、キーボード入力などの通常処理にはいっさい関わらないものだ
- NMIは止められず必ず処理される割込みで、電源異常など非常時のために使われる
- NMIは優先度が最も低く、ほかの割込みがあると後回しにされるものとされている
解答は 3 である。
NMIは止められず必ず処理される割込みで、電源異常など非常時のために使われるのだ。火災報知器のごとく止められぬなるぞ。
選択肢1の「止められる」、選択肢2の「エラー専用」、選択肢4の「優先度が最も低い」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | NMIは止められない |
| 2 | ✗ | 非常時用で最優先 |
| 3 | ✓ | 止められず必ず処理される |
| 4 | ✗ | 最優先で扱われる |
オリジナル問題3(割込みの位置づけと流れ)
割込みの位置づけと流れに関する次の記述のうち、正しいものはどれか。
- 割込みは通常のしくみで、信号→ベクタテーブル→処理(ISR)→元に戻る流れで動く
- 割込みはエラーが起きたときだけの特別なしくみで、通常のI/Oには使われないものだ
- 割込みが起きると元のプログラムには二度と戻らず、そのまま終了するものとされている
- 割込みには優先度がなく、どの割込みも順番に同じ扱いで処理されるものとされている
解答は 1 である。
割込みは通常のしくみで、信号→ベクタテーブル→処理(ISR)→元に戻る流れで動くのだ。キーボード入力なども割込み経由なるぞ。
選択肢2の「エラーだけ」、選択肢3の「戻らない」、選択肢4の「優先度がない」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 通常のしくみ・処理後に戻る |
| 2 | ✗ | 通常のI/Oも割込み |
| 3 | ✗ | 処理後に元へ戻る |
| 4 | ✗ | 優先度がある |
まとめ
押さえどころ
- 🔴 外部と内部 = 外部割込みはI/Oやタイマ(非同期)、内部割込み(例外)は0除算など(同期)。
- 🔴 NMI = 止められず必ず処理される割込み。電源異常など非常時用。ふつうのIRQは止められる。
- 🟡 流れと位置づけ = 信号→ベクタテーブル→ISR→元に戻る。割込みはエラーではなく通常のしくみ。
次に学ぶ
- CPUアーキテクチャ ── 割込みを受けて処理するCPUの基本構成がつかめる。
- バスアーキテクチャ ── 外部割込みのもとになる周辺機器とCPUをつなぐ通り道。
執筆: SikakuQuest編集部