割込みコントローラは、周辺機器などから届く割込み要求を管理し、CPUに通知する制御回路です。複数の要求の優先順位や、通知を許可するかどうかを扱います。通知を受けて割込みハンドラを実行するのはCPUです。
この記事では、要求が届いてから処理を終えるまでの役割分担と、優先順位・マスクの意味を整理します。割込み全体の基礎を復習できるnote教材も末尾で案内します。
周辺機器・コントローラ・CPUの役割
| 担当 | 主な役割 |
|---|---|
| 周辺機器・装置側コントローラ | 入出力完了などの事象を検出して割込みを要求する |
| 割込みコントローラ | 要求を管理し、優先順位や許可状態に従ってCPUへ通知する |
| CPUとOS | 割込みを受け付け、必要な状態を保存して対応するハンドラを実行する |
| 割込みハンドラ | 装置の状態確認や通知原因への対応などを行う |
割込みコントローラは、装置のデータ処理をすべて代行する回路ではありません。また、ゼロ除算などCPUが命令実行中に検出する例外まで、必ず周辺機器用コントローラを経由するわけではありません。
複数の要求が来たときの流れ
典型的には、①要求を受け取る → ②マスクや優先順位を確認する → ③CPUへ通知する → ④CPUが受け付けてハンドラを実行する → ⑤装置側の原因や処理中の状態を適切に解消する、という流れで考えます。具体的な通知・受付・完了の手順は製品と設定によって異なります。
例えば、キーボードとディスクの要求が待っている場面では、受付可能な要求の中から、設定された優先規則に従って通知対象を決めます。「先に届いた順」「常にキーボード優先」とは限りません。固定の優先順位を持つ方式や、順位を変更できる方式があります。
マスクは「通知・受付を制限する」仕組み
マスクは、特定の割込み要求の通知や受付を一時的に制限するための仕組みです。装置別のマスクと、CPU側の割込み許可状態は区別して考えましょう。優先度が低いという理由だけで、必ずその割込みが無効になるわけではありません。
マスクしたからといって、装置の事象が消えたり、保留中の要求が必ず捨てられたりするわけではありません。解除後に通知されるか、どの要求が保持されるかは、コントローラ・装置・エッジ/レベルなどの方式によって異なります。
CPUへの通知と実際の処理開始は別です。CPUの許可状態、優先順位、現在の実行状態などが受付に影響するため、「通知した瞬間に必ず処理する」とは言い切れません。
IRR・IMR・ISR:8259A系を例に整理
従来のPIC(Programmable Interrupt Controller)の代表例にIntel 8259Aがあります。以下のレジスタ名は8259A系の説明として覚え、すべての割込みコントローラに同じ名前・構成があるとは考えないようにしましょう。
| 名前 | 表すもの | 混同しやすい点 |
|---|---|---|
| IRR:Interrupt Request Register | 受付待ちの割込み要求 | IRRは要求信号そのものの名前ではなくレジスタ名 |
| IMR:Interrupt Mask Register | 割込み要求に対するマスク設定 | 要求の有無とは別に管理される |
| ISR:In-Service Register | 処理中として管理されている割込み | 割込みサービスルーチンというプログラムとは別物 |
ISRという略語は文脈に注意してください。In-Service Registerはハードウェアの状態を表すレジスタ、Interrupt Service RoutineはCPUが実行する処理プログラムです。
8259A系ではEOI(End Of Interrupt)によって処理中状態を解除する手順があり、自動EOIなどの動作モードもあります。EOIによるコントローラの状態更新と、装置側の割込み原因を取り除く処理は別です。どちらが必要か、順序はどうするかを装置・コントローラの仕様に従って扱います。
ポーリングとの違いと実装の形
ポーリングはCPU側が装置の状態を繰り返し確認する方法です。割込みを使うと通知を待つ間にほかの処理を進めやすくなりますが、受付やハンドラ実行にも負担があります。通知頻度などによって適した方式は変わるため、割込みなら常に高速になるわけではありません。
コントローラは単独のICとしてだけでなく、CPU・チップセット・SoCの一部にも実装されます。8259Aは仕組みを学ぶための代表例であり、すべてのコンピュータが8259Aを搭載するわけではありません。
確認問題:コントローラとハンドラは同じ?
「割込みコントローラが、入出力完了時の割込みハンドラの命令を実行する」という説明は正しいでしょうか? また、8259A系で処理待ち要求を管理するレジスタはIRR・IMR・ISRのどれでしょうか?
解答・解説を見る
前半は誤りです。ハンドラの命令を実行するのはCPUです。コントローラは要求の管理やCPUへの通知を担います。後半の答えはIRRです。IMRはマスク設定、ISR(In-Service Register)は処理中の割込みを表します。
次はnoteで割込み全体を復習
コントローラの役割が分かったら、内部割込み・外部割込みの違いと、CPUが行う処理を復習しましょう。関連noteでは、ゼロ除算や入出力完了の分類など、割込みの基礎を扱っています。本記事はコントローラの役割分担、noteは割込み全体の基礎整理として使い分けられます。
教材の公開範囲・価格はnoteの表示をご確認ください。ほかの教材はIT資格攻略chのnote一覧から探せます。
まとめ
コントローラは要求を整理して通知し、CPUはハンドラを実行します。優先順位・マスク・要求待ち・処理中を分けて覚えると、IRR・IMR・ISRの役割も理解しやすくなります。具体的な受付・完了手順は、使うコントローラと動作モードで確認しましょう。
参考:Intel 8259Aデータシート(MIT掲載・英語PDF)、Linux Kernel:Generic IRQ handling(英語)。確認問題は本記事のオリジナルです。


コメント