Прерывание против ловушки
На любом компьютере во время обычного выполнения программы могут быть события, которые могут привести к временной остановке ЦП. Подобные события называются прерываниями. Прерывания могут быть вызваны программными или аппаратными сбоями. Аппаратные прерывания называются (просто) прерываниями, а программные прерывания называются исключениями или прерываниями. Исключением является автоматически генерируемое программное прерывание, в то время как Trap - это программно-вызываемое прерывание, инициированное программистом. При возникновении прерывания (программного или аппаратного) управление передается в специальную подпрограмму, называемую ISR (подпрограмма обслуживания прерываний), которая может обрабатывать условия, возникающие из-за прерывания..
Что такое прерывание?
Термин Прерывание обычно зарезервирован для аппаратных прерываний.. Это прерывания управления программой, вызванные внешними аппаратными событиями. Здесь внешний означает внешний по отношению к процессору. Аппаратные прерывания обычно поступают из разных источников, таких как микросхема таймера, периферийные устройства (клавиатура, мышь и т. Д.), Порты ввода / вывода (последовательный, параллельный и т. Д.), Дисководы, часы CMOS, карты расширения (звуковая карта, видео). карта и т. д.). Это означает, что аппаратные прерывания почти никогда не происходят из-за какого-либо события, связанного с выполняющейся программой. Например, событие, такое как нажатие клавиши на клавиатуре пользователем, или тайм-аут внутреннего аппаратного таймера, может вызвать прерывания такого рода и может информировать ЦП о том, что определенное устройство требует некоторого внимания. В подобной ситуации процессор остановит все, что он делал (то есть приостановит текущую программу), предоставит услугу, требуемую для устройства, и вернется к нормальной программе. Когда происходят аппаратные прерывания и CPU запускает ISR, другие аппаратные прерывания отключаются (например, на машинах 80 × 86). Если вам нужно, чтобы другие аппаратные прерывания происходили во время работы ISR, вам нужно сделать это явно, сбросив флаг прерывания (с помощью STI инструкция). В машинах 80 × 86 очистка флага прерывания будет влиять только на аппаратные прерывания.
Что такое ловушка?
Ловушка может быть идентифицирована как передача управления, которая инициируется программистом. Термин Ловушка используется взаимозаменяемо с термином Исключение (которое является автоматически возникающим программным прерыванием). Но некоторые могут утверждать, что ловушка - это просто специальный вызов подпрограммы. Таким образом, они попадают в категорию программных прерываний. Например, на машинах 80 × 86 программист может использовать ИНТ инструкция, чтобы начать ловушку. Поскольку ловушка всегда безусловна, управление всегда будет передаваться подпрограмме, связанной с ловушкой. Точная инструкция, которая вызывает подпрограмму для обработки ловушки, легко идентифицируется, потому что для указания ловушки используется явная инструкция.
В чем разница между прерыванием и ловушкой?
Прерывания - это аппаратные прерывания, а прерывания - это программные прерывания. Появление аппаратных прерываний обычно отключает другие аппаратные прерывания, но это не так для ловушек. Если вам нужно запретить аппаратные прерывания до тех пор, пока не будет обработана ловушка, вам необходимо явно сбросить флаг прерывания. И обычно флаг прерывания на компьютере влияет на (аппаратные) прерывания, а не на прерывания. Это означает, что очистка этого флага не предотвратит ловушки. В отличие от ловушек, прерывания должны сохранять предыдущее состояние процессора.