割込み処理ルーチンは、割込みの原因に応じて実行するプログラムです。ISR(Interrupt Service Routine)や割込みハンドラとも呼ばれます。通知を受ける仕組みと、実際に処理するコードを分けて考えましょう。
1.処理を切り替えるときに必要な状態を保存する

割込み要求を受け付けると、実行に必要な状態を保存し、対応する処理へ移ります。どの状態をハードウェアが保存し、どのレジスタをハンドラが保存するかはアーキテクチャやOSに依存します。
2.ハンドラは原因に応じた仕事を行う
装置の状態確認、必要なデータの処理、割込み原因への対応などを行います。タイマー・入力・I/O完了など、すべてが「最優先の緊急事態」というわけではありません。優先度やマスクの設定によって受付けも変わります。
3.例外とソフトウェア割込みを混同しない
装置からの通知などは非同期に発生する外部割込み、実行した命令に起因するゼロ除算・不正命令などは同期的な例外として扱います。明示した命令によるOS呼出し等と、命令の実行で検出された異常も区別してください。呼称や分類はCPU・教材によって異なります。
復帰できる場合は保存した状態に基づいて実行を再開します。ただし異常の種類によっては、同じプログラムへ戻らず終了させる場合もあります。
理解を確かめる確認問題
割込み処理ルーチンは、割込みが起きたときに実行するコードと、データ保存専用の記憶装置のどちらでしょうか。
解答・解説を見る
割込みの原因に応じて実行するコードです。状態保存そのものとは役割を分けて考えます。
まとめ:通知・状態保存・原因への処理を分ける
処理の切替えと、ハンドラの担当する仕事を順番に追いましょう。

コメント