В чем разница между ловушкой и прерыванием? - программирование
Подтвердить что ты не робот

В чем разница между ловушкой и прерыванием?

В чем разница между ловушкой и прерыванием?

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

4b9b3361

Ответ 1

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

interrupt - это то, что генерируется аппаратным обеспечением (такие устройства, как жесткий диск, графическая карта, I/O и т.д.). Они асинхронны (т.е. Они не происходят в предсказуемых местах в пользовательском коде) или "пассивны", так как обработчик прерывания должен дождаться их завершения.

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

Ответ 2

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

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

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

Векторизованные события

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

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

Прерывания

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

Исключения

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

Классификации исключений

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

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

Trap

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

Fault

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

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

Прервать

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

Пограничные случаи

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

Ответ 3

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

Исходя из разницы между ловушкой и прерыванием:

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

Где

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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