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