Sistemas operativos – Técnicas de comunicación de E/S

Existen tres técnicas para llevar a cabo las operaciones de E/S:

  • E/S programada
  • E/S dirigida por interrupciones
  • Acceso directo a memoria (Direct memory access o DMA)

E/S programada

Cuando el procesador ejecuta un programa y encuentra una instrucción relacionada con la E/S (leer, escribir o comprobar el estado de un dispositivo), ejecuta esa instrucción generando uno o varios mandatos al módulo de E/S apropiado. En el caso de la E/S programada, el módulo de E/S realiza la acción solicitada pero no realiza ninguna acción para avisar al procesador. Por tanto, después de invocar la instrucción E/S, el procesador debe tomar un papel activo para determinar cuándo se completa la instrucción. El procesador comprueba periódicamente el estado del módulo E/S hasta que se completa la operación. Aquí no se ha producido ninguna interrupción, sin embargo, el procesador ha colaborado con el módulo E/S para comunicarse en dirección al dispositivo externo y no al revés.

El juego de instrucciones de una operación de E/S a través de un módulo de E/S, incluye las siguientes categorías:

  • Control: Utilizadas para activar un dispositivo externo y especificarle qué debe hacer.
  • Estado: Utilizadas para comprobar diversas condiciones de estado asociadas a un módulo de E/S y sus periféricos.
  • Transferencia: Utilizadas para leer datos de un dispositivo externo o para enviar o escribir datos en el mismo.

Los datos se leen palabra a palabra (por ejemplo, de 16 bits). Por cada palabra leída, el procesador debe permanecer en un bucle de comprobación del estado hasta que determina que la palabra está disponible en el registro de datos o buffer del módulo E/S. Este esquema, corresponde a un proceso que consume un tiempo considerable y que mantiene al procesador ocupado de forma innecesaria.

E/S dirigida por interrupciones

El problema de la E/S programada es que el procesador tiene que esperar hasta que el módulo E/S correspondiente esté listo para la recepción o transmisión de más datos. Mientras tanto, el procesador está esperando y debe comprobar repetidamente el estado del módulo de E/S. A causa de esto, el rendimiento global del sistema se degrada.

Una alternativa es que el procesador genera un mandato de E/S y acto seguido continúe realizando algún otro trabajo útil mientras que el módulo de E/S realiza su función y se comunica con el dispositivo externo.

Desde el punto de vista del módulo E/S, para una operación de entrada, recibe una orden de lectura por parte del procesado. El módulo E/S pasa a leer los datos del periférico. Una vez que los datos están en el registro de datos del módulo, el módulo genera una interrupción al procesador a través de una línea de control. El módulo espera hasta que el procesador pueda atenderle. Cuando el procesador atiende la petición, el módulo pone los datos en el bus de datos y ya está listo para otra operación E/S.

Desde el punto de vista del procesador, el procesador genera una petición de lectura. Salva el contexto del programa actual y lo abandona, pasando a hacer otra cosa. Si el planificador decide seguir con la ejecución del proceso actual, no se salvará su contexto. Al final de cada ciclo de instrucción, el procesador comprueba si hay alguna instrucción. Cuando se produce la interrupción del módulo E/S, el procesador salva el contexto del programa que se encuentra en ejecución y pasa a ejecutar el manejador de interrupciones o ISR. El procesador se comunica con el módulo E/S, lee la palabra de datos de dicho módulo y la almacena en memoria. A continuación, la ISR restaura el contexto del programa que había realizado la la solicitud de E/S y reanuda su ejecución.

La E/S dirigida por interrupciones es más eficiente que la E/S programada ya que elimina la espera innecesaria. Pero aún, la E/S dirigida por interrupciones consume mucho tiempo de procesador, ya que cada palabra de datos que va desde la memoria al módulo E/S o desde el módulo E/S hasta la memoria, debe pasar a través del procesador.

Acceso directo a memoria (DMA)

La E/S dirigida por interrupciones, aunque es más eficiente que la E/S programada, igualmente requiere de la intervención activa del procesador para transferir datos entre la memoria y un módulo de E/S, ya que cualquier transferencia de datos debe atravesar un camino a través del procesador. Por lo que, ambas formas de E/S tienen dos inconvenientes:

  1. La tasa de transferencia de E/S está limitada por la velocidad con la que el procesador puede comprobar el estado de un dispositivo y ofrecerle servicio.
  2. El procesador está involucrado en la gestión de una transferencia de E/S, por lo que se deben ejecutar varias instrucciones por cada transferencia de E/S.

Cuando se van a manejar grandes volúmenes de datos, se requiere una técnica más eficiente, como el acceso directo a memoria. La función DMA la puede llevar a cabo un módulo separado y conectado al bus del sistema, o puede estar directamente incorporada en el módulo de E/S. Cuando el procesador necesita escribir un bloque de datos, proporciona una serie de órdenes al módulo DMA, enviándole la siguiente información:

  • Si se trata de una operación de lectura o de escritura.
  • La dirección del dispositivo E/S involucrado.
  • La posición inicial de memoria en la que se desea leer los datos o donde se quieren escribir.
  • El número de palabras que se pueden leer o escribir.

Llegados a este punto, si el procesador decide continuar con otro trabajo, se producirá un salvado de contexto, en caso de que decida seguir con el trabajo actual esto no se producirá. Mientras tanto, como el procesador ha delegado la operación de E/S al módulo DMA, éste se ocupará de ella. El módulo DMA transferirá el bloque completo de datos, palabra a palabra, hacia la memoria o desde ella, sin la necesidad de que el procesador intervenga, de forma que no es necesario realizar interrupciones constantemente cuando acaba de transferir cada bloque. Esto hace que se aproveche aún más la capacidad de la CPU.

De esta forma, el procesador sólo está involucrado al principio y al final de la transferencia. Como siempre, al final de cada transferencia, el módulo DMA producirá una interrupción, cargándose la rutina ISR y salvando el contexto del proceso que se encuentre en ese momento en la CPU. Una vez completada la comunicación entre el procesador y el módulo de E/S, se restaura el contexto del proceso que se estaba ejecutando o de algún otro que se encuentre en cola, dependiendo de la planificación.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

tres − tres =