NMI(エヌエムアイ)とは | 意味や読み方など丁寧でわかりやすい用語解説
NMI(エヌエムアイ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ノンマスケラブル・インターラプト (ノンマスケラブル・インターラプト)
英語表記
NMI (エヌエムアイ)
用語解説
NMIは「Non-Maskable Interrupt」の略であり、日本語では「ノンマスク可能割り込み」と訳される。これは、CPUがいかなる状況にあっても、その発生を無視したり、一時的に無効化したりすることができない、非常に高い優先度を持つ割り込みの一種を指す。通常の割り込み、すなわちマスク可能割り込み(Maskable Interrupt)は、CPUが現在実行中のクリティカルな処理を保護するためや、より優先度の高い別の処理を優先するために、一時的にその発生を抑止できるが、NMIはそのような制御を受け付けない。システムが正常な動作を維持できなくなった場合に、最終的な手段としてシステムを保護し、あるいはその状態を記録するために用いられる重要な仕組みである。
コンピュータのCPUは、内部または外部で発生する様々なイベントに対応するために「割り込み」という機構を利用する。例えば、キーボードからの入力、ディスクへのデータ書き込み完了、ネットワークからのパケット受信など、多様なイベントが割り込みとしてCPUに通知され、CPUは一時的に現在の処理を中断して、そのイベントに対応する特定の処理(割り込みハンドラ)を実行する。これらの通常の割り込みは「マスク可能割り込み」に分類され、CPUは割り込みコントローラを通じて、特定の割り込みを一時的に「マスク」、つまり無効化することができる。これは、オペレーティングシステムがカーネル内の重要な処理を実行している最中に、外部からの割り込みによってその処理が中断され、データの一貫性が損なわれるといった問題を避けるために不可欠な機能である。
しかし、NMIはこのマスクという概念が適用されない。これは、NMIが通常の割り込みとは全く異なる、システムの致命的な状況を示す信号であるためだ。NMIは、メモリのパリティエラー(RAMのデータ破損)、バスエラー(CPUとメモリや周辺機器間のデータ転送の物理的なエラー)、ウォッチドッグタイマーのタイムアウト(システムが応答不能に陥り、一定時間内に応答しなかった場合)、あるいは特定のハードウェア障害(電源異常、過熱、冷却ファンの停止など、ハードウェアセンサーが検出する深刻な問題)といった、システムの安定性や完全性を脅かす重大なエラーが発生した場合に、ハードウェアによってCPUに強制的に通知される。
NMIが発生すると、CPUは直ちに現在の処理を中断し、NMI専用に用意された特別な割り込みハンドラ(NMIハンドラ)を実行する。このNMIハンドラは、通常の割り込みハンドラとは異なり、システムが非常に不安定な状態にあることを前提として設計されており、可能な限り迅速かつ安全にエラーの原因を特定し、対処することを目的としている。具体的な対処としては、エラー情報をシステムログに記録する、メモリの内容をディスクにダンプ(カーネルダンプやブルースクリーン情報)して後から解析できるようにする、あるいはシステムを安全に停止(パニック、ブルースクリーン)または再起動させる、といった処理が行われる。NMIハンドラは、システムがフリーズしたり、ハングアップしたりしているように見える状況でも強制的に実行されるため、デバッグ情報の取得や、システムを回復不能な状態から保護するための最後の砦として機能する。
NMIがシステムエンジニアにとって重要である理由は、主にシステム障害の診断と解析においてその存在を理解する必要があるためだ。一般的なアプリケーション開発者がNMIを直接プログラミングすることはほとんどないが、システム運用中に発生する原因不明のシステムクラッシュや再起動、特にカーネルダンプが生成されたり、ブルースクリーンが表示されたりするようなケースでは、その背後にNMIによって通知された致命的なハードウェアエラーが存在する可能性がある。NMIの発生源を特定することは、ハードウェアの故障、メモリの不具合、あるいはシステムバスの不安定性など、根本的な問題に対処するための重要な手がかりとなる。
NMIは、システムの信頼性と安定性を維持するための、ハードウェアとオペレーティングシステムが協調して動作する非常に低レベルな機構である。その性質上、NMIはむやみに発生させるべきものではなく、本当にシステムの存続に関わるような深刻な事態に限定して用いられる。NMIの存在は、コンピュータシステムが様々な障害から自身を守り、たとえ致命的なエラーに遭遇しても、可能な限り多くの情報を残して安全に停止しようとする工夫の一つと言える。したがって、システムエンジニアを目指す者は、NMIがどのような状況で発生し、システムにどのような影響を与えるのかを理解しておくことが、トラブルシューティングや信頼性の高いシステム設計において非常に役立つ知識となるだろう。