NMI (немаскируемое прерывание)
Подробнее
- Автор
- Gregory Nutt
- Год
- 2007
- Владелец
- Apache Software Foundation
- Тип
- Операционная система реального времени
- Лицензия
- Apache 2.0
- Официальный сайт
- nuttx.apache.org
Прерывание, которое процессор не может отключить: оно проходит, даже когда все остальные прерывания запрещены.
Обычные прерывания можно маскировать: код отключает их на время критической секции и обрабатывает после. У NMI такого выключателя нет. Поэтому это канал для событий, важнее которых ничего нет, чем бы ни занималась программа: ошибка чётности памяти, срабатывание сторожевого таймера, отказывающий блок питания.
Идея старая. У 6502 был отдельный вывод NMI, с помощью которого NES будила игру в каждый кадровый гасящий импульс. В x86 ранние ПК сообщали через него об ошибках памяти, а Linux до сих пор использует его для «NMI watchdog», ловящего зависшее ядро. В Cortex-M NMI — исключение номер 2 с фиксированным приоритетом −2; выше только сброс.
Подвох в том, что обработчик NMI может вклиниться куда угодно, в том числе в код, считавший себя защищённым. Поэтому он должен быть коротким и никогда не брать блокировок.