Una interrupción es un mecanismo que permite ejecutar un bloque de
instrucciones interrumpiendo la ejecución de un programa, y luego restablecer
la ejecución del mismo sin afectarlo directamente. De este modo un programa
puede ser interrumpido temporalmente para atender alguna necesidad urgente
del computador y luego continuar su ejecución como si nada hubiera pasado.
Generalmente se aplica para realizar tareas elementales asincrónicas en el
computador tales como responder al teclado, escribir en la pantalla, leer y
escribir archivos. Podemos considerar una tarea asincrónica como aquella que
es solicitada sin previo aviso y aleatoriamente desde el punto de vista del
computador. Tomemos el caso de la operación Ctrl-Alt-Supr. En Windows tiene
el efecto de que aparece en pantalla una lista de los procesos y ventanas en
ejecución en el computador. En cambio en el Sistema Operativo DOS cuando el
usuario presiona simultáneamente dichas teclas el computador procede a
reinicializarse, aunque pueda estar ocupado ejecutando un programa en ese
instante. Vale decir fuerza obligadamente a que el computador se reinicialice.
Ya sea en el sistema Windows o en DOS, el computador no está constantemente
monitoreando el teclado para ver si el usuario ha solicitado un Ctrl-Alt-Del, ya
que en ese caso consumiría mucho tiempo de proceso en ello y por ende la
capacidad de proceso se vería significativamente afectada. La solución
empleada es una interrupción.
Luego cada vez que el usuario presiona una tecla, la CPU es advertida a través
de una señal especial de interrupción. Cuando la CPU advierte/recibe una señal
de interrupción suspende temporalmente el proceso actual almacenando en
memoria RAM un bloque con toda la información necesaria para restablecer
posteriormente la ejecución del programa si es que procede. Enseguida la CPU
determina qué elemento ha solicitado la interrupción y para cada caso existe
un bloque de instrucciones que realiza la tarea correspondiente que es
ejecutada a continuación. Terminada la ejecución se restablece el programa
original en el mismo punto en que fue interrumpido usando para ello la
información almacenada previamente.
Cada interrupción tiene asignada un número único. El PC está diseñado de
manera que la interrupción tiene asignada 4 bytes de memoria RAM. La
dirección de los cuatro bytes en la memoria corresponde al número de la
interrupción multiplicado por 4. Por ejemplo la interrupción IRQ 5 tiene
asignada 4 bytes en la dirección 0x00014 (0000:0014). El contenido de los 4
bytes de memoria RAM asignados a una interrupción contiene a su vez una
dirección que es un puntero a un bloque de instrucciones de máquina que
realiza el procedimiento correspondiente. De este modo al iniciar la ejecución
de una interrupción de los cuatro bytes que tiene asignados se obtiene la
dirección del bloque de instrucciones que efectivamente se ejecutan. Por
ejemplo si en la dirección 0000:0014 estuviera almacenado el valor 0xFFF00,
ello significa que en dicha dirección (ó (F000:FF00) se encuentra el bloque de
instrucciones a ejecutar cuando la interrupción IRQ 5 sea requerida.
Existen tres tipos de interrupciones :
Interrupciones internas de hardware
Las interrupciones internas son generadas por ciertos eventos que surgen
durante la ejecución de un programa.
Este tipo de interrupciones son manejadas en su totalidad por el hardware y no
es posible modificarlas.
Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador
del reloj interno de la computadora, el hardware hace el llamado a esta
interrupción varias veces durante un segundo para mantener la hora
actualizada.
Aunque no podemos manejar directamente esta interrupción (no podemos
controlar por software las actualizaciones del reloj), es posible utilizar sus
efectos en la computadora para nuestro beneficio, por ejemplo para crear un
"reloj virtual" actualizado continuamente gracias al contador del reloj
interno. Únicamente debemos escribir un programa que lea el valor actual del
contador y lo traduzca a un formato entendible para el usuario.