DMA y Discos María Elena Buemi 15 de junio 2010 María Elena Buemi () DMA y Discos 15 de junio 2010 1 / 27
Transferencias entre Módulos María Elena Buemi () DMA y Discos 15 de junio 2010 2 / 27
DMA según Wikipedia 1 El acceso directo a memoria (DMA, del inglés Direct Memory Access) permite acceso a la memoria para leer o escribir sin que CPU intervenga. 2 Muchos sistemas hardware utilizan DMA, incluyendo controladores de unidades de disco, tarjetas gráficas y tarjetas de sonido. 3 DMA es una característica esencial en todos los ordenadores modernos, ya que permite a dispositivos de diferentes velocidades comunicarse sin someter a la CPU a una carga masiva de interrupciones. 4 Una transferencia DMA consiste principalmente en copiar un bloque de memoria de un dispositivo a otro. 5 En lugar de que la CPU inicie la transferencia, la transferencia se lleva a cabo por el controlador DMA. María Elena Buemi () DMA y Discos 15 de junio 2010 3 / 27
Ejemplo, Wikipedia 1 Mover un bloque de memoria desde una memoria externa a una interna más rápida 2 Qué Dispositivo se ocupa? 3 DMA 4 Consecuencia? 5 CPU puede hacer otras tareas. María Elena Buemi () DMA y Discos 15 de junio 2010 4 / 27
Ejemplo, Wikipedia 1 Por qué DMA? 2 Aumenta el rendimiento de aplicaciones que necesiten muchos recursos. 3 Qué se necesita del Sistema, ya que no usa CPU? 4 Se necesitan las ĺıneas del sistema de interconexión(system Bus) María Elena Buemi () DMA y Discos 15 de junio 2010 5 / 27
Módulo DMA(Stallings) María Elena Buemi () DMA y Discos 15 de junio 2010 6 / 27
Funciones de DMA Stallings DMA es capaz de imitar al CPU, y efectivamente, toma el control del sistema. Para qué? Para hacer transferencias de datos - lectura o escritura - con la memoria por el sistema de bus. Cuando el procesador envía una petición de Lectura o Escritura, envía al DMA la siguiente información: 1 Read o Write ĺıneas entre CPU y DMA 2 Datos comunica la dirección del dispositivo de I/O, Posición en Memoria, cantidad de Palabras. 3 Registro de dirección guarda la dirección de Memoria. 4 Qué se necesita del Sistema, ya que no usa CPU? 5 El sistema de bus. María Elena Buemi () DMA y Discos 15 de junio 2010 7 / 27
Ejercicio 1 María Elena Buemi () DMA y Discos 15 de junio 2010 8 / 27
Protocolo entre DMA y Dispositivo E/S A continuación se describe el protocolo entre el controlador de DMA y un dispositivo de E/S para realizar transferencias de datos usando el I/O Bus. 1. El controlador DMA pone en el bus de direcciones el identificador del dispositivo con el que desea iniciar la comunicación y levanta la señal de Request, de RD o WR, según corresponda y baja la ĺınea de M/IO. 2. El controlador del dispositivo detecta la señal de Request y compara su propio identificador con el contenido del bus de direcciones. 3. Si coincide el identificador y el dispositivo se encuentra listo, el controlador del dispositivo levanta la señal de Ready. 4. El controlador DMA detecta la señal de Ready. En el caso de tratarse de una escritura, el controlador DMA pone el dato a escribir junto con su posición de memoria en los buses correspondientes. Por otro lado, en el caso de una lectura, el controlador de DMA pone la dirección del dato deseado. 5. El controlador DMA baja la señal de Request. 6. De tratarse de una escritura, el controlador del dispositivo ordena grabar el dato, o en el caso de una lectura pone el dato en el bus. Luego, baja la señal de Ready. 7. Si se trata de una lectura el DMAC lee el dato del bus de datos. 8. En ambos casos, lectura y escritura, el DMAC retira las ĺıneas y baja la señal de RD o WR según corresponda. 9. Si es una lectura, cuando el DMAC baja la señal de RD la controladora del dispositivo quita el dato del bus de datos. María Elena Buemi () DMA y Discos 15 de junio 2010 9 / 27
Protocolo entre DMA y Memoria Equivalente al que hay entre DMA y Dispositivo. Cambia el valor de la ĺınea M/IO y no se coloca en el bus el indentificador del dispositivo. María Elena Buemi () DMA y Discos 15 de junio 2010 10 / 27
Registros de DMA mapeados a Memoria La Placa de Captura de video tiene su espacio de direcciones mapeado amemoria en las direcciones FE00 a FF00. por simplicidad se supone que es una pantalla de video. El identificador de este dispositivo es 0x005F.(lo usaremos más adelante) El controlador de DMA posee los siguientes registros también mapeados a memoria en las direcciones indicadas: DEVICE (0xFFA0): identificador del dispositivo. DEVICE ADDRESS (0xFFA1): dirección de memoria (en el espacio de direccionamiento del dispositivo) que se desea leer/escribir. MEM ADDRESS (0xFFA2): dirección de memoria (en el espacio de direccionamiento de la memoria principal) que se desea leer/escribir. SIZE (0xFFA3): cantidad de datos a transferir. STATUS (0xFFA4): si bit 0 contiene 1 indica que ya se han cargado todos los datos necesarios, y se puede iniciar la transmisión. el bit 1 contiene un 1 en caso de escritura, y un 0 en caso contrario. María Elena Buemi () DMA y Discos 15 de junio 2010 11 / 27
Comportamiento del controlador de DMA Es el siguiente: cuando el bit 0 de STATUS contiene un 1 significa que se puede comenzar la transferencia. Si el bit 1 de STATUS es un 1 entonces será de IO a Memoria, si es 0 sera de Memoria a IO. Serán transferidos la cantidad de palabras que indique SIZE, de la dirección indicada por MEM ADDRESS a DEVICE ADDRESS o viceversa. María Elena Buemi () DMA y Discos 15 de junio 2010 12 / 27
Primitivas para obtener/liberar el bus: requestbus() : Solicita el bus para realizar cualquier transferencia. releasebus() : Libera el bus una vez que se termino de utilizar. María Elena Buemi () DMA y Discos 15 de junio 2010 13 / 27
Primitivas para leer/escribir valores en las señales: señal(es) Request Ready RD RW M/IO bus de datos bus de direcciones primitivas setrequest(x), getrequest() setready(x),getready() setread(x),getread() setwrite(x),getwrite() setmemoryio(x),getmemoryio() setdata(x),getdata() setaddress(x),getaddress() María Elena Buemi () DMA y Discos 15 de junio 2010 14 / 27
Qué hace cada primitiva setrequest(x): Setea la señal de Request con el valor de x(x en 1 ó 0) getrequest(): Devuelve el valor de Request setready(x): Setea la señal de Ready con el valor de x(x en 1 ó 0) getready(): Devuelve el valor de Ready setread(x): Setea la señal de RD con el valor de x(x en 1 ó 0) getread(): Devuelve el valor de RD setwrite(x): Setea la señal de RW con el valor de x(x en 1 ó 0) getwrite(): Devuelve el valor de RW setmemoryio(x): Setea la señal de M/IO con el valor de x(x en 1 ó 0) getmemoryio(): Devuelve el valor de M/IO setdata(x): Escribe x en el bus de datos getdata(): Lee el bus de datos setaddress(x): Escribe x en el bus de direcciones getaddress(): Lee el bus de direcciones María Elena Buemi () DMA y Discos 15 de junio 2010 15 / 27
a) Escribir el seudo-codigo que realiza el controlador de DMA MIENTRAS (true){ SI STATUS Tiene bit 0 en 1 ENTONCES{ SI STATUS tiene bit 1 en 1 ENTONCES { 1.Si se solicita transferir del I/O a Memoria 1.1 Leer del dispositivo al DMA 1.2 Escribir del DMA a la Memoria 1.3 actualiza registros Sino 2. Si en cambio se solicita Transferir de Memoria a Dispositivo 2.1 Lee de Memoria al DMA 2.2 Escribe de DMA a Dispositivo 3.3 actualiza registros FinSi FINSI} FINSI} FINMIENTRAS} } María Elena Buemi () DMA y Discos 15 de junio 2010 16 / 27
a)1.1. Tranferir de I/O a Memoria: Leer del dispositivo a DMA while(true) { if(status AND [10...0] =/= 0 ) { if( STATUS AND [010...0] =/= 0 ) { //comentario: IO a Memoria while( SIZE > 0 ) { requestbus() setmemoryio(0) setread(1) setwrite(0) setaddress(device) setrequest(1) wait while( getready() = 0 ) setaddress(device ADDRESS) setrequest(0) wait while( getready() = 1 ) tempdato < getdata() setread(0) releasebus() María Elena Buemi () DMA y Discos 15 de junio 2010 17 / 27
a)1.2 Tranferir de I/O a Memoria: Escribir de DMA a Memoria requestbus() setmemoryio(1) setread(0) setwrite(1) setrequest(1) wait while(getready() = 0) setaddress(mem ADDRESS) setdata(tempdato) setrequest(0) wait while(getready() = 1) setwrite(0) setmemoryio(0) releasebus() MEM ADDRESS <- MEM ADDRESS + 1 DEVICE ADDRESS <- DEVICE ADDRESS + 1 SIZE <- SIZE - 1 } STATUS <- STATUS AND [01...1] } María Elena Buemi () DMA y Discos 15 de junio 2010 18 / 27
a)2.1tranferir de Memoria a I/O: Leer de Memoria a DMA else { //comentario: IO a Memoria while( SIZE > 0 ) { requestbus() setmemoryio(1) setread(1) setwrite(0) setrequest(1) wait while( getready() = 0 ) setaddress(mem ADDRESS) setrequest(0) while( getready() = 1 ) tempdato < getdata() setmemoryio(0) setread(0) releasebus() María Elena Buemi () DMA y Discos 15 de junio 2010 19 / 27
a)2.2memoria a I/O: Escribir de DMA a I/O requestbus() setmemoryio(0) setread(0) setwrite(1) setaddress(device) setrequest(1) while(getready() = 0) setaddress(device ADDRESS) setdata(tempdato) setrequest(0) while(getready() = 1) setwrite(0) setmemoryio(0) releasebus() MEM ADDRESS <- MEM ADDRESS + 1 DEVICE ADDRESS <- DEVICE ADDRESS + 1 SIZE <- SIZE - 1 } STATUS <- STATUS AND [01...1] } enviarinterrupcion() } María Elena Buemi () DMA y Discos 15 de junio 2010 20 / 27
b)escribir rutina de interrupción La Placa de Captura de video tiene su espacio de direcciones mapeado amemoria en las direcciones FE00 a FF00. por simplicidad se supone que es una pantalla de video. El identificador de este dispositivo es 0x005F. Suponga que existe un proceso que muestra en la pantalla los cuadros de video capturados por la placa. Este proceso posee una rutina que escribe en la memoria principal el cuadro capturado. La placa capturadora genera una interrupción, cada vez que se captura un cuadro. Realizar el seudo-código de la rutina que atiende la interrupción de la placa. (El rango de memoria AB00 a AC00 esta reservado para guardar la pantalla capturada en memoria principal) María Elena Buemi () DMA y Discos 15 de junio 2010 21 / 27
b) Rutina rutina:...... MOV R1, 0xAB00 MOV R2, 0xFE00 MOV R0, 0x0100 ciclo: MOV [R1], [R2] ADD R1, 1 ADD R2, 1 SUB R0, 1 CMP R0, 0 JE fin fin: JMP ciclo...... RETI copia el ppio del rango de memoria en R1 María Elena Buemi () DMA y Discos 15 de junio 2010 22 / 27
c) Escribir rutina usando el controlador de DMA rutina:...... MOV [DEVICE], 0x005F MOV [DEVICE ADDRESS], 0x0000 MOV [MEM ADDRESS], 0xAB00 MOV [SIZE], 0x0100 OR [STATUS], 0x8000...... RETI María Elena Buemi () DMA y Discos 15 de junio 2010 23 / 27
Ejercicio 2: Discos A continuación se presentan algunos parámetros característicos de un disco rígido. Cantidad de Bytes por Sector : Sector bytes Bytes Cantidad de Platos o Cantidad de Cabezas : Cabezas Cantidad de Pistas por Plato o Cantidad de Cilindros : Cilindros Cantidad de Sectores por Pista : Sectores pista Tiempo entre Pistas adyacentes : T adyasentes Seg Tiempo promedio entre Pistas : T promedio Seg Latencia : T latencia Seg Capacidad del Buffer : Buffer Mb Velocidad de Rotacion : Disco rotacion RPM Velocidad de Transferencia de la Interfaz : Interfaz velocidad Mb/Seg María Elena Buemi () DMA y Discos 15 de junio 2010 24 / 27
Se pide: 1 Calcular los siguientes valores característicos a partir de los parámetros presentados. 1 Cantidad de Sectores totales. 2 Capacidad máxima en Mbytes. 3 Tiempo de lectura de un sector. 4 Tiempo de transferencia de un sector. 5 Tiempo de transferencia de n sectores consecutivos sobre una misma pista. María Elena Buemi () DMA y Discos 15 de junio 2010 25 / 27
Resolución- ambos ej. D. González Márquez 1 Sectores totales = Cabezas Cilindros Sectores pista 2 Capacidad total = Sectores totales Sector bytes 3 T Lectura.Sector = 60/( Disco rotacion Sectores pista ) 4 T Transferencia.Sector = T Lectura.Sector + Sector bytes /(2 20 Interfaz velocidad ) 5 T Transferencia.Sectores.Unica.Pista (n) = n T Transferencia.Sector + (n 1) T latencia María Elena Buemi () DMA y Discos 15 de junio 2010 26 / 27
Bibliografía Computer Organization and Architecture: Designing for Performance,8/E William Stallings. ISBN-10: 0136073735. ISBN-13: 9780136073734 Publisher: Prentice Hall. Copyright: 2010 Null, Linda. The essentials of computer organization and architecture / Linda Null, Julia Lobur. p. cm. ISBN 0-7637-0444-X María Elena Buemi () DMA y Discos 15 de junio 2010 27 / 27