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áquina 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.
No hay comentarios:
Publicar un comentario