2009-05-31 15 views

Respuesta

0

Bueno, si las interrupciones no fueron deshabilitadas después de la primera interrupción, la segunda hará que se llame nuevamente a su rutina de servicio de interrupción. Debe asegurarse de que las interrupciones se deshabiliten para evitar este comportamiento decididamente indeseable.

Por lo tanto, si su rutina de servicio de interrupción está haciendo lo suyo, y luego se produce otra interrupción, será como si estuviera haciendo otra cosa: se llamará a la rutina de interrupción correspondiente.

En la arquitectura Intel, la instrucción "cli" deshabilitará las interrupciones, y "sti" las habilitará de nuevo.

2

Depende del sistema. Normalmente, si la nueva interrupción es una prioridad más alta que la primera, entonces se responde, suspendiendo el controlador para la primera interrupción. Cuando finaliza su controlador, se reanuda el controlador de interrupción original. Finalmente, suponiendo que no haya más interrupciones, el manejador original finaliza y el servicio normal se reanuda. A veces, el proceso reanudado será el proceso que se interrumpió; a veces, ya no será el proceso más elegible y se reanudará otro.

De forma similar, si se produce una segunda instancia o posterior de la interrupción original antes de que se complete el primer controlador, o si ocurre una interrupción de prioridad menor o igual, se retendrá hasta que el primer controlador complete. Antes de que se reanude el procesamiento normal, el kernel verifica las interrupciones pendientes que deberían haberse manejado pero que fueron bloqueadas.

Un controlador de interrupciones puede bloquear otras interrupciones.

4

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.

Cuestiones relacionadas