Lo siguiente aplica a sólo la arquitectura x86, pero otras arquitecturas bien podría seguir el mismo patrón:
Hay una bandera procesador llamado IF
(indicador de interrupción) que controla si las interrupciones de hardware puede ser procesado, o tienen que ser puesto en espera. Cuando IF = 0, las interrupciones se pospondrán hasta que se vuelva a habilitar la bandera (Excepto por el NMI, la interrupción no enmascarable, que se entiende como una interrupción de "emergencia solamente" que no se puede bloquear).
El procesador borra automáticamente IF
antes de llamar a una rutina de mantenimiento de interrupción. Esto es necesario para evitar que las llamadas interrumpidas se vuelvan fuera de control. Tenga en cuenta que el código de servicio de interrupción no podría hacerlo por sí mismo, ya que si IF
no se desactivaron antes de ingresar la rutina, sería posible que ocurrieran más interrupciones antes de que el código de servicio tenga tiempo para ejecutar incluso una instrucción única. Entonces, un "firehose" de interrupciones daría lugar inmediatamente (de todas las cosas) a un desbordamiento de la pila.
Por lo tanto, en respuesta a su pregunta directa: normalmente, cuando se produce una segunda interrupción de hardware mientras se está dando servicio a una inicial, esa interrupción se retendrá hasta que la primera haya finalizado.
Como de costumbre, la historia completa es un poco más complicada. El Intel Architecture Software Developer’s Manual en el sitio web de Intel ofrece una descripción más completa a partir de la página 10-4.