割込み

読み:わりこみ / 英語表記:interrupt

進行中の処理を一時中断し、発生した事象に対応する処理へ制御を移す仕組み。復帰に必要な処理状態を退避し、対応が終わったら復元する。

イマシルちゃんの解説

本を読んでいる途中に、玄関の呼び鈴が鳴ったとするよ。
今のページにしおりを挟んでから、玄関へ向かうんだ。

用事が済んだら、しおりの場所に戻って続きを読めるよね。
どこまで読んだか忘れない準備が、切り替える前に必要なんだ。

より深い解説

発生するきっかけ

割込みを使うと、CPUが周辺機器の完了を絶えず確認し続けずに済む。機器から通知が来るまで、別の処理を進められる。

分類例
外部からの通知入出力完了、タイマーの通知
命令実行に伴う例外0による除算、保護違反、ページフォールト
明示的な制御移行OSの機能を呼び出す命令など

例外やシステムコールを広い意味で内的割込みと整理する教材もある。CPUの仕様では、非同期に届く割込みと、命令に同期して起こる例外を区別することがある。

権限の切替え

ユーザモードは、一般のプログラムが動く権限を制限した状態である。特権モードは、OSが入出力制御などの特権命令を実行できる状態である。

アプリケーションが自由に割込み制御や保護設定を変更できると、ほかの処理まで停止させられてしまう。このため、必要な権限への移行は、CPUとOSが管理する入口を通して行う。

処理の基本的な順序

ユーザプログラムの実行中にOSが割込みを受け付ける場合、試験で扱う概念上の流れは次のようになる。

段階処理
1特権モードへ移る
2プログラムカウンタや状態情報を退避する
3割込みの種類に対応する処理の開始番地を決める
4割込み処理ルーチンを実行する
5必要な状態を復元し、適切な処理へ戻る

重要なのは、戻り先を失う前に保存することである。実際にどのレジスタをハードウェアが保存し、どこからOSが保存するかはCPUの仕様によって異なる。上の順序を、すべてのCPU内部で独立した命令として実行するという意味ではない。

行き先と復帰の情報

割込みベクタは、割込みの種類と対応する処理を結び付けるための情報である。番号を使って表を引く方式などにより、処理の行き先を特定する。

割込み処理ルーチンは、機器の状態確認や通知の解除などを行うプログラムである。割込みハンドラとも呼ばれる。長い処理をここで実行し続けると、ほかの処理の応答性を損なうため、必要な部分だけを実施して後続処理へ渡す設計が使われる。

プログラムカウンタは、実行位置を示す情報である。命令レジスタが保持する命令そのものとは役割が異なる。また、例外の種類によっては、元の命令を再実行したり、プログラムを終了させたりするため、必ず次の命令へ進むとは限らない。

実際の試験ではここに出る!

この用語が出てくる記事

↑