Interrupció vs Trap
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 aquests 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 o trampes. Una excepció és una interrupció de programari generada automàticament, mentre que una trampa és una interrupció invocada pel programari iniciada pel programador. Un cop generada una interrupció (programari o maquinari), el control es transfereix a una subrutina especial anomenada ISR (Interrupt Service Routine) que pot gestionar les condicions que genera la interrupció.
Què és una 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, aturarà el programa actual), proporciona el servei que requereix el dispositiu i tornarà al programa normal. Quan es produeixen interrupcions de maquinari i la CPU inicia l'ISR, es desactiven altres interrupcions de maquinari (p.g. 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 una trampa?
Una trampa es pot identificar com una transferència de control, que s'inicia el programador. El terme Trap s'utilitza de manera intercanviable amb el terme Excepció (que és una interrupció de programari que es produeix automàticament). Però alguns poden argumentar que una trampa és simplement una trucada especial de subrutina. Per tant, entren a la categoria d'interrupcions invocades per programari. Per exemple, en màquines 80×86, un programador pot utilitzar la instrucció int per iniciar una trampa. Com que una trampa sempre és incondicional, el control sempre es transferirà a la subrutina associada a la trampa. La instrucció exacta, que invoca la rutina per manejar la trampa s'identifica fàcilment perquè s'utilitza una instrucció explícita per especificar una trampa.
Quina diferència hi ha entre interrupció i trampa?
Les interrupcions són interrupcions de maquinari, mentre que les trampes són interrupcions invocades per programari. Les interrupcions de maquinari solen desactivar altres interrupcions de maquinari, però això no és cert per a les trampes. Si heu de no permetre les interrupcions de maquinari fins que es distribueixi una trampa, heu d'esborrar explícitament la marca d'interrupció. I normalment la bandera d'interrupció de l'ordinador afecta les interrupcions (de maquinari) en lloc de les trampes. Això vol dir que netejar aquesta bandera no evitarà les trampes. A diferència de les trampes, les interrupcions haurien de preservar l'estat anterior de la CPU.