Прерывание

редактировать
источников прерывания и обработки процессора

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

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

Содержание
  • 1 Типы
    • 1.1 Аппаратные прерывания
      • 1.1.1 Маскирование
      • 1.1.2 Ложные прерывания
    • 1.2 Программное обеспечение прерывания
  • 2 Методы запуска
    • 2.1 Запуск по уровню
    • 2.2 Запуск по фронту
  • 3 Ответ процессора
  • 4 Реализация системы
    • 4.1 Общие IRQ
      • 4.1.1 Трудности с совместным использованием линий прерывания
    • 4.2 Гибрид
    • 4.3 Сигнал сообщения
    • 4.4 Дверной звонок
    • 4.5 Многопроцессорный IPI
  • 5 Производительность
  • 6 Типичное использование
  • 7 История
  • 8 См. Также
  • 9 Ссылки
  • 10 Внешние ссылки
Типы

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

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

Аппаратное прерывание - это состояние, связанное с состоянием аппаратного обеспечения, о котором может сигнализировать внешнее аппаратное устройство, например, запрос прерывания (IRQ) на ПК или обнаруживается устройствами, встроенными в логику процессора (например, таймером ЦП в IBM System / 370), чтобы сообщить, что устройство требует внимания со стороны операционной системы (ОС) или, если ОС нет, из-за "голой" программы, запущенной на CPU. Такие внешние устройства могут быть частью компьютера (например, контроллер диска ) или они могут быть внешними периферийными устройствами. Например, нажатие клавиши на клавиатуре или перемещение мыши, подключенной к порту PS / 2, вызывает аппаратные прерывания, которые заставляют процессор считывать нажатие клавиши или положение мыши..

Аппаратные прерывания могут поступать асинхронно относительно тактовой частоты процессора и в любое время во время выполнения инструкции. Следовательно, все сигналы аппаратных прерываний обусловлены их синхронизацией с тактовой частотой процессора и действуют только на границах выполнения команд.

Во многих системах каждое устройство связано с определенным сигналом IRQ. Это позволяет быстро определить, какое аппаратное устройство запрашивает обслуживание, и ускорить обслуживание этого устройства.

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

Маскирование

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

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

Чтобы замаскировать прерывание, значит отключить его, а чтобы демаскировать прерывание, нужно включить.

Ложные прерывания

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

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

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

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

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

Способы срабатывания

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

Запуск по уровню

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

Процессор производит выборку входного сигнала прерывания в течение каждого цикла команд. Процессор распознает запрос прерывания, если сигнал заявлен при выполнении выборки.

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

Запуск по фронту

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

Ответ процессора

Процессор производит выборку сигнала триггера прерывания в течение каждого цикла команд и будет реагировать на триггер только в том случае, если сигнал поступает в момент выборки. Независимо от метода запуска, процессор начнет обработку прерывания на следующей границе инструкции, следующей за обнаруженным триггером, таким образом гарантируя:

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

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

Если реализовано аппаратно как отдельный компонент, схема контроллера прерывания, такая как программируемый контроллер прерываний (PIC) IBM PC, может быть подключена между устройством прерывания и выводом прерывания процессора к мультиплексировать несколько источников прерывания на одну или две обычно доступные линии ЦП. Если реализовано как часть контроллера памяти, прерывания отображаются в системной памяти адресное пространство.

Общие IRQ

Несколько устройств могут совместно использовать линию прерывания, запускаемую фронтом, если они предназначены для. Линия прерывания должна иметь подтягивающий или подтягивающий резистор, чтобы в неактивном состоянии она переходила в неактивное состояние, которое является ее состоянием по умолчанию. Устройства сигнализируют о прерывании, ненадолго переводя линию в состояние, отличное от состояния по умолчанию, и позволяют линии «плавать» (не управлять ею активно), когда не сигнализируют о прерывании. Этот тип подключения также называется открытым коллектором. Затем линия передает все импульсы, генерируемые всеми устройствами. (Это аналог троса на некоторых автобусах и троллейбусах, который любой пассажир может потянуть, чтобы подать сигнал водителю о том, что он запрашивает остановку.) Однако импульсы прерывания от разных устройств могут слиться, если они возникают вблизи время. Чтобы избежать потери прерываний, ЦП должен запускаться по заднему фронту импульса (например, по переднему фронту, если линия подтягивается и переводится в низкий уровень). После обнаружения прерывания ЦП должен проверить все устройства на соответствие требованиям к обслуживанию.

Прерывания, запускаемые по фронту, не имеют проблем, которые возникают у прерываний, запускаемых по уровню, при совместном использовании. Обслуживание устройства с низким приоритетом может быть отложено произвольно, в то время как прерывания от устройств с высоким приоритетом продолжают приниматься и обрабатываться. Если есть устройство, которое ЦП не знает, как обслуживать, что может вызвать ложные прерывания, оно не будет мешать сигнализации прерывания других устройств. Однако прерывание, инициированное фронтом, может быть легко пропущено - например, когда прерывания замаскированы на определенный период - и, если нет какого-либо типа аппаратной защелки, которая записывает событие, восстановление невозможно. Эта проблема вызвала множество «зависаний» в раннем компьютерном оборудовании, потому что процессор не знал, что от него что-то ожидается. Более современное оборудование часто имеет один или несколько регистров состояния прерывания, которые фиксируют запросы прерываний; Хорошо написанный код обработки прерываний, управляемый ребрами, может проверять эти регистры, чтобы убедиться, что события не пропущены.

Старая шина Industry Standard Architecture (ISA) использует прерывания, запускаемые фронтом, без требования, чтобы устройства могли совместно использовать линии IRQ, но все основные материнские платы ISA включают подтягивающие резисторы на своих Линии IRQ, поэтому хорошо работающие устройства ISA, совместно использующие линии IRQ, должны работать нормально. Параллельный порт также использует прерывания, запускаемые фронтом. Многие старые устройства предполагают, что они имеют исключительное использование линий IRQ, что делает их электрически небезопасным совместное использование.

Есть 3 способа подключения нескольких устройств, «использующих одну линию». Во-первых, исключительная проводимость (переключение) или исключительное подключение (к контактам). Далее идет по шине (все подключены к одной и той же линии прослушивания): карты на шине должны знать, когда они должны разговаривать, а не говорить (например, шина ISA). Разговор может быть инициирован двумя способами: защелкой накопления или логическими вентилями. Логические вентили ожидают непрерывного потока данных, который отслеживается на предмет ключевых сигналов. Аккумуляторы срабатывают только тогда, когда удаленная сторона возбуждает ворота сверх порогового значения, поэтому согласованная скорость не требуется. У каждого есть свои преимущества в скорости по сравнению с расстоянием. Как правило, триггер - это метод обнаружения возбуждения: нарастающий фронт, задний фронт, порог (осциллограф может запускать самые разные формы и условия).

Запуск программных прерываний должен быть встроен в программное обеспечение (как в ОС, так и в приложении). Приложение «C» имеет таблицу триггеров (таблицу функций) в заголовке, о которой приложение и ОС знают и правильно используют, что не связано с оборудованием. Однако не путайте это с аппаратными прерываниями, которые сигнализируют ЦП (ЦП запускает программное обеспечение из таблицы функций, аналогично программным прерываниям).

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

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

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

Гибрид

Некоторые системы используют гибрид сигнализации с запуском по уровню и по фронту. Аппаратное обеспечение не только ищет фронта, но также проверяет, что сигнал прерывания остается активным в течение определенного периода времени.

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

Сигнализация сообщения

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

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

Сигнализируемые сообщением векторы прерываний могут совместно использоваться в той степени, в которой может использоваться совместно используемая среда связи. Никаких дополнительных усилий не требуется.

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

PCI Express, последовательная компьютерная шина, использует исключительно сигнальные прерывания.

Дверной звонок

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

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

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

Многопроцессорный IPI

В многопроцессорных системах процессор может отправлять запрос прерывания другому процессору через межпроцессорные прерывания (IPI).

Производительность

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

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

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

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

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

Прерывания обычно используются для обслуживания аппаратных таймеров, передачи данные в хранилище и из него (например, дисковый ввод-вывод) и интерфейсы связи (например, UART, Ethernet ), обрабатывают события клавиатуры и мыши и реагируют на любое другое время - чувствительные события в соответствии с требованиями прикладной системы. Немаскированные прерывания обычно используются для ответа на высокоприоритетные запросы, такие как тайм-ауты сторожевого таймера, сигналы отключения питания и прерывания..

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

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

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

Прерывания аналогичны сигналам, с той разницей, что сигналы используются для межпроцессного взаимодействия (IPC), опосредованного ядром (возможно, через системные вызовы) и обрабатываются процессами, а прерывания опосредуются процессором и обрабатываются ядром. Ядро может передать прерывание в качестве сигнала вызвавшему его процессу (типичные примеры: SIGSEGV, SIGBUS, SIGILL и SIGFPE ).

История

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

UNIVAC 1103 Считается, что компьютер впервые использовал прерывания в 1953 году. Ранее, на UNIVAC I (1951) «Арифметическое переполнение запускало выполнение процедуры исправления ошибок с двумя инструкциями по адресу 0, либо по адресу выбор программиста заставил компьютер остановиться ". В IBM 650 (1954) впервые применена маскировка прерывания. Национальное бюро стандартов DYSEAC (1954 г.) было первым, кто использовал прерывания для ввода-вывода. IBM 704 был первым, кто использовал прерывания для отладки с «ловушкой передачи», которая могла вызывать специальную процедуру при обнаружении инструкции перехода. MIT Lincoln Лабораторная система TX-2 (1957) была первой, которая обеспечила несколько уровней приоритетов прерываний.

См. Также
  • значок Портал электроники
Ссылки
Внешние ссылки
Искать прерывание или прерывание в Wiktionary, бесплатный словарь.
Последняя правка сделана 2021-05-24 05:05:41
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте