Разлика между прекъсване и изключение

Разлика между прекъсване и изключение
Разлика между прекъсване и изключение

Видео: Разлика между прекъсване и изключение

Видео: Разлика между прекъсване и изключение
Видео: Взаимодействие генов. 2024, Юли
Anonim

Прекъсване срещу изключение

Във всеки компютър, по време на нормалното му изпълнение на програма, може да има събития, които могат да доведат до временно спиране на процесора. Събития като това се наричат прекъсвания. Прекъсванията могат да бъдат причинени от софтуерни или хардуерни грешки. Хардуерните прекъсвания се наричат (просто) прекъсвания, докато софтуерните прекъсвания се наричат изключения. След като бъде повдигнато прекъсване (софтуерно или хардуерно), управлението се прехвърля към специална подпрограма, наречена ISR (Interrupt Service Routine), която може да се справи с условията, предизвикани от прекъсването.

Какво е прекъсване?

Терминът прекъсване обикновено е запазен за хардуерни прекъсвания. Те са прекъсвания на управлението на програмата, причинени от външни хардуерни събития. Тук външен означава външен за процесора. Хардуерните прекъсвания обикновено идват от много различни източници като таймер чип, периферни устройства (клавиатури, мишки и т.н.), I/O портове (сериен, паралелен и т.н.), дискови устройства, CMOS часовник, разширителни карти (звукова карта, видео карта и т.н.). Това означава, че хардуерните прекъсвания почти никога не възникват поради някакво събитие, свързано с изпълняващата програма. Например, събитие като натискане на клавиш на клавиатурата от потребителя или изчакване на вътрешен хардуерен таймер може да предизвика този вид прекъсване и може да информира процесора, че определено устройство се нуждае от внимание. В подобна ситуация процесорът ще спре това, което някога е правил (т.е. поставя на пауза текущата програма), предоставя услугата, изисквана от устройството, и ще се върне към нормалната програма. Когато се появят хардуерни прекъсвания и процесорът стартира ISR, други хардуерни прекъсвания се дезактивират (например в 80×86 машини). Ако имате нужда от други хардуерни прекъсвания, докато ISR работи, трябва да направите това изрично, като изчистите флага за прекъсване (със sti инструкция). При машини 80×86 изчистването на флага за прекъсване ще засегне само хардуерните прекъсвания.

Какво са изключения?

Изключение е софтуерно прекъсване, което може да бъде идентифицирано като специална рутинна манипулатор. Изключението може да бъде идентифицирано като автоматично възникнало прихващане (прихващането може да бъде идентифицирано като прехвърляне на управление, което се инициира от програмиста). По принцип няма специфични инструкции, свързани с изключенията (капаните се генерират с помощта на специфична инструкция). И така, възниква изключение поради „изключително“състояние, което възниква по време на изпълнение на програмата. Например деление на нула, изпълнение на незаконен операционен код или грешка, свързана с паметта, може да доведе до изключения. Всеки път, когато се повдигне изключение, процесорът временно спира програмата, която изпълняваше, и стартира ISR. ISR ще съдържа какво да правите с изключението. Може да коригира проблема или ако не е възможно, може да прекъсне програмата елегантно, като отпечата подходящо съобщение за грешка. Въпреки че конкретна инструкция не предизвиква изключение, изключение винаги ще бъде причинено от инструкция. Например грешка при деление на нула може да възникне само по време на изпълнение на инструкцията за деление.

Каква е разликата между прекъсване и изключение?

Прекъсванията са хардуерни прекъсвания, докато изключенията са софтуерни прекъсвания. Появата на хардуерни прекъсвания обикновено деактивира други хардуерни прекъсвания, но това не е вярно за изключенията. Ако трябва да забраните хардуерни прекъсвания, докато не бъде обслужено изключение, трябва изрично да изчистите флага за прекъсване. И обикновено флагът за прекъсване на компютъра засяга (хардуерните) прекъсвания, за разлика от изключенията. Това означава, че изчистването на този флаг няма да предотврати изключения.

Препоръчано: