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