Interrupció vs excepció
En qualsevol ordinador, durant la seva execució normal d'un programa, podria haver-hi esdeveniments que poden fer que la CPU s'atura temporalment. Esdeveniments com aquest s'anomenen interrupcions. Les interrupcions poden ser causades per errors de programari o de maquinari. Les interrupcions de maquinari s'anomenen (simplement) Interrupcions, mentre que les interrupcions de programari s'anomenen Excepcions. Un cop s'ha generat una interrupció (programari o maquinari), el control es transfereix a una subrutina especial anomenada ISR (Interrupt Service Routine) que pot gestionar les condicions generades per la interrupció.
Què és la interrupció?
El terme interrupció normalment es reserva per a interrupcions de maquinari. Són interrupcions de control del programa causades per esdeveniments de maquinari extern. Aquí, extern significa extern a la CPU. Les interrupcions de maquinari solen venir de moltes fonts diferents, com ara xip de temporitzador, dispositius perifèrics (teclats, ratolí, etc.), ports d'E/S (sèrie, paral·lel, etc.), unitats de disc, rellotge CMOS, targetes d'expansió (targeta de so, vídeo). targeta, etc.). Això significa que les interrupcions de maquinari gairebé mai no es produeixen a causa d'algun esdeveniment relacionat amb el programa en execució. Per exemple, un esdeveniment com la pressió d'una tecla al teclat per part de l'usuari o un temps d'espera del temporitzador de maquinari intern pot provocar aquest tipus d'interrupció i pot informar a la CPU que un determinat dispositiu necessita una mica d'atenció. En una situació com aquesta, la CPU aturarà el que estigués fent (és a dir, posarà en pausa el programa actual), proporcionarà el servei requerit pel dispositiu i tornarà al programa normal. Quan es produeixen interrupcions de maquinari i la CPU inicia l'ISR, altres interrupcions de maquinari es desactiven (per exemple, en màquines 80×86). Si necessiteu que es produeixin altres interrupcions de maquinari mentre s'executa l'ISR, haureu de fer-ho de manera explícita esborrant el senyalador d'interrupció (amb la instrucció sti). En màquines 80×86, esborrar la marca d'interrupció només afectarà les interrupcions de maquinari.
Què són les excepcions?
L'excepció és una interrupció de programari, que es pot identificar com una rutina especial del gestor. L'excepció es pot identificar com una trampa que es produeix automàticament (una trampa es pot identificar com una transferència de control, que s'inicia el programador). En general, no hi ha instruccions específiques associades a excepcions (les trampes es generen mitjançant una instrucció específica). Per tant, es produeix una excepció a causa d'una condició "excepcional" que es produeix durant l'execució del programa. Per exemple, la divisió per zero, l'execució d'un codi operatiu il·legal o un error relacionat amb la memòria podria provocar excepcions. Sempre que es produeix una excepció, la CPU suspèn temporalment el programa que estava executant i inicia l'ISR. ISR inclourà què fer amb l'excepció. Pot corregir el problema o, si no és possible, pot avortar el programa amb gràcia imprimint un missatge d'error adequat. Tot i que una instrucció específica no provoca una excepció, una excepció sempre serà causada per una instrucció. Per exemple, l'error de divisió per zero només es pot produir durant l'execució de la instrucció de divisió.
Quina diferència hi ha entre interrupció i excepció?
Les interrupcions són interrupcions de maquinari, mentre que les excepcions són interrupcions de programari. Les interrupcions de maquinari solen desactivar altres interrupcions de maquinari, però això no és cert per a les excepcions. Si heu de no permetre les interrupcions de maquinari fins que no es presenti una excepció, haureu d'esborrar explícitament la marca d'interrupció. I normalment la marca d'interrupció de l'ordinador afecta les interrupcions (de maquinari) en lloc de les excepcions. Això vol dir que esborrar aquesta marca no evitarà excepcions.