コンピューティングにおいて、マスク不可能な割り込み( NMI ) は、システムの標準的な割り込みマスク技術では無視できないハードウェア割り込みです。通常、回復不可能なハードウェアエラーに注意を促すために発生します。一部の NMI はマスクできますが、特定の NMI に固有の独自の方法を使用した場合に限られます。SPARC に関しては、マスク不可能な割り込み (NMI) は、割り込みの中で最も優先順位が高いにもかかわらず、割り込みマスクを使用することで発生を防ぐことができます。[ 1 ]
NMI(非回復割り込み)は、応答時間が極めて重要な場合や、通常のシステム動作中に割り込みを無効にしてはならない場合によく使用されます。こうした用途には、回復不能なハードウェアエラーの報告、システムデバッグとプロファイリング、システムリセットなどの特殊なケースの処理などが含まれます。
現代のコンピュータアーキテクチャでは、通常、NMI(非回復性割り込み)を使用して、即時対応が必要な回復不能なエラーを処理します。したがって、このような割り込みは、システムの通常動作中に隠蔽されるべきではありません。これらのエラーには、回復不能な内部システムチップセットエラー、パリティエラーやECCエラーなどのシステムメモリの破損、システムバスおよび周辺機器バスで検出されたデータ破損などが含まれます。
システムによっては、コンピュータのユーザーがハードウェアおよびソフトウェアのデバッグインターフェースやシステムリセットボタンを通じてNMI(非機械情報)を発生させることができる場合があります。
プログラマーは通常、デバッグNMIを使用して、不具合のあるコードを診断し修正します。このような場合、NMIは割り込みハンドラを実行し、制御を特別なモニタプログラムに渡します。開発者はこのプログラムから、マシンのメモリを検査し、割り込みが発生した時点でのプログラムの内部状態を調べることができます。これにより、ハングアップしたように見えるコンピュータのデバッグや診断も可能になります。
古いアーキテクチャでは、NMI は必要な応答時間のために通常は無効にされない割り込みに使用されていました。これらは隠れた信号でした。例としては、Amstrad PCWのフロッピーディスクコントローラ、 IBM PC またはその互換機で使用されるx86の8087コプロセッサ(Intel は通常の割り込みに接続することを推奨していましたが[ 2 ] )、 HP 95LXの低バッテリー信号などがあります。
オリジナルのIBM PCでは、システムメモリでパリティエラーが検出された場合、または外部デバイスからパリティエラーが報告された場合にNMIがトリガーされました。どちらの場合も、PCはエラーメッセージを表示して停止しました。後期のIBM互換機の中には、オリジナルのIBM PCとのハードウェアの違いを隠蔽するためにNMIを使用したものもありました。そのようなコンピュータでは、プログラムが互換性のないハードウェアにアクセスしようとしたときにNMIが生成されました。その後、 BIOS割り込みハンドラがプログラムの要求を、実際に存在するハードウェアに合わせて変換しました。386SLのSMMは、この処理をより効率的に行うためのものです。
8ビットホームコンピュータの中には、システムがフリーズした場合に「ウォームスタート」を可能にするためにNMIラインを使用するものがあった。通常、これにより、ユーザーが現在ロードしているデータを破壊することなく、制御レジスタがROMに格納されている既知の正常な値に復元された。Commodoreの8ビットマシンでは、RESTOREキーは6502シリーズCPUのNMIラインに直接または間接的に接続されていたが、 RESTOREが押されたときにRUN/STOPも押されていることがROM内のNMIハンドラルーチンによって検出された場合にのみリセットが行われた(この組み合わせは、 Commodore版の3本指敬礼に相当する)。Commodore はまた、C64とC128のMOS Technology 6526 CIA #2をプロセッサのNMIラインに接続した。これは、 6551 ACIAのソフトウェアエミュレーションを実現する手段の一部であった。Atari の8ビットラインでは、同じ目的でSYSTEM RESETボタンが使用された。
デバッグNMIは、Apple Macintoshの「プログラマーボタン」やSunワークステーションの特定のキーの組み合わせなど、さまざまな形で登場しました。Windows 2000の導入により、MicrosoftはNMIを使用してシステムをデバッガにブレークするか、メモリの内容をディスクにダンプして再起動することを許可しました。[ 3 ]
デバッグNMIは、レジャーユーザーやゲーマーが実行中のプログラムを操作できるようにするデバイスでも使用されていました。ロマンティックロボットのマルチフェイスのように、NMIを生成するボタンを追加したデバイスは、1980年代の8ビットおよび16ビットのホームコンピュータで人気のアクセサリーでした。これらの周辺機器には、少量のROMとNMIボタンがありました。ボタンを押すと、周辺機器のROM内のソフトウェアに制御が移り、中断されたプログラムをディスクに保存したり(ディスクをサポートしていないテープベースのゲームには非常に便利でしたが、進行中のゲームを保存するためにも使用されました)、スクリーンショットを保存または印刷したり、メモリ内の値を操作したり(たとえば、追加のライフを獲得するためのチートテクニック)することができました。
すべてのコンピュータがNMIをトリガーするメカニズムを備えているわけではありませんが、多くのマシン(通常はラックマウントサーバー)には、この目的専用の物理ボタンが備わっています。その他のマシンでは、拡張カードを介してこの機能が利用可能になる場合があります。[ 4 ]
マイルズ・ゴードン・テクノロジー社のZXスペクトラム向け製品であるDISCiPLEと+Dには、NMIを生成する「魔法のボタン」が搭載されていた。
Nintendo Entertainment Systemでは、垂直ブランキング期間中にNMI(ネットワーク割り込み)が発生します。これらのNMI(「vblank割り込み」と呼ばれることが多い)は頻繁に規則的に発生するため、ゲームのグラフィックやオーディオを操作するコードは、NMIハンドラルーチン内で実行されることがよくあります。PPUの$2000レジスタの7ビット目をクリアするとvblank割り込みが無効になり、設定すると有効になります。これにより、CPUは必須タスクを完了できますが、遅延が発生します。