Открыть сервис

Немаскируемое прерывание

Немаскируемое прерывание (англ. Non-Maskable Interrupt, NMI) — это тип аппаратного прерывания в компьютерных системах, которое не может быть заблокировано (замаскировано) программным обеспечением путём установки соответствующих флагов в регистре маскирования прерываний процессора. NMI предназначено для обработки критических событий, требующих немедленного внимания системы, независимо от текущего контекста выполнения. В отличие от обычных (маскируемых) прерываний, NMI имеет наивысший приоритет и обрабатывается процессором даже в тех случаях, когда другие прерывания временно отключены.

История

Концепция немаскируемых прерываний возникла на ранних этапах развития вычислительной техники, когда потребовался механизм для обработки неисправимых аппаратных ошибок и аварийных ситуаций. В первых микропроцессорах, таких как Intel 8080 (1974 год) и Zilog Z80 (1976 год), уже существовал отдельный вход для NMI. В архитектуре x86, начиная с процессора Intel 8086 (1978 год), NMI было реализовано как отдельный сигнал на шине управления, который генерирует прерывание с фиксированным номером (вектором) 2. В более поздних архитектурах, например ARM, также предусмотрены специальные линии для NMI, хотя реализация может отличаться.

Отличия от маскируемых прерываний

Основное отличие NMI от маскируемых прерываний (англ. Maskable Interrupt, MI) заключается в возможности программного управления их обработкой. Маскируемые прерывания могут быть временно отключены (замаскированы) путём установки флага IF (Interrupt Flag) в регистре флагов процессора в ноль. NMI, напротив, не подчиняется этому флагу и обрабатывается всегда, когда активен соответствующий сигнал на аппаратном входе. Это делает NMI пригодным для критических ситуаций, где задержка обработки может привести к потере данных или повреждению оборудования.

Причины возникновения NMI

NMI может генерироваться по различным причинам, которые зависят от архитектуры системы и её конфигурации. Наиболее распространённые источники:

  • Аппаратные ошибки памяти: ошибки чётности (parity errors) или неисправимые ошибки ECC (Error-Correcting Code) в оперативной памяти.
  • Сбои шины данных: ошибки при передаче данных по системной шине.
  • Таймеры наблюдения (Watchdog timers) : срабатывание аппаратного таймера, который сигнализирует о зависании системы.
  • Кнопка сброса или аварийного выключения: нажатие физической кнопки на корпусе компьютера или сервера.
  • Ошибки питания: обнаружение критического падения напряжения или перегрева компонентов.
  • Сигналы от контроллеров ввода-вывода: например, от контроллера прерываний (PIC или APIC) при возникновении неисправности.

Обработка NMI в процессорах x86

В архитектуре x86 NMI обрабатывается следующим образом:

  1. При получении сигнала NMI процессор завершает выполнение текущей инструкции.
  2. Сохраняет в стеке регистр флагов (EFLAGS), регистр CS (сегмент кода) и указатель инструкции (EIP/IP).
  3. Сбрасывает флаг IF (запрещая маскируемые прерывания) и очищает флаг TF (трассировка).
  4. Загружает адрес обработчика NMI из вектора прерывания 2 (таблица векторов прерываний IDT).
  5. Передаёт управление обработчику NMI.

Обработчик NMI должен быть максимально коротким и надёжным, так как во время его выполнения маскируемые прерывания отключены, а повторное NMI (если оно произойдёт до завершения обработки) может привести к неопределённому поведению. В современных системах, особенно в многопроцессорных конфигурациях, обработка NMI может быть сложнее из-за необходимости синхронизации между ядрами.

Применение NMI

NMI находит применение в следующих областях:

  • Отладка и диагностика: в отладчиках ядра операционных систем (например, WinDbg или kdb) NMI используется для принудительного входа в отладчик при зависании системы. В Linux это реализовано через механизм NMI watchdog.
  • Сброс системы (Reset): некоторые реализации кнопки сброса генерируют NMI, чтобы система могла корректно завершить критически важные операции перед перезагрузкой.
  • Обработка ошибок памяти: в серверных системах с ECC-памятью NMI сигнализирует о неисправимых ошибках, что позволяет операционной системе сохранить данные и перезапуститься.
  • Таймеры наблюдения: в промышленных и встраиваемых системах NMI от watchdog-таймера используется для аварийного сброса при зависании.
  • Виртуализация: в гипервизорах (например, VMware ESXi, KVM) NMI может быть перехвачено для обработки ошибок гостевых систем.

Критика и ограничения

Несмотря на свою полезность, NMI имеет ряд недостатков. Во-первых, его обработка требует особой осторожности, так как вложенные NMI (когда новое NMI возникает до завершения обработки предыдущего) могут привести к неопределённому состоянию. Во-вторых, в многопроцессорных системах NMI может быть направлено на одно ядро, что создаёт проблемы с синхронизацией. В-третьих, злоумышленники могут использовать NMI для атак типа «отказ в обслуживании» (DoS) путём генерации ложных сигналов, если имеют физический доступ к оборудованию. В современных операционных системах, таких как Windows и Linux, существуют механизмы для ограничения воздействия NMI на пользовательские процессы, но полное устранение рисков невозможно.

Интересные факты

  • В процессорах Intel 80486 и Pentium NMI могло быть вызвано ошибкой в работе кэш-памяти.
  • В некоторых архитектурах, например в ARM Cortex-M, NMI имеет наивысший приоритет среди всех прерываний, включая системные исключения.
  • В операционной системе Linux существует специальный драйвер nmi_watchdog, который использует NMI для обнаружения зависаний ядра.
  • В ранних версиях BIOS (Basic Input/Output System) NMI могло быть вызвано ошибкой чётности на шине ISA, что приводило к синему экрану смерти (BSOD) в Windows.

Источники

  • Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A: System Programming Guide, Part 1.
  • Tanenbaum, A. S. (2016). Modern Operating Systems (4th ed.). Pearson.
  • Love, R. (2010). Linux Kernel Development (3rd ed.). Addison-Wesley.
  • ARM Architecture Reference Manual, ARMv7-A and ARMv8-A editions.
  • Microsoft Docs: «Non-Maskable Interrupts (NMI)» (Windows Hardware Developer Center).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →