Прерывать
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2014 г. ) |
Операционные системы |
---|
Общие особенности |
В цифровых компьютерах прерывание ) называемое ловушкой ( иногда [1] — это запрос процессора на прерывание текущего исполняемого кода (если это разрешено), чтобы событие могло быть своевременно обработано. Если запрос принят, процессор приостановит свою текущую деятельность, сохранит свое состояние и выполнит функцию, называемую обработчиком прерывания (или подпрограмму обслуживания прерывания , ISR), для обработки события. Это прерывание часто носит временный характер и позволяет программному обеспечению возобновить работу. [а] обычные действия после завершения работы обработчика прерывания, хотя вместо этого прерывание может указывать на фатальную ошибку. [2]
Прерывания обычно используются аппаратными устройствами для обозначения изменений электронного или физического состояния, которые требуют внимания, зависящего от времени. Прерывания также широко используются для реализации многозадачности компьютера и системных вызовов , особенно в вычислениях в реальном времени . Системы, использующие прерывания таким образом, называются управляемыми прерываниями. [3]
История
[ редактировать ]Аппаратные прерывания были введены в качестве оптимизации, исключающей непродуктивное время ожидания в циклах опроса , ожидание внешних событий. Первой системой, использовавшей этот подход, была DYSEAC , завершенная в 1954 году, хотя более ранние системы обеспечивали функции ловушки ошибок. [4]
году . Считается, что компьютер UNIVAC 1103A первым использовал прерывания в 1953 [5] [6] Ранее, в UNIVAC I (1951 г.), «арифметическое переполнение либо запускало выполнение процедуры исправления двух инструкций по адресу 0, либо, по усмотрению программиста, приводило к остановке компьютера». IBM 650 (1954 г.) впервые использовал маскировку прерываний. Национальное бюро стандартов DYSEAC (1954 г.) было первым, кто использовал прерывания для ввода-вывода. IBM 704 был первым, кто использовал прерывания для отладки с «ловушкой передачи», которая могла вызывать специальную процедуру при обнаружении инструкции ветвления. Массачусетского технологического института лаборатории Линкольна Система TX-2 (1957 г.) была первой системой, обеспечивающей несколько уровней приоритетных прерываний. [6]
Типы
[ редактировать ]Сигналы прерывания могут выдаваться в ответ на аппаратные или программные события. Они классифицируются как аппаратные прерывания или программные прерывания соответственно. Для любого конкретного процессора количество типов прерываний ограничено архитектурой.
Аппаратные прерывания
[ редактировать ]Аппаратное прерывание — это состояние, связанное с состоянием аппаратного обеспечения, которое может сигнализироваться внешним аппаратным устройством, например, линией запроса прерывания (IRQ) на ПК, или обнаруживаться устройствами, встроенными в логику процессора (например, таймером ЦП). в IBM System/370), чтобы сообщить, что устройство требует внимания со стороны операционной системы (ОС). [7] или, если ОС нет, из голой программы, работающей на ЦП. Такие внешние устройства могут быть частью компьютера (например, контроллер диска ) или внешними периферийными устройствами . Например, нажатие клавиши клавиатуры или перемещение мыши , подключенной к порту PS/2, вызывает аппаратные прерывания, которые заставляют процессор считывать нажатие клавиши или положение мыши.
Аппаратные прерывания могут поступать асинхронно по отношению к тактовой частоте процессора и в любой момент выполнения инструкции. Следовательно, все входящие сигналы аппаратного прерывания обрабатываются путем их синхронизации с тактовой частотой процессора и обрабатываются только на границах выполнения команд.
Во многих системах каждое устройство связано с определенным сигналом IRQ. Это позволяет быстро определить, какое аппаратное устройство запрашивает обслуживание, и ускорить обслуживание этого устройства.
В некоторых старых системах, таких как CDC 3600 1964 года , [8] все прерывания отправлялись в одно и то же место, и ОС использовала специальную инструкцию для определения немаскированного прерывания с наивысшим приоритетом. В современных системах обычно существует отдельная процедура прерывания для каждого типа прерывания (или для каждого источника прерывания), часто реализованная в виде одной или нескольких таблиц векторов прерываний .
Маскировка
[ редактировать ]Замаскировать . прерывание — значит отключить его, поэтому оно откладывается [б] или игнорировать [с] процессором, а демаскировать прерывание — значит включить его. [9]
Процессоры обычно имеют внутренний регистр маски прерываний . [д] что позволяет выборочное включение [2] (и отключение) аппаратных прерываний. Каждый сигнал прерывания связан с битом в регистре маски. В некоторых системах прерывание разрешается, когда бит установлен, и отключается, когда бит сброшен. В других случаях верно обратное: установленный бит отключает прерывание. Когда прерывание отключено, соответствующий сигнал прерывания может игнорироваться процессором или оставаться в режиме ожидания. Сигналы, на которые влияет маска, называются маскируемыми прерываниями .
На некоторые сигналы прерываний не влияет маска прерываний, и поэтому их нельзя отключить; они называются немаскируемыми прерываниями (NMI). Они указывают на события с высоким приоритетом, которые нельзя игнорировать ни при каких обстоятельствах, например, сигнал тайм-аута сторожевого таймера . Что касается SPARC , немаскируемое прерывание (NMI), несмотря на то, что оно имеет наивысший приоритет среди прерываний, можно предотвратить с помощью маски прерывания. [10]
Отсутствующие прерывания
[ редактировать ]Один из режимов сбоя — это когда оборудование не генерирует ожидаемое прерывание для изменения состояния, что заставляет операционную систему ждать бесконечно. В зависимости от деталей сбой может повлиять только на один процесс или иметь глобальные последствия. В некоторых операционных системах есть специальный код для решения этой проблемы.
Например, IBM Operating System/360 (OS/360) использует прерывание «не готово к готовности» на конце устройства, когда лента смонтирована на стримере, и не будет читать метку ленты до тех пор, пока это прерывание не произойдет или не будет устранено. смоделировано. IBM добавила код в OS/360, чтобы команда VARY ONLINE имитировала прерывание завершения устройства на целевом устройстве.
Ложные прерывания
[ редактировать ]Ложное прерывание — это аппаратное прерывание, источник которого не найден. Для описания этого явления также можно использовать термин «фантомное прерывание» или «фантомное прерывание». Ложные прерывания, как правило, являются проблемой для схемы прерывания по принципу «ИЛИ», подключенной к чувствительному к уровню входу процессора. Такие прерывания может быть трудно идентифицировать, когда система ведет себя неправильно.
В схеме проводного ИЛИ зарядка/разрядка паразитной емкости через резистор смещения линии прерывания вызовет небольшую задержку, прежде чем процессор распознает, что источник прерывания очищен. Если прерывающее устройство очищается слишком поздно в процедуре обслуживания прерываний (ISR), у схемы прерывания не будет достаточно времени, чтобы вернуться в состояние покоя до завершения текущего экземпляра ISR. В результате процессор будет думать, что ожидается еще одно прерывание, поскольку напряжение на его входе запроса прерывания не будет достаточно высоким или низким, чтобы установить однозначную внутреннюю логику 1 или логический 0. Очевидное прерывание не будет иметь идентифицируемого источника, следовательно, " ложное» прозвище.
Ложное прерывание также может быть результатом электрических аномалий из-за неправильной конструкции схемы, высокого уровня шума , перекрестных помех , проблем с синхронизацией или, реже, ошибок устройства . [11]
Ложное прерывание может привести к взаимоблокировке системы или другой неопределенной операции, если ISR не учитывает возможность возникновения такого прерывания. Поскольку ложные прерывания в основном являются проблемой для схем прерываний с проводным ИЛИ, хорошей практикой программирования в таких системах является то, что ISR проверяет все источники прерываний на активность и не предпринимает никаких действий (кроме возможной регистрации события), если ни один из источников не прерывает. . В неблагоприятных сценариях они могут даже привести к сбою компьютера.
Программные прерывания
[ редактировать ]Программное прерывание запрашивается самим процессором при выполнении определенных инструкций или при выполнении определенных условий. Каждый сигнал программного прерывания связан с конкретным обработчиком прерывания.
Программное прерывание может быть намеренно вызвано выполнением специальной инструкции , которая по замыслу вызывает прерывание при выполнении. [и] Такие инструкции действуют аналогично вызовам подпрограмм и используются для различных целей, таких как запрос служб операционной системы и взаимодействие с драйверами устройств (например, для чтения или записи носителей информации). Программные прерывания также могут быть вызваны ошибками выполнения программы или системой виртуальной памяти .
операционной системы Обычно ядро перехватывает и обрабатывает такие прерывания. Некоторые прерывания обрабатываются прозрачно для программы — например, обычное решение страничного сбоя заключается в том, чтобы сделать требуемую страницу доступной в физической памяти. Но в других случаях, например при ошибке сегментации, операционная система выполняет обратный вызов процесса. В Unix-подобных операционных системах это включает отправку сигнала, такого как SIGSEGV , SIGBUS , SIGILL или SIGFPE , который может либо вызвать обработчик сигнала, либо выполнить действие по умолчанию (завершение программы). В Windows обратный вызов выполняется с использованием структурированной обработки исключений с кодом исключения, например STATUS_ACCESS_VIOLATION или STATUS_INTEGER_DIVIDE_BY_ZERO. [12]
ядра В процессе часто бывает так, что некоторые типы программных прерываний не должны происходить. Если они все же произойдут, это может привести к сбою операционной системы .
Терминология
[ редактировать ]Термины прерывание , ловушка , исключение , ошибка и прерывание используются для различения типов прерываний, хотя «нет четкого консенсуса относительно точного значения этих терминов». [13] Термин «ловушка» может относиться к любому прерыванию, к любому программному прерыванию, к любому синхронному программному прерыванию или только к прерываниям, вызванным инструкциями, есть «ловушка» в названии которых . В некоторых случаях термин «ловушка» относится конкретно к точке останова, предназначенной для инициирования переключения контекста на программу-монитор или отладчик . [1] Оно также может относиться к синхронному прерыванию, вызванному исключительным условием (например, деление на ноль , неверный доступ к памяти , недопустимый код операции ), [13] термин «исключение» хотя для этого чаще используется .
x86 делит прерывания на (аппаратные) прерывания и программные исключения и определяет три типа исключений: ошибки, ловушки и прерывания. [14] [15] (Аппаратные) прерывания — это прерывания, запускаемые асинхронно устройством ввода-вывода и позволяющие перезапустить программу без потери непрерывности. [14] Ошибку также можно перезапустить, но она связана с синхронным выполнением инструкции — адрес возврата указывает на команду, вызвавшую ошибку. Ловушка аналогична ошибке, за исключением того, что адрес возврата указывает на инструкцию, которая должна быть выполнена после инструкции перехвата; [16] Одним из наиболее известных применений является реализация системных вызовов . [15] Прерывание используется в случае серьезных ошибок, таких как аппаратные ошибки и недопустимые значения в системных таблицах, и часто [ф] не позволяет перезапустить программу. [16]
Arm использует термин «исключение» для обозначения всех типов прерываний. [17] и делит исключения на (аппаратные) прерывания , прерывания , сброс и инструкции, генерирующие исключения. Прерывания соответствуют исключениям x86 и могут быть прерываниями предварительной выборки (неудачная выборка инструкций) или прерываниями данных (неудачный доступ к данным) и могут быть синхронными или асинхронными. Асинхронное прерывание может быть точным или неточным. Прерывания MMU (ошибки страниц) являются синхронными. [18]
RISC-V использует прерывание как общий термин, а также как внешнее подмножество; внутренние прерывания называются исключениями.
Методы запуска
[ редактировать ]Каждый вход сигнала прерывания предназначен для запуска либо по уровню логического сигнала, либо по определенному фронту сигнала (переходу уровня). Чувствительные к уровню входы постоянно запрашивают обслуживание процессора, пока на вход подается определенный (высокий или низкий) логический уровень. Входы, чувствительные к фронту, реагируют на фронты сигнала: определенный фронт (нарастающий или спадающий) вызывает фиксацию запроса на обслуживание; процессор сбрасывает защелку при выполнении обработчика прерывания.
По уровню
[ редактировать ]Прерывание , запускаемое по уровню, запрашивается путем удержания сигнала прерывания на определенном (высоком или низком) активном логическом уровне . Устройство вызывает прерывание, запускаемое по уровню, переводя сигнал на активный уровень и удерживая его на этом уровне. Он инвертирует сигнал, когда процессор дает ему команду сделать это, обычно после того, как устройство было обслужено.
Процессор производит выборку входного сигнала прерывания во время каждого командного цикла. Процессор распознает запрос на прерывание, если сигнал выдается при выполнении выборки.
Входы, запускаемые по уровню, позволяют нескольким устройствам использовать общий сигнал прерывания через проводное соединение «ИЛИ». Процессор опрашивает, чтобы определить, какие устройства запрашивают обслуживание. После обслуживания устройства процессор может снова опросить и, при необходимости, обслужить другие устройства перед выходом из ISR.
По краям
[ редактировать ]Прерывание по фронту — это прерывание, сигнализируемое переходом уровня на линии прерывания, либо спадающим фронтом (от высокого к низкому), либо нарастающим фронтом (от низкого к высокому). Устройство, желающее подать сигнал о прерывании, подает импульс на линию, а затем переводит линию в неактивное состояние. Если импульс слишком короткий, чтобы его можно было обнаружить с помощью ввода-вывода по опросу , для его обнаружения может потребоваться специальное оборудование. Важная часть запуска по фронту заключается в том, что сигнал должен перейти, чтобы вызвать прерывание; например, если бы сигнал был высоким-низким-низким, сработало бы только одно прерывание по заднему фронту, и продолжающийся низкий уровень не вызвал бы дальнейшее прерывание. Сигнал должен вернуться на высокий уровень и снова упасть, чтобы вызвать дальнейшее прерывание. Это контрастирует с триггером по уровню, при котором низкий уровень будет продолжать создавать прерывания (если они разрешены), пока сигнал не вернется к своему высокому уровню.
Компьютеры с прерываниями, запускаемыми по фронту, могут иметь регистр прерываний , который сохраняет статус ожидающих прерываний. Системы с регистрами прерываний обычно также имеют регистры маски прерываний.
Ответ процессора
[ редактировать ]Процессор производит выборку сигналов запуска прерывания или регистра прерывания во время каждого командного цикла и обрабатывает найденное прерывание с наивысшим приоритетом. Независимо от метода запуска, процессор начнет обработку прерывания на следующей границе инструкции после обнаруженного триггера, гарантируя тем самым:
- Статус процессора [г] сохраняется известным способом. Обычно статус хранится в известном месте, но в некоторых системах он хранится в стеке.
- Все инструкции, предшествующие той, на которую указывает ПК, полностью выполнены.
- Никакая инструкция, кроме той, на которую указывает ПК, не была выполнена, или любые такие инструкции отменены до обработки прерывания.
- Состояние выполнения инструкции, на которую указывает ПК, известно.
Существует несколько различных архитектур обработки прерываний. В некоторых есть один обработчик прерываний. [19] который должен сканировать прерывание с наивысшим приоритетом. В других существуют отдельные обработчики прерываний для отдельных типов прерываний. [20] отдельные каналы ввода-вывода или устройства, или и то, и другое. [21] [22] Несколько причин прерывания могут иметь один и тот же тип прерывания и, следовательно, один и тот же обработчик прерывания, поэтому обработчик прерывания должен определить причину. [20]
Внедрение системы
[ редактировать ]Прерывания могут полностью обрабатываться аппаратно ЦП или могут обрабатываться как ЦП, так и другим компонентом, например программируемым контроллером прерываний или южным мостом .
Если используется дополнительный компонент, этот компонент будет подключен между устройством прерывания и выводом прерывания процессора для мультиплексирования нескольких источников прерываний на одну или две обычно доступные линии ЦП. Если они реализованы как часть контроллера памяти памяти системы , прерывания отображаются в адресное пространство . [ нужна ссылка ]
В реализациях систем на кристалле (SoC) прерывания поступают от разных блоков чипа и обычно агрегируются в контроллере прерываний, присоединенном к одному или нескольким процессорам (в многоядерной системе). [23]
Общие IRQ
[ редактировать ]Несколько устройств могут использовать одну линию прерывания, запускаемую по фронту, если они предназначены для этого. Линия прерывания должна иметь понижающий или повышающий резистор, чтобы, когда она не активна, она переходила в неактивное состояние, которое является для нее состоянием по умолчанию. Устройства сигнализируют о прерывании, кратковременно переводя линию в состояние, отличное от состояния по умолчанию, и позволяют линии плавать (не активировать ее), когда не сигнализирует о прерывании. Этот тип подключения еще называют открытым коллектором . Затем по линии передаются все импульсы, генерируемые всеми устройствами. (Это аналогично шнуру на некоторых автобусах и троллейбусах, который любой пассажир может потянуть, чтобы подать сигнал водителю о том, что он просит об остановке.) Однако импульсы прерывания от разных устройств могут сливаться, если они происходят близко по времени. Чтобы избежать потери прерываний, ЦП должен запускаться по заднему фронту импульса (например, по нарастающему фронту, если линия подтянута вверх и установлена на низком уровне). После обнаружения прерывания ЦП должен проверить все устройства на предмет требований к обслуживанию.
Прерывания, запускаемые по фронту, не страдают от проблем, которые возникают у прерываний, запускаемых по уровню, при совместном использовании. Обслуживание устройства с низким приоритетом может быть отложено произвольно, в то время как прерывания от устройств с высоким приоритетом продолжают приниматься и обслуживаться. Если есть устройство, которое ЦП не знает, как обслуживать, и которое может вызывать ложные прерывания, оно не будет мешать передаче сигналов прерываний других устройств. Однако прерывание, вызванное фронтом, легко пропустить - например, когда прерывания маскируются на определенный период - и если не существует какого-либо аппаратного защелки, записывающего событие, его невозможно восстановить. Эта проблема вызывала множество «зависаний» в аппаратном обеспечении ранних компьютеров, поскольку процессор не знал, что от него ожидается что-то сделать. Более современное оборудование часто имеет один или несколько регистров состояния прерываний, которые фиксируют запросы прерываний; хорошо написанный код обработки прерываний, управляемых фронтами, может проверять эти регистры, чтобы убедиться, что ни одно событие не пропущено.
Шина промышленной стандартной архитектуры (ISA) использует прерывания, запускаемые по фронту, не требуя, чтобы устройства могли совместно использовать линии IRQ, но все основные материнские платы ISA включают в себя подтягивающие резисторы на своих линиях IRQ, поэтому хорошо работающие устройства ISA, использующие линии IRQ, должны просто работай нормально. Параллельный порт также использует прерывания, запускаемые по фронту. Многие старые устройства предполагают, что они эксклюзивно используют линии IRQ, что делает их совместное использование электрически небезопасным.
Есть три способа поднять несколько устройств, «использующих одну и ту же линию». Во-первых, путем исключительной проводимости (переключения) или исключительного подключения (к контактам). Далее идет шина (все подключены к одной и той же линии прослушивания): карты на шине должны знать, когда им следует разговаривать, а когда нет (т. е. шина ISA). Разговор может быть инициирован двумя способами: защелкой накопления или логическими элементами. Логические элементы ожидают непрерывного потока данных, который отслеживается на предмет ключевых сигналов. Аккумуляторы срабатывают только тогда, когда удаленная сторона возбуждает ворота выше порогового значения, поэтому согласованная скорость не требуется. У каждого есть свои преимущества в скорости и расстоянии. Триггер, как правило, представляет собой метод обнаружения возбуждения: нарастающий фронт, спадающий фронт, порог ( осциллограф может запускать самые разные формы и условия).
Запуск программных прерываний должен быть встроен в программное обеспечение (как в ОС, так и в приложении). Приложение «C» имеет в заголовке таблицу триггеров (таблицу функций), о которой и приложение, и ОС знают и используют соответствующим образом, не связанную с аппаратным обеспечением. Однако не путайте это с аппаратными прерываниями, которые сигнализируют ЦП (ЦП выполняет программное обеспечение из таблицы функций, аналогично программным прерываниям).
Сложности с общим доступом к линиям прерывания.
[ редактировать ]Несколько устройств, совместно использующих линию прерывания (любого стиля запуска), действуют по отношению друг к другу как источники ложных прерываний. При наличии большого количества устройств на одной линии нагрузка по обслуживанию прерываний растет пропорционально квадрату количества устройств. Поэтому предпочтительно распределять устройства равномерно по доступным линиям прерываний. Нехватка линий прерывания является проблемой в старых конструкциях систем, где линии прерывания представляют собой отдельные физические проводники. Прерывания, сигнализируемые сообщениями, где линия прерывания является виртуальной, предпочтительны в новых системных архитектурах (таких как PCI Express ) и в значительной степени решают эту проблему.
Некоторые устройства с плохо разработанным интерфейсом программирования не позволяют определить, запросили ли они обслуживание. Они могут заблокироваться или иным образом плохо себя вести, если их обслужат, когда они этого не хотят. Такие устройства не допускают ложных прерываний, а значит, и совместного использования линии прерывания. Карты ISA , часто из-за дешевого дизайна и конструкции, печально известны этой проблемой. Такие устройства становятся все реже, поскольку аппаратная логика становится дешевле, а новые системные архитектуры требуют совместного использования прерываний.
Гибридный
[ редактировать ]Некоторые системы используют гибрид сигнализации, запускаемой по уровню и по фронту. Аппаратное обеспечение не только ищет фронт, но также проверяет, остается ли сигнал прерывания активным в течение определенного периода времени.
Обычно гибридное прерывание используется для входа NMI (немаскируемое прерывание). Поскольку NMI обычно сигнализируют о серьезных – или даже катастрофических – системных событиях, хорошая реализация этого сигнала пытается гарантировать, что прерывание действительно, проверяя, что оно остается активным в течение определенного периода времени. Этот двухэтапный подход помогает исключить влияние ложных прерываний на систему.
Сигнализированное сообщением
[ редактировать ]не Прерывание, сигнализируемое сообщением, использует физическую линию прерывания. Вместо этого устройство сигнализирует о своем запросе на обслуживание, отправляя короткое сообщение по какой-либо среде связи, обычно по компьютерной шине . Сообщение может быть типа, зарезервированного для прерываний, или какого-либо уже существующего типа, например записи в память.
Прерывания, сигнализируемые сообщением, ведут себя очень похоже на прерывания, запускаемые по фронту, в том смысле, что прерывание представляет собой мгновенный сигнал, а не постоянное состояние. Программное обеспечение для обработки прерываний обрабатывает эти два события практически одинаково. Обычно нескольким ожидающим прерываниям, сигнализируемым сообщением, с одним и тем же сообщением (одной и той же линией виртуального прерывания) разрешено объединяться, так же как могут сливаться близко расположенные прерывания, запускаемые по фронту.
, сигнализируемых сообщениями, Векторы прерываний могут быть общими в той степени, в которой может использоваться совместно используемая среда связи. Никаких дополнительных усилий не требуется.
Поскольку идентичность прерывания определяется набором битов данных и не требует отдельного физического проводника, можно эффективно обрабатывать гораздо больше различных прерываний. Это уменьшает потребность в совместном использовании. Сообщения о прерываниях также могут передаваться по последовательной шине, не требуя каких-либо дополнительных линий.
PCI Express , последовательная компьютерная шина, использует исключительно прерывания, сигнализируемые сообщениями .
Дверной звонок
[ редактировать ]В аналогии с кнопкой, применяемой к компьютерным системам , термин «дверной звонок» или «прерывание дверного звонка» часто используется для описания механизма, посредством которого система программного обеспечения может сигнализировать или уведомлять аппаратное устройство компьютера о том, что необходимо выполнить некоторую работу. Обычно программная система помещает данные в некоторые хорошо известные и взаимно согласованные ячейки памяти и «звонит в дверь», записывая их в другую ячейку памяти. Это другое место памяти часто называют областью дверного звонка, и в этой области может даже быть несколько дверных звонков, служащих разным целям. Именно этот акт записи в область памяти дверного звонка «звонит в звонок» и уведомляет аппаратное устройство о том, что данные готовы и ждут. Аппаратное устройство теперь будет знать, что данные действительны и с ними можно действовать. Обычно данные записываются на жесткий диск , отправляются по сети , шифруются и т. д.
Термин «прерывание дверного звонка» обычно употребляется неправильно . Оно похоже на прерывание, поскольку заставляет устройство выполнять некоторую работу; однако область дверного звонка иногда реализуется как опрашиваемая область, иногда область дверного звонка осуществляет запись в регистры физического устройства , а иногда область дверного звонка жестко связана непосредственно с регистрами физического устройства. При записи через регистры физического устройства или непосредственно в него это может привести к реальному прерыванию в центральном процессоре устройства ( ЦП ), если он есть.
Прерывания дверного звонка можно сравнить с прерываниями, сигнализированными сообщениями , поскольку они имеют некоторые сходства.
Мультипроцессорный IPI
[ редактировать ]В многопроцессорных системах процессор может отправить запрос на прерывание другому процессору через межпроцессорные прерывания. [час] (ИПИ).
Производительность
[ редактировать ]Прерывания обеспечивают низкие накладные расходы и хорошую задержку при низкой нагрузке, но значительно ухудшаются при высокой частоте прерываний, если не принять меры для предотвращения некоторых патологий. Явление, при котором общая производительность системы серьезно снижается из-за чрезмерного количества времени, затрачиваемого на обработку прерываний, называется штормом прерываний .
Существуют различные формы блокировки , когда система тратит все свое время на обработку прерываний, исключая выполнение других необходимых задач. В экстремальных условиях большое количество прерываний (например, очень высокий сетевой трафик) может полностью остановить работу системы. Чтобы избежать таких проблем, операционная система должна планировать обработку сетевых прерываний так же тщательно, как и выполнение процессов. [24]
При использовании многоядерных процессоров дополнительное повышение производительности обработки прерываний может быть достигнуто за счет масштабирования на стороне приема (RSS) при сетевых карт с несколькими очередями использовании . Такие сетевые карты предоставляют несколько очередей приема , связанных с отдельными прерываниями; путем маршрутизации каждого из этих прерываний на разные ядра обработка запросов на прерывания, инициируемых сетевым трафиком, полученным одним сетевым адаптером, может быть распределена между несколькими ядрами. Распределение прерываний между ядрами может выполняться автоматически операционной системой, либо маршрутизация прерываний (обычно называемая IRQ affinity ) может быть настроена вручную. [25] [26]
Чисто программная реализация распределения принимаемого трафика, известная как управление приемом пакетов (RPS), распределяет полученный трафик между ядрами, расположенными на последующих этапах пути данных, как часть функций обработчика прерываний . Преимущества RPS перед RSS включают отсутствие требований к специальному оборудованию, более совершенные фильтры распределения трафика и снижение частоты прерываний, создаваемых сетевым адаптером. Недостатком является то, что RPS увеличивает частоту межпроцессорных прерываний (IPI). Управление потоком приема (RFS) развивает программный подход, учитывая локальность приложения ; дальнейшее повышение производительности достигается за счет обработки запросов на прерывание теми же ядрами, на которых конкретные сетевые пакеты будут потребляться целевым приложением. [25] [27] [28]
Типичное использование
[ редактировать ]Прерывания обычно используются для обслуживания аппаратных таймеров, передачи данных в и из хранилища (например, дискового ввода-вывода) и интерфейсов связи (например, UART , Ethernet ), обработки событий клавиатуры и мыши, а также для реагирования на любые другие события, зависящие от времени. в соответствии с требованиями прикладной системы. Немаскируемые прерывания обычно используются для ответа на запросы с высоким приоритетом, такие как тайм-ауты сторожевого таймера, сигналы отключения питания и прерывания .
Аппаратные таймеры часто используются для генерации периодических прерываний. В некоторых приложениях такие прерывания подсчитываются обработчиком прерываний для отслеживания абсолютного или затраченного времени или используются планировщиком задач ОС для управления выполнением запущенных процессов , или и то, и другое. Периодические прерывания также обычно используются для вызова выборки из устройств ввода, таких как аналого-цифровые преобразователи , интерфейсы инкрементных энкодеров и входы GPIO , а также для программирования устройств вывода, таких как цифро-аналоговые преобразователи , контроллеры двигателей и выходы GPIO.
Прерывание диска сигнализирует о завершении передачи данных с периферийного устройства диска или на него; это может привести к запуску процесса, ожидающего чтения или записи. Прерывание по отключению питания предсказывает неминуемую потерю мощности, позволяя компьютеру выполнить корректное выключение, пока для этого еще остается достаточно энергии. Прерывания клавиатуры обычно вызывают буферизацию нажатий клавиш для реализации опережающего ввода .
Прерывания иногда используются для эмуляции инструкций, которые не реализованы на некоторых компьютерах семейства продуктов. [29] Например, инструкции с плавающей запятой могут быть реализованы аппаратно в некоторых системах и эмулированы в недорогих системах. В последнем случае выполнение нереализованной инструкции с плавающей запятой вызовет прерывание исключения «недопустимой инструкции». Обработчик прерываний реализует функцию с плавающей запятой программно, а затем возвращается к прерванной программе, как если бы была выполнена аппаратно реализованная инструкция. [30] Это обеспечивает переносимость прикладного программного обеспечения по всей линейке.
Прерывания аналогичны сигналам , разница в том, что сигналы используются для межпроцессного взаимодействия (IPC), опосредуются ядром (возможно, через системные вызовы) и обрабатываются процессами, тогда как прерывания опосредуются процессором и обрабатываются ядром . Ядро может передать прерывание в качестве сигнала процессу, который его вызвал (типичные примеры: SIGSEGV , SIGBUS , SIGILL и SIGFPE ).
См. также
[ редактировать ]- Усовершенствованный программируемый контроллер прерываний (APIC)
- Вызов прерывания BIOS
- Программирование, управляемое событиями
- Обработка исключений
- INT (инструкция x86)
- Объединение прерываний
- Обработчик прерываний
- Задержка прерывания
- Прерывания в процессорах 65xx
- Список прерываний Ральфа Брауна
- Прерывания в архитектуре IBM System/360
- Система с таймером
- Автономная периферийная работа
Примечания
[ редактировать ]- ^ Операционная система может возобновить прерванный процесс или переключиться на другой процесс.
- ^ Обычно события прерывания, связанные с вводом-выводом, остаются ожидающими до тех пор, пока прерывание не будет разрешено или явно очищено, например, с помощью инструкции Test Pending Interruption ( TPI ) IBM System/370-XA и более поздних версий.
- ^ Например, когда биты маски программы в IBM System/360 равны 0 (отключено), соответствующие события переполнения и значимости не приводят к ожидающему прерыванию.
- ^ Регистр маски может быть одним регистром или несколькими регистрами, например, битами в PSW и другими битами в регистрах управления .
- ^ См. INT (инструкция x86).
- ^ Некоторые операционные системы могут восстанавливаться после серьезных ошибок, например, подкачки страницы из файла подкачки после неисправимой ошибки ECC на неизмененной странице.
- ^ Это может быть просто счетчик программ (ПК) , PSW или несколько регистров.
- ^ В некоторых операционных системах IBM известно как «похлопывание по плечу».
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Жаргонный файл, версия 4.4.7» . 27 октября 2003 г. Проверено 20 января 2022 г.
- ^ Перейти обратно: а б Джонатан Корбет; Алессандро Рубини; Грег Кроа-Хартман (2005). « Драйверы устройств Linux , третье издание, глава 10. Обработка прерываний» (PDF) . О'Рейли Медиа . п. 269 . Проверено 25 декабря 2014 г.
Дальше остается только почистить, запустить программные прерывания и вернуться к обычной работе. "Обычная работа" вполне могла измениться в результате прерывания (обработчик мог
wake_up
процесс, например), поэтому последнее, что происходит при возврате из прерывания, — это возможное перепланирование процессора. - ^ Розенталь, Скотт (май 1995 г.). «Основы прерываний» . Архивировано из оригинала 26 апреля 2016 г. Проверено 11 ноября 2010 г.
- ^ Кодд, Эдгар Ф. «Мультипрограммирование». Достижения в области компьютеров . 3:82 .
- ^ Белл, К. Гордон; Ньюэлл, Аллен (1971). Компьютерные структуры: чтения и примеры . МакГроу-Хилл. п. 46. ИСБН 9780070043572 . Проверено 18 февраля 2019 г.
- ^ Перейти обратно: а б Смозерман, Марк. «Прерывает» . Проверено 22 декабря 2021 г.
- ^ «Аппаратные прерывания» . Проверено 9 февраля 2014 г.
- ^ «Инструкции по прерыванию». Справочное руководство по компьютерной системе Control Data 3600 (PDF) . Корпорация Control Data. Июль 1964 г. стр. 4–6. 60021300.
- ^ Бай, Ин (2017). Разработка микроконтроллеров с MSP432: основы и приложения . ЦРК Пресс. п. 21. ISBN 978-1-4987-7298-3 . LCCN 2016020120 .
В системе Cortex-M4 прерывания и исключения имеют следующие свойства: ... Обычно один бит в регистре маски используется для маскировки (отключения) или демаскирования (включения) определенных прерываний/исключений.
- ^ «Уровни прерываний» . Проверено 17 ноября 2023 г.
- ^ Ли, Цин; Яо, Кэролайн (2003). Концепции реального времени для встраиваемых систем . ЦРК Пресс. п. 163. ИСБН 1482280825 .
- ^ «Аппаратные исключения» . docs.microsoft.com . 3 августа 2021 г.
- ^ Перейти обратно: а б Хайд, Рэндалл (1996). «Глава семнадцатая: Прерывания, ловушки и исключения (Часть 1)» . Искусство программирования на языке ассемблера . Проверено 22 декабря 2021 г.
Концепция прерывания с годами расширилась. Семейство 80x86 только усугубило путаницу вокруг прерываний, представив инструкцию int (программное прерывание). Действительно, разные производители использовали такие термины, как исключения, сбои, прерывания, ловушки и прерывания, для описания явлений, обсуждаемых в этой главе. К сожалению, нет четкого консенсуса относительно точного значения этих терминов. Разные авторы используют в своих целях разные термины.
- ^ Перейти обратно: а б «Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 1: Базовая архитектура» . стр. 6–12 Том. 1 . Проверено 22 декабря 2021 г.
- ^ Перейти обратно: а б Брайант, Рэндал Э.; О'Халларон, Дэвид Р. (2016). «8.1.2 Классы исключений». Компьютерные системы: взгляд программиста (Третье, Глобальное изд.). Харлоу: Пирсон. ISBN 978-1-292-10176-7 .
- ^ Перейти обратно: а б «Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 3A: Руководство по системному программированию, часть 1» . п. 6-5 Том. 3А . Проверено 22 декабря 2021 г.
- ^ «Обработка исключений» . Developer.arm.com . Руководство программиста серии ARM Cortex-A для ARMv7-A . Проверено 21 января 2022 г.
- ^ «Виды исключений» . Developer.arm.com . Руководство программиста серии ARM Cortex-A для ARMv7-A . Проверено 22 декабря 2021 г.
- ^ Справочное руководство по компьютерным системам Control Data 6400/6500/6600 (PDF) . Редакция К. Control Data Corporation . 11 октября 1966 года. 60021300К . Проверено 17 мая 2023 г.
- ^ Перейти обратно: а б Принципы работы IBM System/360 (PDF) (Восьмое изд.). ИБМ . Сентябрь 1968 г. с. 77. А22-6821-7.
- ^ Справочник по процессору PDP-11 PDP11/04//34a/44/60/70 (PDF) . Корпорация цифрового оборудования . 1979. стр. 128–131.
- ^ Справочник по периферийным устройствам и интерфейсам PDP-11 (PDF) . Корпорация цифрового оборудования . п. 4.
- ^ Ю, Джозеф (01.01.2010), Ю, Джозеф (ред.), «ГЛАВА 2. Обзор Cortex-M3» , Полное руководство по ARM Cortex-M3 (второе издание) , Oxford: Newnes, стр. . 11–24, номер домена : 10.1016/b978-1-85617-963-8.00005-3 , ISBN. 978-1-85617-963-8 , получено 11 октября 2023 г.
- ^ Могул, Джеффри С.; Рамакришнан, К.К. (1997). «Устранение блокировки приема в ядре, управляемом прерываниями» . Транзакции ACM в компьютерных системах . 15 (3): 217–252. дои : 10.1145/263326.263335 . S2CID 215749380 . Проверено 11 ноября 2010 г.
- ^ Перейти обратно: а б Том Герберт; Виллем де Брейн (9 мая 2014 г.). «Документация/сеть/масштабирование.txt» . Документация по ядру Linux . ядро.орг . Проверено 16 ноября 2014 г.
- ^ «Техническое описание семейства контроллеров Gigabit Ethernet Intel 82574» (PDF) . Интел . Июнь 2014. с. 1 . Проверено 16 ноября 2014 г.
- ^ Джонатан Корбет (17 ноября 2009 г.). «Управление приемом пакетов» . LWN.net . Проверено 16 ноября 2014 г.
- ^ Джейк Эдж (7 апреля 2010 г.). «Управление потоком приема» . LWN.net . Проверено 16 ноября 2014 г.
- ^ Тусу, Шалеш; и др. «Патент США 5632028 А» . Гугл Патенты . Проверено 13 августа 2017 г.
- ^ Корпорация Альтера (2009 г.). Справочник процессоров Nios II (PDF) . п. 4 . Проверено 13 августа 2017 г.
Внешние ссылки
[ редактировать ]- Прерывания стали проще
- Прерывания для микроконтроллера Microchip PIC
- Таблица прерываний IBM PC
- University of Alberta CMPUT 296 Concrete Computing Notes on Interrupts , заархивировано из оригинала 13 марта 2012 г.
- Прерывания смены выводов Arduino — статья Адитьяпратапа Сингха