割込みは、現在の命令の流れから、発生した事象に対応する処理へCPUの制御を移す仕組みです。入出力の完了通知だけでなく、命令の実行中に起きる例外や、OSへのサービス要求も関係します。
まずは「何が原因で起きたか」を見ましょう。本記事では応用情報の学習で使う内部・外部の分類を整理し、SVC・ページフォールト・機械チェックまで確認します。末尾には復習用のnote教材を案内しています。
内部割込みと外部割込みを比較
| 観点 | 内部割込み | 外部割込み |
|---|---|---|
| 原因 | 実行している命令・プログラムに関係する事象 | 実行中のプログラムとは独立した事象 |
| 代表例 | 整数のゼロ除算、不正命令、SVC、ページフォールト | タイマー、入出力完了、周辺機器からの通知 |
| タイミングの捉え方 | 命令実行に同期して発生 | 命令実行とは非同期に要求される |
「内部・外部」は、CPUの筐体の内外だけで判断する言葉ではありません。CPU内蔵タイマーの通知も、学習上は外部割込みの代表例として扱います。CPUの仕様書では例外・トラップ・割込みなどの分類が異なるため、問題文で指定された分類に従いましょう。
割込み処理の流れ:退避から復帰まで
| 段階 | 行うこと |
|---|---|
| 1.事象の発生 | 周辺機器の通知、命令実行中の例外、SVC命令などが契機になる |
| 2.受付と状態の退避 | 復帰に必要な命令位置や状態を保存し、対応する処理へ制御を移す |
| 3.ハンドラの実行 | 原因に応じた処理を行う。必要ならOSが後続処理やタスクの切替えを行う |
| 4.復帰または終了 | 再開できる場合は状態を復元。回復不能ならプログラム終了などになる |
退避する情報や保存先、受付可能なタイミングはCPU・OSによって異なります。「すべてのレジスタをCPUが自動でスタックに保存する」「要求が来た瞬間に必ず処理する」とは限りません。優先度やマスク状態によって受付を待つ割込みもあります。
割込みハンドラ(ISR)は事象に対応する処理です。割込み番号などを手掛かりに処理の入口を決める仕組みとして、割込みベクタやベクタテーブルがあります。内部例外がすべて周辺機器用の割込みコントローラを経由するわけではありません。
内部割込み:実行中のプログラムが原因
プログラム割込み
整数のゼロ除算、不正な命令、アクセス保護違反など、命令実行中にCPUが検出する例外が代表例です。キーボード入力やタイマー通知を、この分類の例に混ぜないようにしましょう。演算のオーバーフローが例外を起こすかどうかは、命令やCPUの仕様に依存します。
SVC割込み
SVC(スーパーバイザコール)は、プログラムが専用の命令でOSのサービスを意図的に要求する仕組みです。ファイル入出力など、一般のプログラムがOSの管理の下で利用する機能の呼出しに使われます。エラーが原因とは限りません。
システムコールはOS機能を利用するためのインターフェースです。SVCはその実現手段の一つであり、すべてのCPU・OSがSVCという命令を使うわけではありません。
ページフォールト
仮想記憶のページへのアクセスを、そのまま実行できないときに発生する例外です。代表例は必要なページが物理メモリにない場合で、OSがページを用意して命令を再実行できれば処理を続けられます。
ただし、アクセス権違反などで発生する場合もあり、必ずストレージから読み込んで正常に再開するとは限りません。ページ不在を解決する正常な動作と、許可されないアクセスを区別しましょう。
特権命令違反
ユーザーモードでは許可されない特権命令を実行しようとした場合などに発生します。SVCのような正規の入口を使ってOSへ依頼することと、権限のない状態で特権命令を直接実行することは別です。
外部割込み:プログラムと独立した事象が原因
キーボード割込み
入力装置やそのコントローラが、入力などの事象をCPUに通知する例です。実際の接続方式によって通知経路は異なるため、すべてのキーボードがCPUに直接信号を送るわけではありません。学習では入出力装置からの通知として整理します。
タイマー割込み
設定した時間の経過などを通知します。OSの時間管理やスケジューリングに利用されますが、タイマー割込みが起きるたびに必ず別のタスクへ切り替わるとは限りません。
入出力(I/O)割込み
入出力処理の完了や、データ到着などを装置側から知らせます。CPUが装置の状態を繰り返し調べるポーリングと比べ、通知を待つ間にほかの処理を進めやすくなります。ただし割込み自体にも処理負担があり、常にポーリングより有利とは限りません。
機械チェック割込み
ハードウェアの異常を検出したときに通知する仕組みです。回復できる異常もあれば、処理の継続が難しい異常もあります。「ハードウェア由来だから必ず元の処理へ戻れる」とは考えないでください。
機械チェックを外部要因の割込みとしてまとめる学習資料もありますが、実際のアーキテクチャでは独立した区分や例外として扱うことがあります。内部・外部の二分だけで、すべてのCPUの正式な分類を説明しようとしないことが大切です。
確認問題:原因から分類する
次の4つを、内部割込み・外部割込みに分類してください。①整数のゼロ除算をCPUが検出 ②入出力装置から完了通知 ③プログラムがSVC命令を実行 ④タイマーの時間経過通知。
解答・解説を見る
①内部、②外部、③内部、④外部です。①③は実行している命令が契機です。②④はプログラムの命令実行とは独立した事象です。SVCは意図的なOSへの依頼なので、「内部割込み=すべてエラー」ではありません。
noteで内部・外部の見分け方を復習する
本記事で原因と処理の流れをつかんだら、関連noteで基本事項を復習できます。こちらの教材は、内部割込み・外部割込みの違い、ゼロ除算や入出力完了の分類、CPUが行う処理を扱っています。用語を覚えるだけでなく、事象の原因を説明できるかを確認しながら読み進めましょう。
教材の公開範囲・価格はリンク先をご確認ください。関連分野の教材はIT資格攻略chのnote一覧から探せます。
まとめ
内部割込みは実行中の命令、外部割込みはプログラムと独立した事象を手掛かりに判断します。SVCは意図的な要求、ページフォールトは解決して続行できる場合もある例外です。割込み後の動作は原因とOSの処理によって変わり、必ず直ちに元の処理へ戻るとは限りません。
参考:Linux Kernel:Page Tables(英語)。分類の名称や細部はアーキテクチャごとに異なります。確認問題は本記事のオリジナルです。

コメント