2010-12-29 20 views
5

(NB: No se trata de interrumpir hilos/.NET Java, se trata de interrupciones en modo kernel.)¿Qué es Interrupt Threading?

Hola,

Wikipedia tiene esto que decir acerca de interrupción Temas en el artículo Interrupt handler:

hilos de interrupción

Varios sistemas operativos Solaris -, NetBSD, Mac OS X, la mueca de dolor y FreeBSD, por ejemplo: use el esquema diferente conocido como hilos de interrupción. Un controlador de interrupción proporcionado por el controlador de dispositivo es solo un subproceso de alta prioridad que se ejecuta con las interrupciones activadas y, lo que es más importante, puede bloquear en mutex. Esto en gran medida simplifica el bloqueo en el kernel. Además, la secuencia de interrupción puede ser adelantada por la secuencia de interrupción de prioridad más alta .

¿Cuál es esta técnica de Interrupt Threads que aparentemente usa FreeBSD (entre otros)? ¿Y dónde puedo leer más al respecto?

Gracias de antemano. :)

Respuesta

1

Hay más información técnica en ithread(9) de FreeBSD.

+0

Hola. Parece que esto es lo que estoy preguntando, ¿podrían explicar un poco más cómo funciona y cómo es diferente de otros enfoques en la ejecución de interrupción diferida? –

+0

No sé los detalles, lo siento. http://www.freebsd.org/doc/en/books/arch-handbook/smp-design.html parece tener más información. – BCran

2

El hardware informa los sistemas operativos de algún evento con interrupciones. Se pueden generar cuando ocurre un error o cuando algún periférico tiene nuevos datos disponibles (el usuario presiona una tecla, llega un paquete a la red, expira un temporizador, ...). Esas interrupciones deben ser manejadas rápidamente por el sistema (para que parezca receptivo).

Son manejados por el kernel. En general, cuando llega una de esas interrupciones, el código que se está ejecutando se detiene y se invoca una función del kernel. Las interrupciones se deben implementar rápidamente para tener un sistema receptivo, por lo que no deben bloquear el kernel en espera de algún recurso, o hacer algo como eso. La solución clásica es tener una función de interrupción tonta que solo tenga en cuenta el número de la interrupción y el retorno, y luego en el bucle principal del kernel, para comprobar si se produjo alguna interrupción y llamar al controlador real.

Como esas interrupciones pueden enmascararse (a excepción de la interrupción no enmascarable - NMI), el kernel puede engendrar algunos hilos en modo kernel, y solo tienen que desenmascarar la interrupción y manejarlos. Como esos hilos son independientes del hilo principal del kernel, pueden bloquearse, siempre que haya suficientes hilos para manejar las interrupciones que puedan llegar mientras el hilo está bloqueado.

+0

Hola. Gracias por la respuesta. Entiendo la necesidad de una ejecución diferida basada en interrupciones, lo que me interesa específicamente es esta técnica de hacerlo, que se llama Interrupt Threads. –