2010-07-05 22 views
17

¿Comprueba repetidamente la condición y la ejecuta si se cumple esta condición? Por ejemplo, cómo el sistema operativo sabe exactamente cuándo está conectado un dispositivo USB, o cómo MSN sabe exactamente cuándo recibe un correo electrónico. ¿Como funciona esto?¿Cómo funcionan los oyentes de eventos?

Gracias

Respuesta

31

En el nivel bajo, el núcleo del sistema operativo "sabe" cuando ocurre algo, porque el dispositivo en cuestión envía a la CPU una interrupción de hardware.

Entonces, cuando llega un paquete de red, el controlador de red envía una interrupción y el kernel del sistema operativo responde según corresponda. En el nivel de programa, funciona de manera bastante diferente: la mayoría de los programas de aplicación ejecutan un "bucle de evento", donde obtienen un mensaje (por ejemplo, un mensaje del sistema operativo que dice que "se hizo clic en este punto en la aplicación "), realice las acciones apropiadas en respuesta a eso y luego escuche más mensajes. Si no hay ningún mensaje, el sistema operativo duerme el hilo hasta que tenga un mensaje para entregar.

+2

+1 Para explicar con claridad la diferencia entre las interrupciones en el nivel de hardware y las escuchas de eventos a nivel de software. – Pete

1

Depende.

A menudo, un detector de eventos se registra con el objeto que genera el evento. Cuando ocurre el evento, el objeto itera a través de todos los oyentes registrados con él informándoles del evento. Eche un vistazo al modelo de evento AWT/Swing en Java, por ejemplo.

flujo del sistema operativo sabe exactamente cuando se pone un USB

en un nivel bajo sospecho que eso es un interupt de hardware (que alguien me corrija si me equivoco) que es manejado por el núcleo/USB conductor. A menudo hay sistemas de nivel superior (por ejemplo, DBUS) que escuchan esto y tienen oyentes de eventos que los escuchan.

o cómo MSN sabe exactamente cuándo recibe un correo electrónico.

Sospecho que es un caso simple de sondear el buzón (por ejemplo, sobre POP3) cada x segundos y verificar el conteo de mensajes (aunque podría ser incorrecto).

Anon. explica bastante bien la diferencia entre las interrupciones de hardware y el evento de nivel de software.

1

Tome un vistazo a Interrupts esto debe explicar cómo el hardware inicia cierta 'Eventos'

0

Programas como el ajedrez de correo electrónico por lo general se ejecutan servicios en segundo plano que consultan su servidor de correo electrónico cada periodo X de correo nuevo . Hay otras maneras de hacerlo, pero para eventos de nivel de software, es casi seguro que será algo así.

Cuestiones relacionadas