Что такое nmi в компьютере

Обновлено: 18.05.2024

Прерывание — сигнал к процессору , испускаемый аппаратными средствами или программным обеспечением, и указывающий на событие, которое требует немедленного внимания. Прерывание предупреждает процессор о высокоприоритетном состоянии, требующем прерывания текущего кода, выполняемого процессором. Процессор отвечает, приостанавливая свои текущие действия, сохраняя свое состояние и выполняя функцию, называемую обработчиком прерываний (или подпрограммой обработки прерываний, ISR) для обработки события. Это прерывание является временным, и после завершения обработки обработчика прерывания процессор возобновляет обычную работу. Существует два типа прерываний: аппаратные прерывания и программные прерывания. [1]

Каждое прерывание имеет свой собственный обработчик прерываний. Количество аппаратных прерываний ограничено числом строк запроса прерывания (IRQ) для процессора, но могут быть сотни различных программных прерываний. Прерывания — это широко используемая техника многозадачности компьютеров, в первую очередь в реальном времени. Такая система называется управляемой прерываниями.

Содержание

История

Первое фактическое использование прерываний приписывают компьютеру UNIVAC 1103 в 1953 году. [2] На IBM 650 (1954) было применено впервые прерывание путём маскировки. Национальное бюро стандартов DYSEAC (1954) первым использовало прерывания для ввода / вывода. IBM 704 был первым компьютером, использующим прерывания для отладки с «передаточной ловушкой», которая может ссылаться на специальную процедуру, когда команда ветвления была имеет столкновение. Система TX-2 (1957) была первой, обеспечивающей несколько уровней приоритетных прерываний. [3]

Типы прерываний

Прерывания могут быть разделены на следующие типы:

  • Маскируемое прерывание (IRQ): аппаратное прерывание, которое можно игнорировать, устанавливая бит в битовой маске регистра маски прерываний (IMR).
  • Немаскируемое прерывание (NMI): аппаратное прерывание, в котором отсутствует связанная битовая маска, поэтому ее нельзя игнорировать. NMI используются для задач с высшим приоритетом, например таких как таймеры.
  • Межпроцессорное прерывание (IPI): особый случай прерывания, которое генерируется одним процессором для прерывания другого процессора в многопроцессорной системе.
  • Программное прерывание: прерывание, генерируемое в процессоре путем выполнения инструкции. Программные прерывания часто используются для реализации системных вызовов, поскольку они приводят к вызову подпрограммы с изменением уровня вызова ЦП.
  • Ложное прерывание: нежелательное аппаратное прерывание. Как правило, такие прерывания генерируются системными условиями, такими как электрические помехи в линии прерывания или из-за технически неправильно разработанного оборудования.

Процессоры обычно имеют внутреннюю маску прерываний, которая позволяет программному обеспечению игнорировать все внешние аппаратные прерывания, пока она установлена. Установка или очистка этой маски может быть быстрее, чем доступ к регистру маски прерываний (IMR) в PIC или отключение прерываний в самом устройстве. В некоторых случаях, например в случае архитектуры x86, отключение и включение прерываний на самом процессоре действует как барьер памяти.

Прерывание, которое оставляет машину в четко определенном состоянии, называется точным прерыванием. Такое прерывание имеет четыре свойства:

  • Счетчик программ (PC — Program Counter) сохраняется в известном месте.
  • Все инструкции перед тем, на который указывает счетчик программ, полностью выполнены.
  • Никакая инструкция, кроме той, на которую указывает счетчик программ, не была выполнена, или любые такие инструкции отменяются до обработки прерывания.
  • Состояние выполнения инструкции, на которую указывает счетчик программ, известно.

Прерывание, которое не соответствует указанным выше требованиям, называется неточным прерыванием.

Аппаратные прерывания

Аппаратные прерывания используются устройствами для передачи информации о том, что они требуют внимания со стороны операционной системы. [4] Внутренние аппаратные прерывания реализуются с использованием электронных сигналов оповещения, которые отправляются процессору от внешнего устройства, которое является частью самого компьютера, например контроллер диска, или внешнее периферийное устройство. К слову, нажатие клавиши на клавиатуре или перемещение мыши вызывают аппаратные прерывания, которые заставляют процессор считывать нажатие клавиши или положение мыши. В отличие от типа программного обеспечения, аппаратные прерывания являются асинхронными и могут произойти в середине выполнения инструкции, что требует дополнительного внимания при программировании. Акт инициирования аппаратного прерывания называется запросом прерывания (IRQ). [1]

Программные прерывания


Сложность с разделением линий прерывания

Некоторые устройства с плохо разработанным программным интерфейсом не позволяют определить, запросили ли они обслуживание. Они могут запереться или иным образом плохо себя вести, если их обслуживают, когда они этого не хотят. Такие устройства не могут терпеть паразитные прерывания, а также не могут терпеть совместное использование линии прерывания. Карты ISA , из-за зачастую дешевого дизайна и конструкции, печально известны этой проблемой. Такие устройства становятся все более редкими, поскольку аппаратная логика становится дешевле, а новые системные архитектуры требуют разделяемых прерываний. [1]

Проблемы с производительностью

Прерывания обеспечивают низкую нагрузку и хорошую задержку при низкой нагрузке, но значительно ухудшаются при высокой частоте прерываний, если не предпринимаются меры для предотвращения нескольких патологий. Это различные формы живых блокировок , когда система тратит все свое время на обработку прерываний, исключая другие необходимые задачи. В экстремальных условиях большое количество прерываний (например, очень высокий сетевой трафик) может полностью остановить систему. Чтобы избежать таких проблем, операционная система должна планировать обработку сетевых прерываний так же тщательно, как и планирование выполнения процесса.

С многоядерными процессорами, дополнительные улучшения производительности в обработке прерываний могут быть достигнуты с помощью масштабирования на стороне приема (RSS), когда используются сетевые адаптеры с несколькими очередями. Такие NIC предоставляют несколько очередей приема, связанных с отдельными прерываниями; путем маршрутизации каждого из этих прерываний на разные ядра обработка запросов на прерывание, запускаемых сетевым трафиком, полученным одним NIC, может быть распределена между несколькими ядрами. Распределение прерываний между ядрами может выполняться операционной системой автоматически, либо маршрутизация прерываний (обычно называемая привязкой IRQ) может быть настроена вручную.

Чисто программная реализация распределения принимаемого трафика, известная как управление приемными пакетами (RPS), распределяет принятый трафик между ядрами позже в тракте данных как часть функциональности обработчика прерываний. Преимущества RPS по RSS не включают требований к конкретному оборудованию, более продвинутым фильтрам распределения трафика и уменьшенной частоте прерываний, создаваемых NIC. Как недостаток, RPS увеличивает частоту межпроцессорных прерываний (IPI). Управление потоком приема (RFS) расширяет программный подход, учитывая локальность приложений; Дальнейшее улучшение производительности достигается за счет обработки запросов на прерывание теми же ядрами, на которых конкретные сетевые пакеты будут использоваться целевым приложением. [1]

Типичное использование

Типичное использование прерываний включает в себя следующее: системные таймеры, дисковый ввод / вывод, сигналы-выключение и ловушки. Существуют прерывания для передачи байтов данных с использованием UART или Ethernet; для чувствительных нажатий клавиш, управления двигателями и т.д.

Другое типичное использование состоит в том, чтобы генерировать периодические прерывания путем деления выходного сигнала кварцевого генератора и с помощью обработчика прерываний подсчитывать прерывания, чтобы процессор мог сохранять время. Эти периодические прерывания часто используются планировщиком задач ОС для перепланирования приоритетов запущенных процессов. Некоторые старые компьютеры генерировали периодические прерывания от частоты линии электропередачи, потому что она контролировалась коммунальными службами, чтобы исключить длительный дрейф электрических часов.

Например, прерывание диска сигнализирует о завершении передачи данных с или на периферийное устройство диска; процесс, ожидающий чтения или записи файла, запускается снова. В качестве другого примера — прерывание при отключении питания прогнозирует или запрашивает потерю мощности, позволяя компьютерному оборудованию выполнять упорядоченное завершение работы. Кроме того, прерывания используются в функциях "typeahead" для буферизации событий, таких как нажатия клавиш .

Прерывания используются для эмуляции инструкций, которые не реализованы на определенных моделях в компьютерной линии. Например, инструкции с плавающей запятой могут быть реализованы в аппаратных средствах в некоторых системах и эмулироваться в более дешевых системах. Выполнение невыполненной инструкции вызовет прерывание. Обработчик прерываний операционной системы распознает возникновение невыполненной инструкции, интерпретирует инструкцию в программной подпрограмме и затем вернется к программе прерывания, как если бы инструкция была выполнена. Это обеспечивает переносимость прикладного программного обеспечения по всей линии. [1]

Информация о ПК Общая информация о ПК Прерывание

Зачастую во время работы ПК возникает ситуация, когда процессору не обходимо приостановить выполнение основной программы и обработать событие, возникшее в одном из устройств компьютера. Для решения этой проблемы используется механизм прерываний.

Прерывание (interrupt, INT) – это приостановка центральным процессором выполнения приоритетной программы для обработки события, которое поступило от одного из устройств.

Механизм прерываний реализован следующим образом:

  • В случае возникновения события, требующего вмешательства ЦП, устройство, которое вызвало данное событие, посылает специальный сигнал – запрос на прерывание.
  • Запрос на прерывание обрабатывается контроллером прерываний.
  • Сигнал, после обработки контроллером прерываний, передается процессору. Процессор приостанавливает выполнение основной программы (сохраняя при этом текущее состояние своих регистров в оперативную память) и обрабатывает данное прерывание. После обработки прерывания процессор продолжает выполнять основную программу.
  • В случае возникновение одного прерывания во время обработки процессором другого, выполнение прерываний будет согласно их приоритету.

Контроллер прерываний (Programmable Interrupt Controller, PIC) – это микросхема (или встроенный в процессор модуль), которая выполняет обработку запросов на прерывание от различных устройств.

Каждому прерыванию присваивают число, называемое номером прерывания. Некоторые из номеров прерывания зарезервированы за определенными устройствами, некоторые можно освободить и использовать для других устройств. Обозначается прерывание символом IRQ.

Классификация прерываний.

1. Немаскируемые прерывания (Non-Maskable Interrupt, NMI). Прерывания с высшим приоритетом. Прерывания данного типа обрабатываются в случаях возникновения аварийных ситуаций, вызванных ошибками в работе памяти или других устройств.

2. Маскируемые (аппаратные) прерывания. В эту группу относят прерывания от периферийных устройств. Обрабатываются контроллером прерываний. Стандартный контроллер прерываний позволяет обращаться к 16 прерываниям от различных устройств. Сегодня имеется возможность использовать расширенный контроллер прерываний APIC.

APIC (Advanced Programmable Interrupt Controller) – расширенный программируемый контроллер прерываний, позволяющий использовать 24 аппаратных прерываний вместо 16.

Примером аппаратного прерывания может быть сигнал от таймера, звуковой карты, нажатие клавиши клавиатуры.

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

NMI часто используется, когда время отклика критично или когда прерывание никогда не должно отключаться во время нормальной работы системы. Такое использование включает в себя создание отчетов о неисправимых аппаратных ошибках, отладку и профилирование системы, а также обработку особых случаев, таких как перезагрузка системы.

Современные компьютерные архитектуры обычно используют NMI для обработки неисправимых ошибок, которые требуют немедленного внимания. Следовательно, такие прерывания не должны маскироваться при нормальной работе системы. Эти ошибки включают невосстановимые внутренние ошибки системного набора микросхем , повреждение системной памяти, такое как ошибки четности и ECC , а также повреждение данных, обнаруженное на системной и периферийной шинах.

В некоторых системах пользователь компьютера может запускать NMI с помощью аппаратных и программных интерфейсов отладки и кнопок сброса системы.

Программисты обычно используют отладочные NMI для диагностики и исправления ошибочного кода. В таких случаях NMI может выполнить обработчик прерывания, который передает управление специальной программе мониторинга. С помощью этой программы разработчик может проверить память машины и проверить внутреннее состояние программы в момент ее прерывания. Это также позволяет отлаживать или диагностировать зависшие компьютеры .

СОДЕРЖАНИЕ

История

В старых архитектурах NMI использовались для прерываний, которые обычно никогда не отключались из-за необходимого времени отклика. Это были скрытые сигналы. Примеры включают контроллер гибких дисков на Amstrad PCW , сопроцессор 8087 на x86 при использовании в IBM PC или его совместимых устройствах (хотя Intel рекомендовала подключать его к обычному прерыванию) и сигнал низкого заряда батареи на HP 95LX .

Отладочные NMI появились в нескольких формах, включая «программистскую кнопку» Apple Macintosh и определенные комбинации клавиш на рабочих станциях Sun. С появлением Windows 2000 , Microsoft позволила использовать НЙ привести систему в любой перерыв в отладчик , или сбросить содержимое памяти на диск и перезагрузите компьютер.

Не все компьютеры предоставляют механизм для запуска NMI; однако многие машины (обычно серверы, монтируемые в стойку ) имеют физическую кнопку специально для этой цели. Другие машины могут предоставлять эту функцию через карту расширения.

Miles Gordon Technology «s Disciple и + D продукты для ZX Spectrum признакам NMI-продуцирующие "волшебной кнопки".

В системе Nintendo Entertainment System NMI генерируется во время каждого интервала вертикального гашения . Поскольку эти NMI (часто называемые «пустыми прерываниями») происходят через частые регулярные интервалы, код, который управляет игровой графикой и звуком, часто выполняется внутри процедуры обработчика NMI. Очистка 7 - й бит ППУ в $ 2000 регистр отключает vblank прерываний, и его установка позволяет им.

Сегодня мы поговорим о прерываниях процессоров семейства x86 (-64). Подробнее под катом.
Прерывания — это как бы сигнал процессору, что надо прервать выполнение (их поэтому и назвали прерываниями) текущего кода и срочно сделать то, что указано в обработчике.

  • 0b0101: 32-битный гейт задачи, при появлении такого прерывания происходит хардверное переключение задачи (да-да, есть и такое, но его уже давно не используют)
  • 0b0110: 16-битный гейт прерывания
  • 0b0111: 16-битный гейт trap'a (я не знаю, как это перевести на русский язык, извините)
  • 0b1110: 32-битный гейт прерывания
  • 0b1111: 32-битный гейт trap'a
  1. Поиск вектора №0 в IDT.
  2. Сравнение уровня привилегий дескриптора и текущего уровня привилегий процессора.
  3. Если текущий уровень привилегий процессора меньше уровня привилегий дескриптора, то просто вызвать генеральную ошибку защиты и не вызывать прерывание.
  4. Происходит сохранение адреса возвращения, регистра (E)FLAGS и другой информации.
  5. Происходит переход на адрес, указанный в векторе №0 IDT.
  6. После выполнения обработчика инструкция iret возвращает управление прерванному коду.

Существует особый тип прерываний — IRQ (Interrupt ReQuest), или же аппаратные прерывания, но я буду их для краткости называть просто IRQ. Технически они почти не отличаются от любых других прерываний, но генерируются не процессором или самим кодом, а устройствами, подключенными к компьютеру. К примеру, IRQ №0 генерируется PIT (таймер с программируемым интервалом), IRQ 1 генерируется при нажатии клавиши на клавиатуре, а IRQ 12 — при действии с PS/2-мышью.


Еще есть так называемые программные прерывания. Их, как понятно из названия, программа должна вызывать сама — никто их за нее не вызывает. Таковыми являются, например, системные вызовы в некоторых системах. В Linux, например, они висят на векторе 0x80. Во многих хобби-ОС они тоже висят на векторе 0x80. Теперь немного отсебятины — я думаю, что сисвызовы сделаны в виде прерываний из-за того, что 1) их так очень легко вызывать, 2) их можно вызвать из любого кода, работающего в ОС — IDT-то одна на всю систему.
Информация взята с OSDev Wiki.


\ "Аппаратного сбоя - НМИ: ошибка четности Контроль четности / память \" может произойти, если аппаратный компонент неисправности, или если есть повреждения или установлена ​​несовместимые драйверы
.
Если вы недавно установили, заменить аппаратный компонент (например: RAM, GPU, Drive и т.д.) или установлены некоторые драйвера (для сетевых адаптеров и т.д.) - я бы настоятельно рекомендуем удалить их и загрузке компьютера. Вы можете переустановить их снова по одному.

- Убедитесь, что вы установили последние изменения для вашего компьютера \ 'ы BIOS или конфигурации прошивки программного обеспечения. Идите в BIOS и установить нагрузки безопасных настроек по умолчанию или BIOS по умолчанию, отключите все антивирусную защиту в BIOS, а затем установить подключи и играй ОС на п.

Обновите BIOS, микропрограммы и / или конфигурацию EISA в случае необходимости.

- Если вы \ 'ве исключено, аппаратные проблемы, проверьте наличие обновленных драйверов. Вы можете использовать наш Driver Reviver приложение проверить ваш компьютер на наличие устаревших драйверов.

Дайте нам знать, как вы идете с рекомендациями.


0 голоса

НМИ Паритет Проверка / памяти Ошибка четности обычно происходит, если компьютер аппаратные компоненты повреждена, или если несовместимый драйвер установлен на компьютере.

2. Проверьте адаптеры на компьютере
Шаг 1 - Удалите все адаптеры, которые не требуются для запуска или запуска компьютера. Большинство компьютеров Windows, может работать только с видео и дисков контроллера подсистемы адаптеров.
Шаг 2 - Перезагрузите компьютер. Если ошибка не появляется, то проблема является одной из адаптеров удаленных на шаге 1.
Шаг 3 - Установите один адаптер в то время, пока ошибка не будет отображаться снова. Это определяет адаптер, который был источником ошибок. Посетите веб-сайт производителя адаптера и загрузить и установить последнюю версию.
Шаг 4 - Сброс всех аппаратных адаптер карты, если ошибка не устранена, чтобы обеспечить, что это не является причиной проблемы.


3. Проверьте компьютер BIOS
Шаг 1 - Убедитесь, что последняя версия BIOS конфигурации и встроенного программного обеспечения компьютера установлены.
Шаг 2 - Откройте BIOS и изменить конфигурацию, чтобы "нагрузка БЕЗОТКАЗНОЙ умолчанию" или "BIOS по умолчанию," установить "подключи и играй ОС" для "Нет", и отключить варианты антивирусной защиты, расположенных в BIOS.
Шаг 3 - Перезагрузите компьютер, чтобы увидеть, если ошибка была исправлена.


Проверьте обновления драйвера
Если операционная система Windows была недавно обновлена ​​или установлена ​​новая аппаратура, то драйвер устарел устройство может быть причиной ошибки.
Шаг 1 - Убедитесь, что обновление Windows настраивается автоматически обновлять компьютер от применения "Обновление Windows", найденных в компьютере вручную обновить операционную систему «Панель управления».. Перезагрузите компьютер после завершения обновления вручную Windows.
Шаг 2 - Если какой-либо новое оборудование было установлено, удалить водителей аппаратных в меню "Add / Remove Programs" после обновления ОС в шаге 1 и перезагрузите компьютер.
Шаг 3 - Проверьте другие драйверы, установленные на компьютере для обновления, если все еще ​​отображается ошибка и обновления по мере необходимости. Перезагрузите компьютер после каждого обновления драйвера устройства, чтобы завершить его устранении.

Читайте также: