El acceso
directo a memoria (DMA, del
inglés direct memory access)
permite a cierto tipo de componentes de una computadora acceder a la memoria del sistema para leer o
escribir independientemente de launidad central de procesamiento (CPU) principal. Muchos sistemas hardware utilizan
DMA, incluyendo controladores de unidades de disco, tarjetas gráficas y tarjetas de
sonido. 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.
Una transferencia DMA consiste principalmente en copiar un
bloque de memoria de un dispositivo a otro. En lugar de que la CPU inicie la
transferencia, esta se lleva a cabo por el controlador DMA. Un ejemplo típico es
mover un bloque de memoria desde una memoria externa a una interna más rápida.
Tal operación no ocupa al procesador y, por ende, éste puede efectuar otras
tareas. Las transferencias DMA son esenciales para aumentar el rendimiento de aplicaciones que requieran muchos recursos.
Cabe destacar que aunque no se necesite a la CPU para la
transacción de datos, sí se necesita el bus del sistema (tanto bus de datos como bus de direcciones), por lo
que existen diferentes estrategias para regular su uso, permitiendo así que no
quede totalmente acaparado por el controlador DMA.
Problemas
de coherencia en la memoria caché[editar]
La
DMA puede llevar a problemas de coherencia de caché. Imagine una CPU equipada
con una memoria caché y una memoria externa que se pueda acceder directamente
por los dispositivos que utilizan DMA. Cuando la CPU accede a X lugar en la
memoria, el valor actual se almacena en la caché. Si se realizan operaciones
posteriores en X, se actualizará la copia en caché de X, pero no la versión de
memoria externa de X. Si la caché no se vacía en la memoria antes de que otro
dispositivo intente acceder a X, el dispositivo recibirá un valor caducado de
X.
Del
mismo modo, si la copia en caché de X no es invalidada cuando un dispositivo
escribe un nuevo valor en la memoria, entonces la CPU funcionará con un valor
caducado de X.
Este
problema puede ser abordado en el diseño del sistema de las siguientes dos
formas :
Los
sistemas de caché coherente implementan un método en el hardware externo
mediante el cual se escribe una señal en el controlador de caché, la cual
realiza una invalidación de la caché para escritura de DMA o caché de descarga
para lectura de DMA.
Los
sistemas no-coherente dejan este software, donde el sistema operativo debe
asegurarse de que las líneas de caché se vacían antes de que una transferencia
de salida de DMA sea iniciada y anulada antes de que una parte de la memoria
sea afectada por una transferencia entrante de DMA que se haya requerido. El
sistema operativo debe asegurarse de que esa parte de memoria no es accedida
por cualquier subproceso que se ejecute en ese instante. Este último enfoque
introduce cierta sobrecarga a la operación de DMA, ya que la mayoría de
hardware requiere un bucle para invalidar cada línea de caché de forma
individual.
Los
híbridos también existen, donde en la caché secundaria L2 es coherente,
mientras que en la caché L1 (generalmente la CPU) es gestionado por el
software.
Secuencia
de eventos[editar]
Una
operación de E/S por DMA se establece ejecutando una corta rutina de
inicialización. Consiste en varias instrucciones de salida para asignar valores
iniciales a:
AR:
Dirección de memoria de la región de datos de E/S IOBUF (buffer de
entrada/salida).
WC:
Número N de palabras de datos a transferir.
Una
vez inicializado, el DMA procede a transferir datos entre IOBUF y el
dispositivo de E/S. Se realiza una transferencia cuando el dispositivo de E/S
solicite una operación de DMA a través de la línea de petición del DMAC.
Después
de cada transferencia, se decrementa el valor de WC y se incrementa el de AR.
La
operación termina cuando WC=0, entonces el DMAC (o el periférico) indica la
conclusión de la operación enviando al procesador una petición de interrupción.
Secuencia
de eventos detallada[editar]
El
procesador inicializa el DMAC programando AR y WC.
El
dispositivo de E/S realiza una petición de DMA al DMAC.
El
DMAC le responde con una señal de aceptación.
El
DMAC activa la línea de petición de DMA al procesador.
Al
final del ciclo del bus en curso, el procesador pone las líneas del bus del
sistema en alta impedancia y activa la sesión de DMA.
El
DMAC asume el control del bus.
El
dispositivo de E/S transmite una nueva palabra de datos al registro intermedio
de datos del DMAC.
El
DMAC ejecuta un ciclo de escritura en memoria para transferir el contenido del
registro intermedio a la posición M[AR].
El
DMAC decrementa WC e incrementa AR.
El
DMAC libera el bus y desactiva la línea de petición de DMA.
El
DMAC compara WC con 0:
Si
WC > 0, se repite desde el paso 2.
Si
WC = 0, el DMAC se detiene y envía una petición de interrupción al procesador.
Motor
de acceso directo a memoria[editar]
Además
de la interacción de hardware, el acceso directo a memoria puede ser utilizado
para descargar costosas operaciones de memoria, tales como copias de gran
tamaño u operaciones de dispersión-reunión, desde la CPU a un motor de acceso
directo a memoria dedicada. Intel incluye estos motores en los servidores de
gama alta, llamado I/O Acceleration Technology (IOAT)..
Transferencias[editar]
Durante
las operaciones del DMA, el rendimiento del sistema puede verse afectado debido
a que este dispositivo hace un uso intensivo del bus y por lo tanto la cpu no
puede leer datos de memoria, por ejemplo para leer la siguiente instrucción a
ejecutar. Esto provoca que mientras el DMA está operando, la cpu deba esperar a
que finalice dicha tarea sin ejecutar ninguna instrucción. Para solventar esto,
existe una memoria cache dentro de la CPU que permite a ésta seguir trabajando
mientras el DMA mantiene ocupado el bus.
En
computadores que no disponen de memoria cache, el DMA debe realizar su tarea
evitando ocupar el bus de datos mientras la CPU realiza la fase de captación de
la instrucción. A partir de estas dos posibilidades, existen dos tipos de
transferencias de datos del DMA:
Transferencias
modo ráfaga
una
vez que la CPU concede el bus al DMA, este no lo libera hasta que finaliza su
tarea completamente.
Este
tipo de transferencia se usa en sistemas que disponen de una memoria cache en
la unidad de procesamiento, ya que mientras la CPU puede seguir trabajando
utilizando la cache.
Transferencias
modo robo de ciclo
una
vez que la CPU concede el bus al DMA, este lo vuelve a liberar al finalizar de
transferir cada palabra. Teniendo que solicitar de nuevo el permiso de uso del
bus a la CPU. Esta operación se repite hasta que el DMA finaliza la tarea. Este
tipo de transferencia se suele usar en sistema que no disponen de memoria cache
en la unidad de procesamiento, ya que de este modo, aunque la transferencia de
datos tarda más en realizarse, la CPU puede seguir ejecutando instrucciones.
Ejemplos[editar]
ISA[editar]
Por
ejemplo, un PC con arquitectura ISA con controlador de DMA basado en el Intel
8237, el cual es un controlador de DMA multimodo, que es una combinación de
hardware-software. En los IBM antiguos, sólo había un controlador DMA capaz de
ofrecer cuatro canales DMA (numerados 0-3). Estos canales DMA realizan las
transferencias de 8 bits y sólo pueden dirigirse al primer megabyte de RAM. Con
la IBM PC/AT, un segundo controlador de DMA 8237, fue añadido (canales 5-7; el
canal 4 no se puede utilizar), y el registro página fue recableado para abordar
la completa memoria de 16 MB de espacio de direcciones de la CPU 80286. Este
segundo controlador realiza las transferencias de 16 bits.
Debido
a su desempeño rezagado (2,5 Mbit / s [1]), estos dispositivos están dejando de
ser utilizados desde la aparición del procesador 80386 y su capacidad de
transferencia de 32 bits. Aún son admitidas en la medida en que son necesarias
para apoyar incorporaciones hardware en las máquinas modernas.
Cada
canal de DMA tiene un registro de dirección de 16-bit y un recuento de 16-bit
del registro asociado a él. Para iniciar una transferencia de datos el
controlador de dispositivo establece la dirección del canal de acceso directo a
memoria y registros, los cuales contarán conjuntamente con la dirección de la
transferencia de datos, leer o escribir. A continuación, indica al DMA para
iniciar la transferencia. Cuando la transferencia se haya completado, el
dispositivo interrumpe la CPU.
Es
equivalente a la de encadenar múltiples peticiones simples del DMA. La
motivación es la carga de múltiples entradas y salidas de interrupción y copiar
los datos de las tareas de la CPU.
DRQ
representa petición DMA ; DACK para reconocer DMA . Estos símbolos, visto en el
hardware esquemas de los sistemas informáticos con funciones DMA, representan
las líneas de señalización electrónica entre la CPU y el controlador DMA. Cada
canal de DMA tiene una solicitud y una línea de reconocer. Un dispositivo
correctamente configurado que utiliza DMA debe ser puenteado para utilizar las
dos líneas del canal DMA asignado.
Norma
ISA de asignaciones DMA:
0
Refrescar DRAM (obsoleto),
1
Usar hardware,
2
Disquete controlador,
3
Disco duro (obsoleto),
4
XT Cascada del controlador DMA,
5
Disco duro ( PS/2 solamente), hardware del usuario para todos los demás
6
Usuario del hardware.
PCI[editar]Como
se mencionó anteriormente, un PC con arquitectura PCI no tiene ningún
controlador central de DMA, a diferencia del ISA. Por el contrario, cualquiera
de los componentes PCI puede pedir el control del bus ("convertirse en el
bus maestro") y pedir leer y escribir desde la memoria del sistema. Más
precisamente, un componente de peticiones PCI tiene la propiedad de autobús
desde el controlador de bus PCI, y arbitrar si la petición de varios
dispositivos al mismo tiempo la propiedad de autobuses, ya que sólo puede haber
un maestro de bus al mismo tiempo. Cuando el componente concede la propiedad,
se leerán y escribirán comandos en el bus PCI, que se solicite por el
controlador del bus y se remitirá al controlador de memoria usando un esquema
que es específico de cada chipset.
Como
puede verse, hay un buen número de pasos necesarios para una transferencia DMA,
sin embargo, plantea muchos problemas, ya que el dispositivo PCI o bus PCI sí
son más lentos que el resto de componentes.
Un
moderno procesador x86 puede usar más de 4 GB de memoria, utilizando PAE, un
modo de direccionamiento de 36 bits. En tal caso, un dispositivo que utiliza
DMA con un poco de dirección de bus-32 es incapaz de tener una dirección de
memoria por encima de la línea 4 GB. El nuevo ciclo de doble dirección (DAC),
si se aplican tanto en el bus PCI y el propio dispositivo, permite el acceso
directo de memoria de 64-bit de direccionamiento. De lo contrario, el sistema
operativo tendría que solucionar el problema, ya sea usando costosos
amortiguadores dobles (nomenclatura de Windows), también conocido como
amortiguadores rebote (Linux), o puede utilizar un IOMMU para proporcionar
servicios de traducción de direcciones, si uno está presente.
AHB[editar] En sistemas integrados en chips y en sistemas
embebidos, la típica estructura de bus es un complejo bus integrado tal como el
AMBA, de alto rendimiento. AMBA define dos tipos de componentes AHB: maestro y
esclavo.
Una
interfaz de esclavo es similar a la entrada/salida programada por software, que
puede leer/escribir en registros de entrada/salida o (menos común) bloques
locales de memoria dentro del dispositivo.
Una
interfaz máster puede ser usada por el dispositivo para mejorar las
transacciones del DMA hacia la memoria del sistema sin ralentizar a la CPU.
Por
tanto dispositivos de un alto ancho de banda como los controladores de redes
que necesitan transferir grandes cantidades de datos desde/hacia la memoria del
sistema, tendrán dos adaptadores de interfaz hacia el bus AHB, una interfaz
para máster y otra para esclavo. Esto es porque los buses integrados como el
AHB no soportan el triestado en el bus.
En
el caso del PCI, por ejemplo, no se necesita un controlador DMA central desde
que los buses del DMA siguen una interfaz de maestro, pero se necesita de un
circuito que gestione los casos en que haya varios buses máster presentes en el
sistema.
Internamente,
en los dispositivos existe un motor multicanal DMA controlar los casos de
concurrencia.
Acelerador
de entrada y salida en Xeon[editar] Como
ejemplo de desarrollos de DMA incorporados a procesadores de propósito general,
destacan los nuevos conjuntos de chips Intel Xeon que incluyen la nueva
tecnología de DMA denominada I/O Acceleration Technology (I/OAT), destinada a
mejorar el desarrollo de las redes con interfaces de red de altas prestaciones
como por ejemplo la red Gigabit Ethernet, sin embargo en varios benchmarks se
ha demostrado una mejora de no más del 10%.
No hay comentarios:
Publicar un comentario