【わりこみ】

割り込み とは?

最終更新:
💡 イベントを知らせ、必要な処理へ切り替える

機器などのイベントをCPUへ知らせ、対応する処理へ制御を移す仕組み。受け付けるタイミングは優先度やマスク状態などで変わり、すべてが緊急処理や即時応答ではありません。

📌 このページのポイント
割り込み:通知を受けて処理を切り替える機器・タイマーなどからの通知1 通常の処理CPUがプログラムを実行2 受け付け・保存必要な実行状態を保存3 ハンドラー割り込みに応じた処理4 実行を続けるOSの判断で処理を再開受け付けは優先度・マスク・CPU/OS次第後処理を予定したり、別のタスクへ移る場合も
通知を受け付けると、必要な状態を保存してハンドラーへ制御を移します。直ちにすべてを処理するとは限らず、再開先もOSなどの判断によって変わります。
ひよこ ひよこ
割り込みって緊急呼び出し?
ペンギン先生 ペンギン先生
機器やタイマーのイベントなどをCPUへ知らせ、対応する処理へ切り替える仕組みだよ。キーボードやネットワークの処理にも関わるけれど、どれも緊急というわけではない。優先度やマスク状態によって、受け付けるタイミングも変わるんだ。
ひよこ ひよこ
処理の途中でどう戻る?
ペンギン先生 ペンギン先生
復帰に必要な状態をCPUやOSが保存して、割り込みハンドラーなどを動かす。処理後は保存した状態を使って実行を続けるのが基本の考え方だよ。ただしOSが別タスクへ切り替えることもあり、必ず直ちに同じ仕事へ戻るとは限らないんだ。
ひよこ ひよこ
ずっと確認するよりよい?
ペンギン先生 ペンギン先生
イベントが来るまで繰り返し確認するポーリングを減らせる利点がある。ただし通知や切り替えにも負担があるよ。頻度や応答時間の要件によって、ポーリングと組み合わせる設計もあるんだ。
ひよこ ひよこ
システムコールも割り込み?
ペンギン先生 ペンギン先生
入り方はCPUやABIで違うよ。Linuxのi386にはint命令を使う方式がある一方、x86-64ではsyscall命令を使う。OS機能を頼むという役割と、どの命令で制御を移すかを分けて考えよう。Linuxのsoftirqも、割り込み命令そのものとは別の後処理の仕組みだよ。
ひよこ ひよこ
大量に来たらどうなる?
ペンギン先生 ペンギン先生
割り込み処理に時間を使いすぎて、本来の処理が進みにくくなることがある。機器側で通知をまとめたり、LinuxのNAPIのように通知とポーリングを組み合わせたりする対策があるよ。特定のCPU使用率表示だけで原因を決めず、機器・ドライバー・負荷を確認しよう。
もっと詳しく知りたい人へ

NAPIは割り込みを完全に使わない?

基本動作では機器の割り込みを契機に処理を予定し、ポーリング中は追加の割り込みを抑える構成があります。割り込みなしでポーリングする方式もありますが、NAPI全体を「割り込みを使わない仕組み」とは扱いません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「割り込み」って出てきたら「イベントを知らせて処理を切り替える仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Interrupt」 = 中断する・割り込む
💬 通常の実行の流れへ別の処理が入ることを表す言葉です。CPUの割り込み、例外、OSのsoftirqなどは文脈ごとに区別します。

参考資料

← 用語集にもどる