08/07/2019
En el corazón de cada computadora, desde los servidores más potentes hasta el microcontrolador más pequeño en un electrodoméstico, existe un sistema de comunicación fundamental y elegante: el mecanismo de interrupciones. A simple vista, parece que nuestro ordenador realiza miles de tareas simultáneamente sin esfuerzo. Podemos mover el ratón, escribir en el teclado y descargar un archivo, todo al mismo tiempo. Esta fluidez no es magia, sino el resultado de un diálogo constante y perfectamente orquestado entre el procesador (CPU) y el resto de los componentes del hardware, un diálogo mediado por las interrupciones.

¿Qué es Exactamente una Interrupción?
Imaginemos a un chef altamente concentrado preparando un plato complejo. De repente, suena el temporizador del horno. El chef detiene momentáneamente lo que está haciendo, atiende el horno, y luego retoma su tarea principal justo donde la dejó. En el mundo de la informática, una interrupción funciona de manera muy similar. Es una señal enviada por un dispositivo de hardware (como el teclado, el disco duro o una tarjeta de red) o por el propio software, que le indica al procesador que debe detener temporalmente su tarea actual para atender una solicitud urgente.

Antes de la existencia de este mecanismo, el método predominante era el polling o sondeo. Con el polling, el procesador tenía que preguntar constantemente a cada dispositivo: "¿Necesitas algo? ¿Y tú? ¿Y tú ahora?". Este proceso era increíblemente ineficiente, ya que la CPU desperdiciaba una enorme cantidad de ciclos de procesamiento en comprobar dispositivos que, la mayoría de las veces, no necesitaban nada. Las interrupciones invirtieron este paradigma: en lugar de que la CPU pregunte, ahora son los dispositivos los que "levantan la mano" y avisan a la CPU cuando requieren atención.

El Proceso de una Interrupción: Un Baile Sincronizado
Cuando un dispositivo genera una interrupción, se desencadena una secuencia de pasos precisa y rápida, gestionada por un componente llamado Controlador de Interrupciones Programable (PIC):
- Petición (IRQ): Un dispositivo, como por ejemplo al presionar una tecla, activa su línea de Petición de Interrupción (IRQ, por sus siglas en inglés) asignada.
- Notificación a la CPU: El controlador de interrupciones detecta esta señal, la prioriza si hay varias peticiones simultáneas, y envía una única señal de interrupción a la CPU.
- Pausa y Resguardo: La CPU termina de ejecutar la instrucción máquina que tenía en curso para no dejar el trabajo a medias. Inmediatamente después, guarda su "contexto" actual (el contenido de sus registros y la dirección de la siguiente instrucción a ejecutar) en una zona de memoria especial llamada la pila (stack). Este paso es crucial para poder volver al trabajo anterior sin perder el hilo.
- Identificación y Salto: La CPU le pregunta al controlador qué dispositivo generó la interrupción. Con esa información, consulta una tabla en memoria llamada Tabla de Vectores de Interrupción. Esta tabla es como un índice que asocia cada tipo de interrupción con la dirección de memoria donde se encuentra el programa que debe atenderla.
- Ejecución de la ISR: La CPU salta a esa dirección y ejecuta la Rutina de Servicio de Interrupción (ISR, por sus siglas en inglés). La ISR es un pequeño programa diseñado específicamente para gestionar la petición del dispositivo (por ejemplo, leer el código de la tecla presionada y enviarlo al sistema operativo).
- Restauración y Continuación: Una vez que la ISR finaliza, la CPU recupera el contexto que había guardado en la pila. Al restaurar sus registros y la dirección de la siguiente instrucción, puede reanudar el programa original exactamente en el punto donde lo dejó, como si nada hubiera pasado.
Tipos de Interrupciones: No Todas son Iguales
Las interrupciones se pueden clasificar en tres grandes familias, según su origen y naturaleza:
Interrupciones de Hardware
Son las más comunes y son asíncronas, lo que significa que pueden ocurrir en cualquier momento, sin relación con el programa que se está ejecutando. Son generadas por dispositivos externos para notificar eventos como:
- La pulsación de una tecla o el movimiento del ratón.
- La llegada de un paquete de datos a la tarjeta de red.
- La finalización de una operación de lectura o escritura en el disco duro.
- El vencimiento de un temporizador (timer tick), que el sistema operativo utiliza para gestionar la multitarea.
Excepciones (Interrupciones Síncronas)
A diferencia de las de hardware, estas son generadas por la propia CPU como resultado directo de la ejecución de una instrucción del programa. Son síncronas porque ocurren en un punto predecible de la ejecución del código. Generalmente, indican una condición de error que el sistema operativo debe manejar, como:
- División por cero.
- Intento de acceso a una dirección de memoria no válida o protegida.
- Desbordamiento aritmético (overflow).
- Ejecución de una instrucción no válida.
Interrupciones por Software
Estas son generadas deliberadamente por un programa en ejecución mediante una instrucción especial (como INT en arquitecturas x86). Su propósito principal es solicitar servicios al sistema operativo, en un proceso conocido como llamada al sistema (syscall). Cuando un programa necesita, por ejemplo, leer un archivo del disco o abrir una conexión de red, no puede hacerlo directamente por razones de seguridad. En su lugar, ejecuta una interrupción por software, cediendo el control al kernel del sistema operativo para que este realice la operación de forma segura y controlada.
Un Vistazo al Mundo Real: Del PC Clásico al ESP32
La teoría de las interrupciones se materializa de formas distintas según la arquitectura. En los primeros ordenadores IBM PC/AT, el controlador Intel 8259 gestionaba 16 líneas de IRQ, con asignaciones que se volvieron un estándar de facto:
| IRQ | Dispositivo Típico Asignado |
|---|---|
| IRQ 0 | Temporizador del sistema (Timer) |
| IRQ 1 | Teclado |
| IRQ 4 | Puerto Serie COM1 (ratón antiguo) |
| IRQ 6 | Controladora de disquetes |
| IRQ 12 | Puerto PS/2 (ratón) |
| IRQ 14 | Controladora de disco duro IDE Primaria |
En sistemas modernos, esta arquitectura ha sido reemplazada por sistemas más avanzados como APIC, pero el principio fundamental sigue siendo el mismo. Si nos movemos al mundo de los microcontroladores, como el popular ESP32, vemos una implementación aún más sofisticada. El ESP32 cuenta con dos núcleos de procesador, cada uno con 32 interrupciones de prioridad fija. Dado que hay más posibles fuentes de interrupción (GPIOs, temporizadores, Wi-Fi, Bluetooth) que líneas de interrupción, utiliza una "matriz de interrupciones" para enrutar de forma flexible una fuente a una interrupción específica.

Además, el ESP32 introduce conceptos como:
- Interrupciones no compartidas: Una línea de interrupción se dedica en exclusiva a una única fuente. Pueden ser activadas por nivel (mientras la señal está alta o baja) o por flanco (en la transición de bajo a alto o viceversa).
- Interrupciones compartidas: Varias fuentes de interrupción pueden compartir la misma línea. Esto es eficiente pero introduce una complejidad: solo pueden ser activadas por nivel. Si se usaran flancos, podría ocurrir que mientras la ISR atiende a un dispositivo, otro dispositivo genere un flanco que se perdería, ya que la CPU no estaría escuchando nuevas interrupciones en esa línea hasta terminar la ISR actual.
Tabla Comparativa: Polling vs. Interrupciones
| Característica | Polling (Sondeo) | Interrupciones |
|---|---|---|
| Eficiencia del CPU | Baja. La CPU está constantemente ocupada preguntando a los dispositivos. | Alta. La CPU queda libre para ejecutar otras tareas hasta que un dispositivo la necesita. |
| Latencia de Respuesta | Potencialmente alta. La respuesta a un evento depende de la frecuencia con la que se sondea. | Muy baja. La respuesta es casi inmediata al evento. |
| Mecanismo | Activo. La CPU inicia la comunicación. | Reactivo. El dispositivo inicia la comunicación. |
| Complejidad | Simple de implementar en software, hardware mínimo. | Más complejo. Requiere hardware específico (controlador) y software (ISR, tabla de vectores). |
| Uso Ideal | Sistemas embebidos muy simples con pocos dispositivos y sin requisitos de tiempo real. | Prácticamente todos los sistemas modernos, desde PCs a smartphones y sistemas embebidos avanzados. |
Preguntas Frecuentes (FAQ)
¿Qué es una ISR o Rutina de Servicio de Interrupción?
Una ISR es el fragmento de código específico que se ejecuta para atender la petición del dispositivo que generó la interrupción. Debe ser lo más corta y rápida posible para permitir que la CPU vuelva a su tarea principal rápidamente.
¿Qué es la tabla de vectores de interrupción?
Es una estructura de datos en la memoria RAM, usualmente al principio, que actúa como un índice. Cada entrada de la tabla corresponde a un número de interrupción y contiene la dirección de memoria de la ISR que debe ejecutarse para esa interrupción.

¿Se puede deshabilitar una interrupción?
Sí. La mayoría de las interrupciones se pueden "enmascarar" o deshabilitar temporalmente por software. Esto es útil para proteger secciones de código críticas que no deben ser interrumpidas. Sin embargo, existen las Interrupciones No Enmascarables (NMI), reservadas para fallos de hardware graves (como errores de memoria) que la CPU no puede ignorar.
Si quieres conocer otros artículos parecidos a Interrupciones: El Lenguaje Secreto del Hardware puedes visitar la categoría Automovilismo.
