2. Interrupciones (eventos generados por hardware)

Este tema es informativo, no forma parte de la materia, pero sucede que los alumnos utilizan excepciones en Python y luego tratan de usar el mismo concepto el C++. 

En C++ el tema tiene otras aristas que intentaremos ilustrar, sin ahondar en demasiados detalles.


Interrupciones 

Como sugiere el nombre, las señales de interrupción proporcionan una forma de desviar el procesador al código fuera del flujo normal de control.

Cada dispositivo de hardware es capaz de emitir solicitudes de interrupción generalmente tiene un línea o  pin  de salida única designada como línea de Solicitud de interrupción (IRQ). Estas líneas están conectadas a los pines de entrada de un circuito de hardware llamado controlador de interrupción programable , I/O Advanced Programmable Interrupt Controller (I/O APIC).


Se pueden ver que hay interrupciones generadas por las CPUs e interrupciones externas.

Cuando llega una señal de interrupción, la CPU debe detener lo que está haciendo actualmente y cambiar a una nueva actividad; lo hace guardando el valor actual del contador del programa (es decir, el contenido de los registros, memoria de trabajo del proceso) en la pila del Modo Kernel y colocando una dirección relacionada con el tipo de interrupción en el contador del programa.

Las interrupciones se caracterizan por que:

  • Llegan en cualquier momento.
  • Pueden ocurrir mientras otra interrupción está en curso.

Hay interruciones enmascarables y no mascarables.

Interrupciones enmascarables

Todas las solicitudes de interrupción (IRQ) emitidas por dispositivos de E/S dan lugar a enmascarables. Una interrupción enmascarable puede estar en dos estados: enmascarada o desenmascarada. La unidad de control ignora una interrupción enmascarada mientras permanezca enmascarado.

Interrupciones no enmascarables

Sólo unos pocos eventos críticos (como fallas de hardware) dan lugar a interrupciones no enmascarables.

Un integrado que hace estas tareas ejecutar el código de cada interrupción es el 8259A  de intel.

8259A Controlador de Interrupciones Programables.