lunes, 9 de noviembre de 2009

4.4 Operaciones de Entrada /salida.

Tanto en la E/S programada como la basada en interrupciones, la UCP debe encargarse de la transferencia de datos una vez que sabe que hay datos disponibles en el controlador. Una mejora importante para incrementar la concurrencia entre la UCP y la E/S consiste en que el controlador del dispositivo se pueda encargar de efectuar la transferencia de datos, liberando de este trabajo a la UCP, e interrumpir a la UCP sólo cuando haya terminado la operación completa de EIS. Esta técnica se denomina acceso directo a memoria (DMA, Direct Memory Access).

Cuando se utiliza acceso directo a memoria, es el controlador el que se encarga directamente de transferir los datos entre el periférico y la memoria principal, sin requerir intervención alguna por parte del procesador. Esta técnica funciona de la siguiente manera: cuando el procesador desea que se imprima un bloque de datos, envía una orden al controlador indicándole la siguiente información:

· Tipo de operación: lectura o escritura.

· Periférico involucrado en la operación.

· La dirección de memoria desde la que se va a leer o a la que va a escribir directamente con el controlador de dispositivo (dirección).

· El número de bytes a transferir (contador).

Donde el campo Operación corresponde al código de operación de las instrucciones máquinas normales. Especifica la operación que debe realizar la CCW. La unidad de control decodifica este campo y envía las señales adecuadas de control al dispositivo. Existen varias operaciones, las más importantes son las siguientes:

Lectura: el canal transfiere a memoria principal un bloque de palabras de tamaño especificado en el campo nº de palabras, en orden ascendente de direcciones, empezando en la dirección especificada en el campo dirección del dato.

Escritura: el canal transfiere datos de memoria principal al dispositivo. Las palabras se transfieren en el mismo orden que en la operación de lectura.

Control: se utiliza esta orden para enviar instrucciones específicas al dispositivo de E/S, como rebobinar una cinta magnética, etc.

Bifurcación: cumple en el programa de canal la misma función que una instrucción de salto en un programa normal. El canal ejecuta las CCW en secuencia, salvo cuando aparece una CCW de este tipo, que utiliza el campo dirección del dato como la dirección de la siguiente CCW a ejecutar.

Flags: Los bits de este campo indican lo siguiente:

CC (Encadenamiento de comando): cuando este bit está a 1, indica al canal que la siguiente CCW especifica una nueva operación de E/S que debe realizarse con el mismo dispositivo. El canal ejecuta primero la operación de E/S especificada en la CCW que tiene a 1 el flag CC. Después ejecuta la siguiente sobre el mismo dispositivo. Desde el punto de vista del dispositivo, las dos operaciones resultantes de la primera y segunda CCW aparecen como dos comandos de E/S separados.

CD (Encadenamiento de datos): una CCW con el bit CD a 1, indica al canal que la siguiente CCW contiene una nueva dirección del dato y un nuevo nº de palabras. Éstos deben utilizarse para transferir un segundo bloque de datos hacia o desde el dispositivo de E/S, mediante la orden especificada por la CCW actual. Cuando el canal termina la transferencia de datos especificada en la CCW con el bit CD a 1, no corta la conexión con el dispositivo de E/S, continúa la transferencia utilizando la dirección y el nº de palabras de la siguiente CCW.

SKIP (Salto): este bit, cuando está a 1, hace que el programa de canal salte un número de palabras igual al especificado en el campo nº de palabras. Cuando se utiliza con la orden de lectura, este flag hace que los datos se lean del dispositivo sin que se transfieran a la memoria principal.

PCI (Interrupción controlada por programa): el canal produce una interrupción cuando ejecuta una CCW con el flag PCI a 1. Si esta CCW va precedida por otra CCW con encadenamiento de comandos, la interrupción se genera después de que hayan concluido todas las transferencias de datos.

Una vez emitida la orden, el procesador continúa realizando otro trabajo sin necesidad de transferir el bloque de datos. Es el propio controlador el que se encarga de transferir el bloque de datos del periférico a memoria. La transferencia se realiza palabra a palabra. Cuando el controlador ha completado la transferencia, genera una interrupción que activa la rutina de tratamiento correspondiente, de tal manera que se sepa que la operación ha concluido.

Utilizando acceso directo a memoria el procesador únicamente se ve involucrado al inicio y al final de la transferencia. Por tanto, cuando el sistema operativo despierta al proceso que pidió la E/S, no tiene que copiar el bloque a memoria porque ya está allí. El DMA requiere una etapa de almacenamiento intermedio en el controlador del dispositivo para armonizar la velocidad del dispositivo de EIS con la copia de los datos en memoria principal. La razón para este almacenamiento intermedio reside en que una vez que el dispositivo empieza la transferencia de datos, ésta debe hacerse a velocidad constante para evitar transferencias parciales y nuevas esperas de posicionamiento del dispositivo sobre los datos (latencia). Una vez transferidos los datos a la memoria del controlador, éste los copia en memoria principal aprovechando el ancho de banda libre del bus.

Los pasos a seguir en una operación de E/S con DMA son los siguientes:

1. Programación de la operación de E/S. Se indica al controlador la operación, los datos a transferir y la dirección de memoria sobre la que se efectuará la operación.

2. El controlador contesta aceptando la petición de E/S.

3. El controlador le ordena al dispositivo que lea (para operación de lectura) una cierta cantidad de datos desde una posición determinada del dispositivo a su memoria interna. 7.3.

4. Cuando los datos están listos, el controlador los copia a la posición de memoria que tiene en sus registros, incrementa dicha posición de memoria y decrementa el contador de datos pendientes de transferir.

5. Los pasos 3 y 4 se repiten hasta que no quedan más datos por leer.

6. Cuando el registro de contador está a cero, el controlador interrumpe a la UCP para in dicar que la operación de DMA ha terminado.

4.3 Estructuras de datos para manejo de dispositivos.

Los procesos de usuario emiten peticiones de entrada/salida al sistema operativo. Cuando un proceso solicita una operación de E/S, el sistema operativo prepara dicha operación y bloquea al proceso hasta que se recibe una interrupción del controlador del dispositivo indicando que la operación está completa. Las peticiones se procesan de forma estructurada en las siguientes capas:

• Manejadores de interrupción.

• Manejadores de dispositivos o drivers.

•Software de EIS independiente de los dispositivos. Este software está formado por la parte de alto nivel de los manejadores, el gestor de cache, el gestor de bloques y el servidor de archivos.

• Interfaz del sistema operativo. Llamadas al sistema que usan las aplicaciones de usuario.

El sistema operativo estructura el software de gestión de E/S de esta forma para ofrecer a los usuarios una serie de servicios de E/S independientes de los dispositivos. Esta independencia implica que deben emplearse los mismos servicios y operaciones de E/S para leer datos de un disquete, de un disco duro, de un CD-ROM o de un teclado.

Manejadores de interrupción

Los manejadores de interrupción se encargan de tratar las interrupciones que generan los controla dores de dispositivos una vez que éstos están listos para la transferencia de datos o bien han leído o escrito los datos de memoria principal en caso de acceso directo a memoria. Para tratar dicha interrupción se ejecuta el correspondiente manejador de interrupción cuyo efecto es el de salvar los registros, comunicar el evento al manejador del dispositivo y restaurar la ejecución de un proceso (que no tiene por qué ser el interrumpido).

Los manejadores de interrupción suelen hacer algo más que comunicar el evento al manejador de dispositivo. Cuando una interrupción ocurre muy frecuentemente, caso del reloj, o cuando la cantidad de información a transferir es muy pequeña, caso del teclado, sería muy costoso comunicar siempre el evento al manejador de dispositivo asociado. En estos casos, el propio manejador de interrupción registra la ocurrencia del evento, bien mediante el incremento de una variable global para el reloj o la acumulación de caracteres en un buffer del teclado. La notificación al manejador se hace únicamente cada cierto número de ocurrencias del evento, en el caso del reloj, o activando unflag que indica que hay datos en el buffer del teclado.

Manejadores de dispositivos

Cada dispositivo de E/S, o cada clase de dispositivos, tiene un manejador asociado en el sistema operativo.

Dicho manejador incluye: código independiente del dispositivo para proporcionar al nivel superior del sistema operativo una interfaz de alto nivel y el código dependiente del dispositivo necesario para programar el controlador del dispositivo a través de sus registros y datos. La tarea de un manejador de dispositivo es aceptar peticiones en formato abstracto, de la parte del código de E/S independiente del dispositivo, traducir dichas peticiones a términos que entienda el controlador, enviar al mismo las órdenes adecuadas en la secuencia correcta y esperar a que se cumplan. La siguiente figura muestra un diagrama de flujo con las operaciones de un manejador.

Todos los manejadores tienen una lista de peticiones pendientes por dispositivo donde se encolan las peticiones que llegan de niveles superiores. El manejador explora la lista de peticiones, extrae una petición pendiente y ordena su ejecución. La política de extracción de peticiones de la lista es dependiente de manejador y puede ser FIFO. Una vez enviada la petición al controlador, el manejador se bloquea o no, dependiendo de la velocidad del dispositivo. Para los lentos (discos) se bloquea esperando una interrupción. Para los rápidos (pantalla, discos RAM, etcétera) responde inmediatamente. Después de recibir el fin de operación, controla la existencia de errores y devuelve al nivel superior el estado de terminación de la operación. Si tiene operaciones pendientes en la cola de peticiones, atiende a la siguiente, en caso de que le toque ejecutar después de la operación de E/S. En caso contrario se bloquea.

4.2 Mecanismos y funciones de los manejadores de dispositivos (device drivers).

El controlador es el componente más importante desde el punto de vista del sistema operativo, ya que constituye la interfaz del dispositivo con el bus de la computadora y es el componente que se ve desde la CPU. El Sistema Operativo generalmente trabaja con el controlador y no con el dispositivo.

Tecnicas de E/S

E/S programada: El procesador emite una orden de E/S de parte de un proceso a un modulo de E/S; el proceso espera entonces a que termine la operación, antes de seguir.

E/S dirigida por interrupciones: El procesador emite una orden de E/S de parte de un proceso, continua la ejecución de las instrucciones siguientes y el modulo de E/S lo interrumpe cuan do completa su trabajo. Las instrucciones siguientes pueden ser del mismo proceso, si no es necesario para este esperar la terminación de E/S. en otro caso, el proceso se suspende a la espera de la interrupción, mientras se realiza otro trabajo.

Acceso Directo a la Memoria (DMA): un modulo de DMA controla el intercambio de datos entre la memoria principal y un modulo de E/S. El procesador envía una petición de transferencia de un bloque de datos al modulo DMA y se interrumpe solo cuando se ha transferido el bloque entero.

En la mayoría de los sistemas informáticos, el DMA es la forma dominante de transferencia ofrecida por el sistema operativo.

Sin interrupciones

Con interrupciones

Transferencia de E/S a memoria a través del procesador

E/S programada

E/S dirigida por interrupciones

Transferencia de E/S directa a memoria

Acceso directo a memoria (DMA)

Hay que recalcar que el controlador al ser una parte crítica del sistema operativo, el fallo de un controlador puede ser más grave que otros errores de software, pudiendo bloquear el ordenador o incluso dañar el hardware. Debido a que el hardware es (necesariamente) indeterminista, encontrar y solucionar un fallo en un controlador es una tarea complicada ya que no sólo hay que monitorizar el programa, sino también el propio dispositivo.

A medida que han evolucionado los sistemas informáticos, se ha producido tendencia crecientes en la complejidad y sofisticación de cada componente individual. En ninguno de los puntos es mas evidente que en la función de E/S. la etapa de su evolución puede resumirse como lo siguiente:

1.- El procesador controla directamente los dispositivos periféricos.

2.- Se añade un controlador o modulo de E/S. El procesador utiliza E/S programada sin interrupciones.

3.- Se añade un controlador o modulo. Pero empleándose interrupciones.

4.- El modulo de E/S recibe el control directo de la memoria, a través de DMA, Ahora puede mover un bloque de datos a la memoria o desde la misma sin que intervenga el procesador.

5.- se mejora el modulo de E/S hasta llegar a ser un procesador separado con un conjunto de instrucciones especializadas para E/S.

6.- El modulo de E/S posee su propia memoria local y es, de hecho un computador independiente.

A medida que sigue la evolución, una mayor parte de la funciones de E/S se realiza sin la participación del procesador. El procesador central se libera cada vez más de las tareas relacionadas con la E/S, mejorando así el rendimiento.