Прерывание

Материал из Википедии — свободной энциклопедии

Перейти к: навигация, поиск

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

В зависимости от источника возникновения сигнала прерывания делятся на:

  • Аппаратные — события от периферийных устройств (например, нажатия клавиш клавиатуры, движение мыши, сигнал от таймера, сетевой карты или дискового накопителя) — внешние прерывания, или события в микропроцессоре — (например, деление на ноль) — внутренние прерывания;
  • Программные — инициируются выполняемой программой явным исполнением специальных инструкций, то есть синхронно, а не асинхронно. Программные прерывания могут служить для вызова сервисов операционной системы.

Термин "ловушка" (trap) иногда используется как синоним термина "прерывание", или же синоним термина "внутреннее прерывание" (см. выше). Единого словоупотребления этих терминов не существует ни в русском, ни в английском языке. Как правило, словоупотребление устанавливается в документации производителя конкретной архитектуры процессора.

Содержание

[править] Маскирование

В зависимости от возможности запрета аппаратные прерывания делятся на:

  • Маскируемые — прерывания, которые можно запрещать установкой соответствующих битов в соответствующем регистре маски прерываний;
  • Немаскируемые — обрабатываются всегда, независимо от значения флага IF (в процессорах Intel), так как предназначены для реакции на сверхважные для вычислительной системы события.

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

[править] Приоритезация

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

Перехват прерывания — изменение обработчика прерывания на свой собственный.

[править] Таблица прерываний

Вектор прерывания — закреплённый за устройством номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний. Местоположение таблицы зависит от типа и режима работы микропроцессора.

[править] См. также