# Rutina de tractament d'Interrupció

En la programació de sistemes informàtics, un gestor d'interrupcions, també conegut com a rutina de tractament d'interrupció o ISR, és una funció especial del firmware d'un microcontrolador, del sistema operatiu o del driver d'un dispositiu. L'execució d'aquesta funció es desencadena per la recepció d'una interrupció. En general, les interrupcions i els seus gestors s'utilitzen per gestionar condicions d'alta prioritat que requereixen la interrupció del codi actual que el processador està executant.
Els gestors d'interrupcions tenen una multitud de funcions, que varien en funció de la raó per la cual es va generar la interrupció i la velocitat en la que el gestor d'interrupcions completa la seva tasca. Per exemple, prémer una tecla d'un teclat d'ordinador, o moure el ratolí, provoca interrupcions que requereixen el gestor d'interrupcions per llegir quina tecla s'ha pressionat, o la posició del ratolí, per a copiar la informació associada a la memòria de l'ordinador.

## Visió General

En diversos sistemes operatius -Linux, Unix, Mac OS X, Microsoft Windows, z/OS, i alguns altres sistemes operatius utilitzats al passat- els gestors d'interrupcions es divideixen en dues parts: gestor d'interrupció de primer nivell (FLIH) i el gestor d'interrupció de segon nivell (SLIH). Els gestors d'interrupció de primer nivell també són coneguts com a gestors d'interrupció ràpids o gestors d'interrupció tipus hard, mentres que els gestors d'interrupció de segon nivell són coneguts com a gestors d'interrupció lents o gestors d'interrupció tipus soft.
Un gestor d'interrupció de primer nivell implementa, com a mínim, una plataforma específica de control d'interrupcions semblants a les rutines d'interrupció. En resposta a una interrupció, no hi ha un canvi de context, i el codi de la interrupció és carregat i executat. La feina d'un gestor d'interrupció de primer nivell és donar un servei ràpid a l'interrupció, o gravar la informació crítica d'una plataforma específica que només está disponible en el moment de la interrupció, per a programar l'execució d'un gestor d'interrupció de segon nivell per a la seva posterior manipulació al llarg de la durada d'interrupció.
Els gestors d'interrupció de primer nivell causen una fluctuació de temps de latència en l'execució del procés. La reducció d'aquesta latència és molt important per als sistemes operatius en temps real, ja que han de mantenir la garantia de que l'execució d'un codi específic s'ha de completar en un temps acotat. Per reduir la latencia i per reduir la potencial pèrdua de dades, els programadors intenten minimitzar el temps d'execució del gestor d'interrupcions de segon nivell, movent´se tant com sigui possible al gestor de primer nivell. Amb la velocitat de les computadores modernes, el gestor de primer nivell pot implementar tots els dispositius i el maneig de les plataformes específiques, i utilitzar un gestor de segon nivell per a la seva posterior manipulació.
Els gestors d'interrupció de primer nivell solen enmascarar la seva interrupció associada fins que completin la seva execució. Un (inusual) gestor de primer nivell que desenmascara la seva interrupció assosiada abans que aquesta acabi, s'anomena un gestor d'interrupcio de reentrada. Els gestors d'interrupció de reentrada poden causar un desbordament de la pila pel mateix vector d'interrupció, pel que se sol evitar-se el seu ús. En un sistema d'interrupció de prioritat, el gestor de primer nivell també enmascara breument altes interrupcions d'igual o menor prioritat.
El gestor d'interrupció de segon nivell completa les tasques de processament llarg d'interrupció de manera similar a un procés. Els gestors de segon nivell o bé tenen un fil del nucli dedicat per a cada controlador, o són executats per un grup de subprocessos de treball del nucli. Aquests fils esperen en una cua d'execució del sistema operatiu fins que el processador finalment els executa. Els gestors de segon nivell poden tenir un temps d'execució llarg, i per tant, solen estar programats de manera similar als processos.

## Referències

* 1 2 The Linux Kernel Module Programming Guide, Chapter 12. Interrupt Handlers.
* 1 2 3 Linux Device Drivers, Chapter 10, Interrupt Handling, 27 de Gener, 2005.