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