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