Eventos asíncronos: Bucle de comprobación e interrupciones

La CPU emplea una muy pequeña parte del tiempo tomando instrucciones de memoria y ejecutándolas. Sin embargo, la CPU y la memoria principal, son solo dos componentes de Ordenador. El sistema completo, contiene también otros dispositivos como pueden ser:

  • Un disco duro para almacenar los programas y los ficheros de datos. (Tenga en cuenta, que en la memoria solo se almacena una parte, comparativamente pequeña, del total de información, y además, solo esta guardada a partir de que se enciende el ordenado. El disco duro es necesario para almacenar permanentemente grandes volúmenes de información, pero los programas tendrán de cargarse desde el disco a la memoria principal para poder ser ejecutados).
  • Un teclado y un ratón (Mouse) para interacción con el usuario (entrada de datos y ordenes)
  • Un monitor y una impresora que pueden ser utilizados para presentar los resultados de salida del ordenador.
  • Una interface de red, que permita al ordenador comunicarse con otros ordenadores conectados en esa red.
  • Un escáner que convierta imágenes en códigos numúricos binarios para que puedan ser guardadas y/o manipuladas por el ordenador.
  • una camaraweb,tarjeta de sonido,discos externos,…

La lista de dispositivos, esta totalmente abierta, y el ordenador, esta construido para que sea muy fácil seguir añadiendo nuevos dispositivos. De algún modo, la CPU debe de comunicarse y controlar todos estos periféricos. La CPU solo lo puede hacer ejecutando instrucciones en código maquina (que lo pueden hacer todo). Entonces, para cada dispositivo del sistema, existe un driver del dispositivo, que consiste en un programa que la CPU ejecuta cuando tiene que negociar con el dispositivo. Instalar un nuevo dispositivo en el sistema, tiene normalmente dos etapas: Conectar físicamente el dispositivo al sistema, e instalar el programa driver. Sin el driver del dispositivo, no podríamos utilizar el dispositivo físico, porque la CPU no sabría como comunicarse con él.

 ——————————————————————————–

 Un ordenador, consiste en un conjunto de dispositivos perfectamente organizados; estos dispositivos, están conectados uno con otros por medio de buses. Un bus es un conjunto de cables que llevan distintos tipos de información entre los dispositivos conectados a esos cables. Los cables llevan datos, direcciones, y señales de control. Una dirección dirige los datos a un dispositivo en particular, quizás a un registro o dirección concreta dentro de dicho dispositivo. Las señales de control pueden ser usadas para que un dispositivo avise a otro que los datos que solicitó, ya están disponibles en el bus.Un ordenador medianamente simple, puede estar organizado de la siguiente manera:

 Estructura de un ordenadorEntonces, dispositivos tales como el teclado, el ratón, o la red pueden producir entradas que deben ser procesadas por la CPU. ?Como se puede enterar la CPU que los datos están ahí? La idea mas simple, que no tiene porque ser la mejor, es que la CPU este comprobando una y otra vez si le han llegado datos. Cuando al fin los encuentre, los procesará. Este método es llamado polling, puesto que la CPU esta comprobando el dispositivo continuamente para ver si tiene información de algún dato. Desgraciadamente, aunque el polling es muy simple, es también muy poco eficiente. La CPU esta desaprovechando horriblemente su tiempo en espera de que le llegue la entrada.

Para mejorar la eficacia, a menudo se emplean las interrupciones en lugar del polling. Una interrupción es una señal que se envía desde un dispositivo a la CPU. La CPU responde a la señal de interrupción dejando a un lado cualquier cosa que este haciendo para atender a la interrupción. Una vez ha terminado de manejar (handled) la interrupción, continua con lo que estaba haciendo antes de ser interrumpida.

Por ejemplo, cuando pulsa una tecla en su ordenador, el teclado envía una interrupción a la CPU, la CPU responde a esta señal, deteniendo lo que estuviera haciendo, leyendo la tecla pulsada, procesándola, y continuando con la tarea que estaba realizando antes de que pulsara la tecla.

 

De nuevo, debe recordar que es un proceso puramente mecánico: La señal de interrupción del dispositivo, simplemente pone en ON un cable. La CPU esta construida para que cuando ese cable se ponga on, salve la información que esta manejando en ese momento, y pueda volver a ese estado mas tarde. Esa información consiste en el contenido de los registros internos importante como pueda ser el contador de instrucciones (PC). La CPU salta a una dirección de memoria predeterminada y ejecuta las instrucciones allí almacenadas. Estas instrucciones, forma el manejador de interrupciones y definen el proceso necesario a realizar para responder a la interrupción. (El manejador de interrupciones, es parte del driver del dispositivo que ha activado la interrupción.). Al final del manejador de interrupciones, hay una instrucción que hace que la CPU realice un salto hasta donde estaba antes, restaurando previamente los datos salvados.

Las interrupciones permiten a la CPU el trabajar con eventos asíncronos. Durante el ciclo regular de leer-y-ejecutar, las cosas ocurren en un orden predeterminado, todo lo que pasa, esta sincronizado con todo lo demás. Las interrupciones hacen posible que la CPU pueda tratar eficientemente las cosas que pasan de manera asíncrona, esto es , en momentos impredecibles.

Otro ejemplo de como son usadas las interrupciones, considere qué pasa cuando la CPU necesita acceder a datos almacenados en el disco duro. La CPU solo puede acceder directamente a los datos si están almacenados en la memoria principal. Los datos del disco, han de ser trasladados a memoria antes de que puedan ser accedidos. Desafortunadamente, en la escala de velocidades en las que opera la CPU, el disco es extremadamente lento. Cuando la CPU necesita datos desde el disco, envía una señal para indicarle al driver del disco donde esta la información, y que esta preparada para recibirla.(Esta señal, en enviada sincronizada, bajo el control de un programa normal). Entonces, en vez de quedarse esperando una importante e impredecible cantidad de tiempo a que el disco lo haga, la CPU se dedica a alguna otra tarea. Cuando el driver del disco tenga los datos disponibles, enviara una señal de interrupción a la CPU y el manejador de interrupciones, leerá los datos solicitados.

 ——————————————————————————–

Todo esto solo tiene sentido si la CPU tiene varias tareas por realizar. Si no es así, si no tiene nada mas que hacer, puede ser mejor que gaste su tiempo viendo si ha llegado alguna entrada (polling), o esperando que finalice la operación del disco. Los ordenadores, usan la multitarea para realizar varios trabajos a la vez. Algunos ordenadores, pueden ser usados por varias personas al mismo tiempo. Desde que las CPU son tan rápidas, les es posible ir prestando atención a varios usuarios, a base de realizar unas pocas instrucciones para cada uno y pasar el control a otro en fracciones de segundo. Esta aplicación de la multitarea, es llamada timessharing (tiempo compartido). Pero hasta los ordenadores personales con un solo usuario, utilizan la multitarea. Por ejemplo, el usuario puede estar escribiendo un documento, mientras el reloj esta presentando la hora, un fichero esta siendo transferido por la red, y se esta imprimiendo algún otro documento.

Cada una de las tareas individuales en las que la CPU trabaja, es llamada thread (hebra) (o proceso; existen diferencias técnicas entre hebras y procesos, pero no tienen importancia en este momento).En cualquier momento de tiempo, solamente una hebra puede ser ejecutada en la CPU. La CPU seguirá procesando la misma hebra hasta que ocurra una o varias de las siguientes cosas:

La hebra puede voluntariamente ceder(yield) el control, para permitir que otra hebra pueda ser procesada.

La hebra puede tener que esperar para que ocurra algún evento asíncrono. Por ejemplo, la hebra debe solicitar datos al disco, o debe esperar a que un usuario pulse una tecla. Mientras espera, se dice que la hebra esta bloqueada, y otra hebra toma el control y se pone en marcha.Cuando el evento esperado ocurre, la interrupción despierta la hebra y puede continuar su proceso.

La hebra puede estar activa todo el tiempo que le corresponde, y entonces la CPU entregara el control a otra hebra.

No todos los ordenadores pueden forzar la suspensión de la hebra de esta manera, hay otros que realizan lo que se ha dado en llamar preemptive multitasking. Para utilizar el sistema de multitarea preferente, el ordenador necesita un timer especial, que genera interrupciones a intervalos regulares, del orden de 100/1000 veces por segundo. Cuando esta interrupción sucede la CPU tiene la oportunidad de entregar el control de una hebra a otra, tanto si a la que esta activa en ese momento le gusta como si no.

Los usuarios normales, y también la mayoría de programadores, no necesitan tratar con interrupciones, o manejadores de interrupciones. Se pueden concentrar en las diferentes tareas o hebras que quieren que el ordenador realice; los detalles de como maneja el ordenador las distintas tareas no es importante para ellos. Realmente, muchos usuarios y bastantes programadores, llegan a ignorar totalmente todo el sistema de hebras y multitareas. De hecho, las hebras están aumentando su importancia a medida que los ordenadores se van haciendo mas potentes, y va aumentando el numero de las cosas que hacen en multitarea. Hemos de destacar que las hebras son tratadas dentro del lenguaje de programación Java, como un concepto fundamental de la programación

Precisamente, lo mas importante en Java, y en la moderna programación en general, es el concepto básico de eventos asíncronos. Aunque el programador no trabaja directamente con interrupciones, a menudo, deben escribir manejadores de eventos, semejantes a manejadores de interrupciones, y que son llamadas de forma asíncrona cuando ocurre un evento. Semejante «Programa orientado a eventos» tiene un aspecto muy diferente al modelo tradicional de programa síncrono.

 ——————————————————————————–

 Por cierto, el software que se encarga de manejar las interrupciones y las comunicaciones entre los dispositivos hardware se denomina sistema operativo. El sistema operativo es inprescindible. en esencia, sin él, ningún ordenador podría funcionar. El resto de programas, tales como procesadores de texto o navegadores WWW, dependen del sistema operativo. Los sistemas operativos mas comunes incluyen UNIX, Linux , Windows , y Macintosh OS.

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Formacion, Java y etiquetada , , . Guarda el enlace permanente.

Una respuesta a Eventos asíncronos: Bucle de comprobación e interrupciones

  1. Pingback: Java - Un resumen organizado....o no.Recursos para formacion

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.