Ответы:
Ловушка представляет собой исключение в пользовательском процессе. Это вызвано делением на ноль или неправильным доступом к памяти. Это также обычный способ вызова подпрограммы ядра ( системный вызов ), потому что она запускается с более высоким приоритетом, чем пользовательский код. Обработка синхронная (поэтому код пользователя приостановлен и продолжается после этого). В некотором смысле они «активны» - большую часть времени код ожидает, что ловушка произойдет, и полагается на этот факт.
Прерывания является то генерируется аппаратными средствами (устройства , такие как жесткий диск, видеокарта, порты ввода / вывода, и т.д.). Это асинхронные (то есть они не происходят в предсказуемых местах в пользовательском коде) или «пассивные», поскольку обработчик прерываний должен ждать, пока они не произойдут.
Вы также можете видеть прерывание как своего рода внутреннее прерывание ЦП, поскольку обработчик обработчика прерываний выглядит как обработчик прерываний (регистры и указатели стека сохранены, имеется переключение контекста, выполнение может возобновиться в некоторых случаях, когда оно было остановлено) ,
Ловушки и прерывания тесно связаны между собой. Ловушки - это тип исключения , а исключения похожи на прерывания.
Intel x86 определяет две перекрывающиеся категории: векторные события ( прерывания против исключений ) и классы исключений ( ошибки против ловушек против прерываний ).
Все цитаты в этом посте взяты из версии Руководства разработчика программного обеспечения Intel за апрель 2016 года . Для (окончательной и сложной) точки зрения x86 я рекомендую прочитать главу SDM об обработке прерываний и исключений.
Векторные события ( прерывания и исключения ) приводят к тому, что процессор переходит в обработчик прерываний после сохранения большей части состояния процессора (достаточно, чтобы выполнение могло продолжаться с этого момента позже).
Исключения и прерывания имеют идентификатор, называемый вектором, который определяет, к какому обработчику прерываний переходит процессор. Обработчики прерываний описаны в таблице дескрипторов прерываний.
Прерывания происходят в случайные моменты времени во время выполнения программы в ответ на сигналы от оборудования. Системное оборудование использует прерывания для обработки внешних по отношению к процессору событий, таких как запросы на обслуживание периферийных устройств. Программное обеспечение также может генерировать прерывания, выполняя инструкцию INT n.
Исключения возникают, когда процессор обнаруживает состояние ошибки при выполнении инструкции, например деление на ноль. Процессор обнаруживает различные состояния ошибок, включая нарушения защиты, сбои страниц и внутренние сбои машины.
Исключения классифицируются как неисправности , ловушка или Прерывают в зависимости от того , как они сообщили , и является ли команда , которая вызвала исключение может быть перезапущена без потери программы или непрерывности задачи.
Сводка: ловушки увеличивают указатель инструкции, ошибки - нет, а прерывает 'взорвать'.
Ловушка представляет собой исключение , которое сообщается сразу после выполнения команды отлова. Ловушки позволяют продолжить выполнение программы или задачи без потери непрерывности программы. Адрес возврата для обработчика прерываний указывает на инструкцию, которая будет выполнена после инструкции прерывания.
Неисправность является исключением , что в общем случае может быть исправлена , и что после того , как исправлено, позволяет программе быть перезапущена без потери непрерывности. Когда сообщается о сбое, процессор восстанавливает состояние машины до состояния до начала выполнения команды сбоя. Адрес возврата (сохраненное содержимое регистров CS и EIP) для обработчика сбоев указывает на инструкцию сбоя, а не на инструкцию, следующую за инструкцией сбоя.
Пример: ошибка страницы часто исправима. Часть адресного пространства приложения могла быть выгружена на диск из оперативной памяти. Приложение вызовет ошибку страницы, когда оно попытается получить доступ к памяти, которая была выгружена. Ядро может перенести эту память с диска на оперативную память и передать управление обратно в приложение. Приложение продолжит работу с того места, где оно было остановлено (по ошибочной инструкции, которая обращалась к выгруженной памяти), но на этот раз доступ к памяти должен завершиться без сбоев.
Преждевременное прекращение является исключением , что не всегда сообщать точное расположение команды вызывает исключение и не допускает повторный запуск программы или задачи, вызвавшей исключение. Прерывания используются для сообщения о серьезных ошибках, таких как аппаратные ошибки и несогласованные или недопустимые значения в системных таблицах.
Вызываемые программным обеспечением прерывания (запускаемые инструкцией INT) ведут себя подобно ловушкам. Инструкция завершается до того, как процессор сохраняет свое состояние и переходит к обработчику прерываний.
Вообще говоря, такие термины , как исключения, разломы, Прерывает, ловушки и Прерывания всего это означает тот же самое , и называется «Прерывание».
В связи с разницей между Trap и Interrupt:
Ловушка: инициируется программистом и ожидает передачи управления в специальную процедуру обработчика. (Например, инструкция 80x86 INT является хорошим примером)
В то время как
Прерывание (аппаратное обеспечение): прерывание управления программой, основанное на внешнем аппаратном событии, внешнем по отношению к ЦП (например, нажатие клавиши на клавиатуре или тайм-аут на микросхеме таймера)
Ловушка представляет собой особый вид прерывания , которое обычно называют программное прерывание . Прерывание представляет собой более общий термин , который охватывает как аппаратные прерывания (перебивает от аппаратных устройств) и программные прерывания (перебивает от программного обеспечения, такие как ловушки ).
Ловушка вызывается программами, подобными коду, и используется, например, для вызова подпрограмм ОС (т.е. обычно синхронно). Прерывание вызывается событиями (много раз аппаратными, такими как сетевая карта, получившая данные, или таймером ЦП), и - как следует из названия - прерывает нормальный поток управления, поскольку ЦП должен переключиться на процедуру драйвера для обработки событие.
Прерывание - это аппаратное изменение потока в системе. Обработчик прерывания вызывается для устранения причины прерывания; Затем управление возвращается в прерванный контекст и инструкцию. Ловушка - это сгенерированное программным обеспечением прерывание. Прерывание может использоваться, чтобы сигнализировать о завершении ввода-вывода, чтобы устранить необходимость опроса устройства. Ловушка может использоваться для вызова подпрограмм операционной системы или для обнаружения арифметических ошибок.
Я думаю, что ловушки вызваны выполнением текущей инструкции, и поэтому они называются синхронными событиями. где прерывания вызваны независимой командой, выполняющейся в процессоре, которая связана с внешними событиями и, таким образом, называется асинхронной.
Прерывания - это аппаратные прерывания, а прерывания - это программные прерывания. Появление аппаратных прерываний обычно отключает другие аппаратные прерывания, но это не так для ловушек. Если вам нужно запретить аппаратные прерывания до тех пор, пока не будет обработана ловушка, вам необходимо явно сбросить флаг прерывания. И обычно флаг прерывания на компьютере влияет на (аппаратные) прерывания, а не на прерывания. Это означает, что очистка этого флага не предотвратит ловушки. В отличие от прерываний, прерывания должны сохранять предыдущее состояние процессора.
Ловушка - это программное прерывание. Если вы пишете программу, в которой вы объявляете переменную с делением на нулевое значение, то она обрабатывается как ловушка. Когда вы запускаете эту программу, она выдает одну и ту же ошибку одновременно. Системный вызов специальная версия ловушки, в которой программа запрашивает у нужного ей сервиса. В случае прерывания (общее слово для аппаратных прерываний), например, ошибки ввода-вывода, процессор прерывается в случайное время и, конечно же, это не ошибка наших программистов. Это аппаратное обеспечение, которое их вызывает.