В чем разница между прерыванием и прерыванием? - PullRequest
133 голосов
/ 30 июня 2010

В чем разница между Trap и Interrupt?

Если терминология различна для разных систем, то что они означают для x86?

Ответы [ 9 ]

172 голосов
/ 30 июня 2010

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

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

78 голосов
/ 01 июня 2016

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

Intel x86 определяет две перекрывающиеся категории: векторные события ( прерывания против исключения ) и классы исключений ( ошибки против ловушки против 1018 * прерывает *).

Все цитаты в этом посте относятся к апрельской версии Руководства разработчика программного обеспечения Intel . Для (окончательной и сложной) точки зрения x86 я рекомендую прочитать главу SDM об обработке прерываний и исключений.

Векторные мероприятия

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

Исключения и прерывания имеют идентификатор, называемый вектором, который определяет, к какому обработчику прерываний переходит процессор. Обработчики прерываний описаны в таблице дескрипторов прерываний.

Прерывания

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

Исключения

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

Исключительные классификации

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

Сводка: прерывания увеличивают указатель инструкции, ошибки не делают, а отменяют 'взрывают'.

Ловушка

A trap - исключение, о котором сообщается сразу после выполнение инструкции по отлову. Ловушки позволяют выполнить Программа или задача должна быть продолжена без потери непрерывности программы. Адрес возврата обработчика ловушек указывает на инструкцию выполняется после инструкции по отлову.

Fault

A неисправность - это исключение, которое, как правило, может быть исправлено и которое, после исправления позволяет перезапустить программу без потери непрерывность. Когда сообщается о сбое, процессор восстанавливает состояние машины до состояния до начала выполнения ошибочная инструкция. Обратный адрес (сохраненное содержимое CS и Регистры EIP) для обработчика ошибок указывает на ошибку инструкция, а не инструкция после ошибки инструкция.

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

Прервать

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

Edge Cases

Прерывания, вызываемые программным обеспечением (инициируемые инструкцией INT), ведут себя как ловушка-подобная манераИнструкция завершается до того, как процессор сохраняет свое состояние и переходит к обработчику прерываний.

8 голосов
/ 19 июня 2011

Вообще говоря, такие термины, как исключения, ошибки, прерывания, прерывания и прерывания все означают одно и то же и называются «прерываниями».

Приближается кразница между Trap и Interrupt:

Trap: инициируется программистом и ожидает передачи управления в специальную процедуру обработчика.(Например: 80x86 INT инструкция является хорошим примером)

Где как

Прерывание (аппаратное обеспечение): является прерыванием управления программой на основевнешнее аппаратное событие, внешнее по отношению к ЦП (например, нажатие клавиши на клавиатуре или тайм-аут на микросхеме таймера)

6 голосов
/ 30 июня 2010

A trap - это особый тип прерывания , который обычно называют программным прерыванием . прерывание - это более общий термин, который охватывает как аппаратные прерывания (прерывания от аппаратных устройств), так и программные прерывания (прерывания от программного обеспечения, такие как traps).

3 голосов
/ 30 июня 2010

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

2 голосов
/ 17 февраля 2015

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

2 голосов
/ 28 августа 2014

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

2 голосов
/ 13 июля 2014

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

1 голос
/ 24 января 2015

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

...