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.
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 datospendientes
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.
Inicio y control de los programas de
canal
Hemos visto como se utilizan los
programas de canal para realizar operaciones de E/S. Estos programas residen en
la memoria principal del computador y se ejecutan en el canal. Vamos a examinar
ahora la forma en que la CPU inicia y supervisa las operaciones de E/S, es
decir, el programa de canal. En el IBM S/370 existen cuatro instrucciones
máquina que la CPU puede utilizar para estos fines. Son las siguientes:
START I/O Inicia una operación de
E/S. El campo de dirección de la instrucción seemplea para especificar el canal
y el dispositivo de E/S que participa en la operación.
HALT I/O Finaliza la operación del
canal.
TEST CHANNEL Prueba el estado del
canal.
TEST I/O Prueba el estado del canal,
el subcanal y el dispositivo de E/S.
Una operación de E/S se inicia con
la instrucción START I/O. La ubicación del programa de canal en la memoria
principal viene definida en la palabra de dirección de canal (CAW: Channel A
ddress word), que siempre está almacenada en la posición 72 de la memoria principal.
No hay comentarios:
Publicar un comentario