Введение
В вычислительной технике, не маскируемый прерыватель (NMI) – это аппаратный прерыватель, который стандартные методы маскировки прерываний в системе не могут игнорировать. Он обычно возникает для сигнализации о неисправимых аппаратных ошибках. Некоторые NMI могут быть замаскированы, но только с использованием проприетарных методов, специфичных для данного NMI. В отношении SPARC, не маскируемый прерыватель (NMI), несмотря на то, что имеет наивысший приоритет среди прерываний, может быть предотвращен с помощью маски прерываний. NMI часто используется, когда критично время отклика или когда прерывание не должно быть отключено во время нормальной работы системы. К таким областям применения относятся сообщение о неисправимых аппаратных ошибках, отладка и профилирование системы, а также обработка специальных случаев, таких как сброс системы. Современные компьютерные архитектуры обычно используют NMI для обработки неисправимых ошибок, требующих немедленного внимания. Поэтому такие прерывания не следует маскировать при нормальной работе системы. Эти ошибки включают неисправимые ошибки внутренних системных чипсетов, повреждение системной памяти, например, ошибки четности и ECC, а также повреждение данных, обнаруженное на системных и периферийных шинах. На некоторых системах пользователь компьютера может инициировать NMI через аппаратные и программные интерфейсы отладки и кнопки сброса системы. Программисты обычно используют отладочные NMI для диагностики и исправления некорректного кода. В таких случаях NMI может выполнить обработчик прерывания, который передает управление специальной программе-монитору. Из этой программы разработчик может проверить память машины и изучить внутреннее состояние программы в момент прерывания. Это также позволяет отлаживать или диагностировать компьютеры, которые кажутся зависшими.
In computing, a non maskable interrupt (NMI) is a hardware interrupt that standard interrupt masking techniques in the system cannot ignore. It typically occurs to signal attention for non recoverable hardware errors. Some NMIs may be masked, but only by using proprietary methods specific to the particular NMI. With regard to SPARC, the non maskable interrupt (NMI), despite having the highest priority among interrupts, can be prevented from occurring through the use of an interrupt mask. An NMI is often used when response time is critical or when an interrupt should never be disabled during normal system operation. Such uses include reporting non recoverable hardware errors, system debugging and profiling, and handling of special cases like system resets. Modern computer architectures typically use NMIs to handle non recoverable errors which need immediate attention. Therefore, such interrupts should not be masked in the normal operation of the system. These errors include non recoverable internal system chipset errors, corruption in system memory such as parity and ECC errors, and data corruption detected on system and peripheral buses. On some systems, a computer user can trigger an NMI through hardware and software debugging interfaces and system reset buttons. Programmers typically use debugging NMIs to diagnose and fix faulty code. In such cases, an NMI can execute an interrupt handler that transfers control to a special monitor program. From this program, a developer can inspect the machine's memory and examine the internal state of the program at the instant of its interruption. This also allows the debugging or diagnosing of computers which appear hung.
История
В более старых архитектурах NMIs использовались для прерываний, которые обычно никогда не отключались из-за требуемого времени отклика. Это были скрытые сигналы. Примерами служат контроллер дисковода на Amstrad PCW, сопроцессор 8087 на x86 при использовании в IBM PC или его совместимых (хотя Intel рекомендовал подключать его к обычному прерыванию), и индикатор низкого заряда батареи на HP 95LX. В оригинальном IBM PC, NMI вызывался при обнаружении ошибки четности в системной памяти или при сообщении об этом внешним устройством. В любом случае, компьютер отображал сообщение об ошибке и останавливался. Некоторые более поздние клоны ПК использовали NMI для маскировки аппаратных различий от стандартного ПК. На таких компьютерах NMI генерировался при попытке программы получить доступ к несовместимому оборудованию. Обработчик прерываний BIOS затем преобразовывал запрос программы, чтобы он соответствовал фактически установленному оборудованию. SMM в 386SL – более подходящий способ для этого. Некоторые 8-битные домашние компьютеры использовали линию NMI для выполнения "тёплого перезапуска", если система зависла. Обычно это восстанавливало регистры управления до известных надёжных значений, хранящихся в ПЗУ, не уничтожая данные, которые пользователь мог загрузить. На 8-битных компьютерах Commodore клавиша подключалась напрямую или косвенно к линии NMI процессора серии 6502, но сброс происходил только в том случае, если подпрограмма обработки NMI в ПЗУ обнаруживала, что она также удерживается при нажатии (эта комбинация была версией "салюта тремя пальцами" от Commodore). Commodore также подключил MOS Technology 6526 CIA #2 в C64 и C128 к линии NMI процессора, что являлось частью механизма программной эмуляции 6551 ACIA. В 8-битных линейках Atari для той же цели использовалась кнопка. Отладочные NMI появлялись в различных формах, включая "кнопку программиста" Apple Macintosh и определённые комбинации клавиш на рабочих станциях Sun. С появлением Windows 2000 Microsoft разрешила использовать NMI для принудительного перехода системы в отладчик или для сброса содержимого памяти на диск и перезагрузки. Отладочные NMI также использовались устройствами, позволяющими обычным пользователям и геймерам манипулировать работающими программами. Устройства, добавляющие кнопку для генерации NMI, такие как Multiface от Romantic Robot, были популярным аксессуаром для 8-битных и 16-битных домашних компьютеров 1980-х годов. Эти периферийные устройства имели небольшой объем ПЗУ и кнопку NMI. Нажатие кнопки передавало управление программному обеспечению в ПЗУ периферийного устройства, позволяя сохранить приостановленную программу на диск (особенно полезно для игр на кассетах без поддержки дисков, но также для сохранения игр в процессе), сохранить или распечатать скриншоты или изменить значения в памяти – например, для читерства и получения дополнительных жизней. Не все компьютеры предоставляют механизм для вызова NMI; однако многие машины (обычно серверы в стойке) имеют физическую кнопку, предназначенную специально для этой цели. Другие машины могут предоставлять эту функциональность через плату расширения. Продукты DISCiPLE и +D от Miles Gordon Technology для ZX Spectrum имели NMI-генерирующую "волшебную кнопку". На Nintendo Entertainment System NMI генерируется во время каждого интервала вертикального прохода. Поскольку эти NMI (часто называемые "vblank-прерываниями") происходят часто и регулярно, код, манипулирующий игровой графикой и звуком, часто выполняется внутри подпрограммы обработки NMI. Очистка 7-го бита регистра PPU отключает vblank-прерывания, а установка его – включает.