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



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



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

704   9  

9 ответов:

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

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

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

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

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

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

Vectored Events

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

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

перебивает

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

исключения

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

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

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

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

ловушка

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

ошибка

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

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

отмена

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

Края Делам

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

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

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

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

где

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

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

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

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

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

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

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

Comments

    Ничего не найдено.