マスカブル割込みは、通常の割込み許可・禁止の仕組みで、受付を一時的に制限できる割込みです。入出力装置からの通知などを扱いながら、短い処理の途中で割り込まれないようにする場面で使われます。
「マスクしたら要求は消える?」「NMIも止まる?」という疑問を、要求の発生・保留・受付に分けて整理しましょう。本記事の確認問題の後には、割込みの基礎を復習できるnote教材を案内しています。
マスクが制御するのは割込みの受付
装置が事象を検出することと、CPUが割込み処理を始めることは別です。CPU側の許可状態や、割込みコントローラの設定によって、要求があってもすぐにはハンドラを実行しない状態を作れます。
| 用語 | 意味 |
|---|---|
| 要求の発生 | 装置などが処理してほしい事象を通知する |
| 保留(pending) | 要求が待っている状態。保持方法は仕様による |
| マスク | 対象の割込みの通知・受付を制限する設定 |
| 受付・実行 | CPUが必要な状態を保存し、対応するハンドラへ制御を移す |
マスクは「装置そのものを停止する」「起きた事象をすべて消去する」という意味ではありません。また、割込みコントローラで装置別に設定するマスクと、CPU側の割込み許可状態は区別します。
なぜ一時的に禁止するのか
例えば、通常処理と割込みハンドラが同じ管理情報を更新するとき、更新途中の状態をハンドラが読むと不整合が起きる場合があります。対象となる割込みの受付を短時間制限し、更新が完了してから元の許可状態に戻す方法があります。
禁止する時間が長いと装置への応答が遅れます。必要な範囲を短く保ち、終了時は変更前の許可状態を復元することが基本です。もともと禁止されていた状態で呼び出された処理が、無条件に許可へ切り替えると意図しない割込みを受け付ける可能性があります。
割込み禁止だけで、別のCPUコアやDMAなどからのアクセスまで止められるとは限りません。共有データを守る方法は、CPU・OSとアクセスする主体に合わせて考えます。
禁止中の要求は、必ずすべて残る?
要求が保留され、マスク解除後に処理される仕組みはあります。ただし、すべての装置・CPUで、発生した回数分が必ず保存されるわけではありません。保留ビットが1つだけなら、複数の発生が1つの保留状態にまとまることもあります。
一方、装置側に受信データのFIFOやイベントカウンタがあるなど、別の仕組みで情報を保持する場合もあります。エッジを記録する方式か、要求レベルが継続する方式かによっても扱いは変わります。「保留ビットがあること」と「全イベントの回数やデータが保存されること」を分けましょう。
NMIとの違い:通常のマスクが効くか
| 比較 | マスカブル割込み | ノンマスカブル割込み(NMI) |
|---|---|---|
| 基本的な性質 | 通常の割込み制御で受付を制限できる | 通常のマスカブル割込み用の制御では禁止されない |
| 学習上の代表的な用途 | 入出力通知など | 重大な異常の通知など |
| 注意点 | 許可されていても優先度などの受付条件が関係する | あらゆる状態で即時に処理・回復できる保証ではない |
NMIの具体的な発生源や制御方法はシステムによって異なります。「CPUがどんな状態でも必ず即座に応答する」「電源が落ちても処理を完了できる」とまで解釈しないでください。
用語の確認には、既存のノンマスカブル割込み(NMI)の記事も参照できます。
内部・外部の分類とは別の観点
内部・外部は「何が原因で発生するか」、マスカブル・ノンマスカブルは「通常のマスクで受付を制御できるか」という観点です。学習上、マスカブル割込みは外部装置の通知などが代表例ですが、「内部はすべてNMI、外部はすべてマスカブル」と対応付けないようにしましょう。
許可・禁止の命令はCPUごとに異なる
EI・DIという名称の命令を持つCPUもありますが、すべてのCPUに共通する命令名ではありません。コンパイラの割込み制御用ディレクティブも、対象製品・オプション・関数の扱いに依存します。実装するときは、使用するCPUと開発環境の仕様を確認します。
概念としては「変更前の許可状態を保存 → 必要な割込みを制限 → 短い保護対象の処理 → 元の状態を復元」の順です。実際の手順や利用できる権限は、OS・CPUに従ってください。
確認問題:3回の要求は3回処理される?
ある装置の要求を1ビットの保留フラグだけで記録し、ほかに回数を記録する仕組みはないものとします。受付を禁止している間に同じ要求が3回発生しました。このフラグだけから発生回数3回を復元できるでしょうか?
解答・解説を見る
復元できません。1ビットのフラグで表せるのは、保留されているかどうかです。3回分が個別に記録されるとは限りません。実際の装置ではFIFOやカウンタなど別の情報があるかも確認します。
noteで割込み全体の基礎を復習
マスクの意味を理解したら、内部・外部割込みの違いと、CPUが割込みを受けたときの流れを復習しましょう。関連noteは、ゼロ除算や入出力完了の分類など、割込み全体の基礎を扱う教材です。マスクの細部は本記事で整理し、全体像の復習に使えます。
教材の公開範囲・価格はnoteの表示をご確認ください。ほかの教材はIT資格攻略chのnote一覧から探せます。
まとめ
マスカブル割込みは、通常の割込み制御で受付を一時的に制限できます。マスクと要求の消去は別であり、禁止中の全イベントが必ず記録されるわけでもありません。NMIとの違いは通常のマスクが効くかという観点で整理しましょう。
参考:Linux Kernel:Generic IRQ handling(英語)。割込みの種類・保留の扱い・制御方法は対象の仕様によって異なります。確認問題は本記事のオリジナルです。


コメント