¿Qué es, cómo funciona una unidad DMA y cuál es su utilidad?

¿Qué es, cómo funciona una unidad DMA y cuál es su utilidad?

Josep Roca

Las unidades DMA se encuentran en todo tipo de hardware, se trata de una de las piezas fundamentales para comunicar los periféricos entre sí y con la memoria principal. Mientras que la IOMMU se encarga de gestionar el direccionamiento es la unidad DMA la que hace el trabajo de transferir datos desde la memoria a un periférico de manera directa. Os explicamos cómo funcionan estas unidades y los diferentes tipos.

En los inicios de la informática doméstica no existían las unidades DMA, por lo que cuando los periféricos tenían que comunicarse con la memoria RAM lo hacían de dos maneras distintas:

  • Algunas CPUs tenían un pin HALT que al recibir una señal paraban su actividad para recuperarla en el mismo punto más tarde.
  • Había casos en los que el acceso a la RAM era intercalado entre la CPU y los periféricos.

Es por ello que se hizo necesario el añadido de controladores de acceso directo a la memoria o DMAs, con tal de facilitar el trabajo a la hora de transmitir los datos.

Funcionamiento de una unidad DMA

Diagrama DMA

El funcionamiento de una unidad DMA es el siguiente:

  1. Se especifica una dirección de memoria en origen
  2. Se especifica la cantidad de datos que se quiere transmitir
  3. Se especifica como destino una dirección de memoria.
  4. Se realiza la transferencia de los datos de una memoria a otra.

Las unidades DMA se utilizan principalmente darles acceso a los periféricos a la RAM del sistema, pero también se utilizan para transmitir datos desde la RAM del sistema a las RAMs locales de los diferentes periféricos como la VRAM. Esto lo hacen sin que ningún procesador tenga que realizar la transferencia de datos de una memoria a otra, haciendo que se puedan dedicar a realizar otras tareas.

Canales de comunicación

Canales DMA

Un controlador DMA puede tener varios canales diferentes, esto es porque se puede buscar realizar varios enviós simultáneos con orígenes y destinos distintos. Es más, los canales DMA se utilizan para comunicar un procesador con sus coprocesadores de manera directa y no solo para acceder a la memoria.

AMD-Smart-Access-Memory

Por ejemplo. el Resizable Bar del PCI Express, en el cual se basa el Smart Access Memory de AMD, es posible gracias a que una unidad DMA comunica la CPU con la VRAM de manera directa.

También es el caso de las tarjetas gráficas duales, ya sean con dos chips en una misma placa o en dos tarjetas distintas, donde las interfaces Crossfire de AMD y SLI de NVIDIA no dejan de ser unidades DMA conectadas entre sí.

Modos de funcionamiento de una unidad DMA

DMA caminos

Hay que tener en cuenta que una unidad DMA puede funcionar de una de las siguientes maneras, con ambas o con las tres al mismo tiempo, dependerá como haya sido diseñada de cara a la transferencia de datos.

  • Modo Burst: En este modo la unidad DMA envía una interrupción que paraliza el uso de la memoria por parte del procesador, el cual se mantendrá en pausa hasta que la unidad DMA haya terminado la transferencia.
  • Modo Cycle Stealing: Por cada x bytes transmitidos, la unidad DMA le devuelve el acceso a la memoria al procesador. Al contrario que con el caso anterior no requiere que el procesador este largos periodos de tiempo parado.
  • Modo transparente: En este modo, la unidad DMA solo transmite datos cuando la CPU ejecuta una instrucción que no requiere el acceso a la memoria..

No solamente sirven para transmitir datos

RTX IO Descompresor

Una de las cosas que permiten las unidades DMA es variar la naturaleza de los datos que transmiten, por ejemplo, podemos tener un dato comprimido en el origen y tenerlo descomprimido en el destino e incluso decodificar un formato de medios..

Debido a que una unidad DMA lo que hace es transmitir un bloque de datos desde un origen a un destino entonces puede tener un acelerador o una unidad de función fija que manipule la información. Esto es sumamente útil a la hora de decodificar datos multimedia como los siguientes:

  • Formatos de imagen como JPEG, GIF. PNG.
  • Formatos de música como MP3, OGG, etc.
  • Formatos de video de todo tipo.
  • Formatos de compresión de archivos como: Zlib, 7z, etc.

Las unidades DMA también se encargan de la comunicación interna

DMA SPMAlgunos aceleradores y coprocesadores no utilizan la memoria del sistema y ni siquiera la suya propia al estar dentro del procesador y con su memoria dentro del mismo, estas unidades necesitan una interfaz DMA que les permita enviar y recibir datos. En algunos casos concretos se le asignan canales del DMA principal del procesador al que asisten en exclusiva.

Esto es especialmente utilizado cuando tenemos una scratchpad RAM, la cual es un tipo de memoria RAM que se encuentra dentro del procesador y con un camino de datos diferente a la RAM. La mayoría de coprocesadores y aceleradores tienen asignada una memoria del tipo scratchpad para uso local donde la única forma de acceder a ella es a través de canales DMA concretos.