Прерывание
Прерывание — это сигнал, который сообщает процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, реагирующему на событие и обслуживает его, после чего возвращает управление в прерванный код.
В зависимости от источника возникновения сигнала прерывания делятся на:
- программные — инициируются при помощи исполнения специальной инструкции в коде программы. Обычно программные прерывания используются для обращения к функциям операционной системы, драйверов и встроенного программного обеспечения (firmware).
- синхронные (внутренние) — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: переполнение, деление на ноль, недопустимый код операции, обращение к недопустимым адресам;
- асинхронные (внешние, аппаратные) — события, исходящие от внешних источников (к примеру, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от сетевой карты, дискового накопителя, таймера, движение мыши, нажатие клавиш клавиатуры. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание;
Термин «ловушка» иногда используется как синоним термина «прерывание» или «внутреннее прерывание». Как правило, словоупотребление устанавливается в документации производителя конкретной архитектуры процессора.
Маскирование
В зависимости от возможности запрета внешние прерывания делятся на:
- маскируемые — прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний (в x86-процессорах — сбросом флага IF в регистре флагов);
- немаскируемые — обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.
Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим, поскольку во время их работы могут не обрабатываться другие прерывания, а если их будет много (особенно от одного источника), то они могут теряться.