¿Qué significa "DMA"?
La ortografía inglesa de DMA es "Acceso directo a la memoria", que en chino significa acceso directo a la memoria. Es un modo de intercambio de datos que accede directamente a los datos de la memoria sin pasar por la CPU. En el modo PIO, la transmisión de datos entre el disco duro y la memoria está controlada por la CPU; en el modo DMA, la CPU solo necesita enviar instrucciones al controlador DMA y dejar que el controlador DMA maneje la transmisión de datos. Una vez completado, la información se envía a la CPU, lo que reduce en gran medida la ocupación de recursos de la CPU. La diferencia entre el modo DMA y el modo PIO es que el modo DMA no depende demasiado de la CPU y puede ahorrar en gran medida recursos del sistema. La diferencia en la velocidad de transmisión entre los dos no es muy obvia. El modo DMA se puede dividir en dos tipos: DMA de una sola palabra (DMA de un solo byte) y DMA de múltiples palabras (DMA de varios bytes). La velocidad de transferencia máxima que se puede lograr es de solo 16,6 MB/s.
El controlador de acceso directo a memoria (DMA) es un periférico único que mueve datos dentro del sistema. Considérelo como un dispositivo que conecta la memoria interna y externa a cada periférico compatible con DMA a través de un conjunto de controladores conectados. Es un periférico porque realiza transferencias bajo el control programado del procesador. Vale la pena señalar que, por lo general, solo los periféricos con un gran tráfico de datos (kBps o superior) necesitan admitir capacidades DMA. Los ejemplos típicos de estas aplicaciones incluyen interfaces de video, audio y red.
En términos generales, un controlador DMA incluirá un bus de direcciones, un bus de datos y registros de control. Un controlador DMA eficiente tendrá la capacidad de acceder a cualquier recurso que necesite sin intervención del propio procesador, que debe ser capaz de generar interrupciones. Finalmente, debe poder calcular la dirección dentro del controlador.
Un procesador puede contener múltiples controladores DMA. Cada controlador tiene múltiples canales DMA y múltiples buses que se conectan directamente a bancos de memoria y periféricos, como se muestra en la Figura 1. En muchos procesadores de alto rendimiento se integran dos tipos de controladores DMA. El primer tipo suele denominarse "controlador DMA del sistema" y puede lograr acceso a cualquier recurso (periféricos y memoria). Para este tipo de controlador, el número de ciclos de señal lo cuenta el reloj del sistema (SCLK), tomando el procesador Blackfin de ADI. por ejemplo, la frecuencia puede alcanzar hasta 133MHz. El segundo tipo se llama controlador DMA de memoria interna (IMDMA), que se dedica a operaciones de acceso mutuo entre ubicaciones de memoria interna. Debido a que los accesos ocurren internamente (L1-L1, L1-L2 o L2-L2), el conteo de ciclos se basa en el reloj central (CCLK), que puede alcanzar velocidades superiores a 600 MHz.
Cada controlador DMA tiene un conjunto de FIFO que actúan como buffers entre el subsistema DMA y los periféricos o la memoria. Para MemDMA (Memoria DMA), existe un conjunto de FIFO tanto en el extremo de origen como en el de destino de la transferencia. Cuando los recursos son escasos y no se puede completar la transmisión de datos, FIFO puede proporcionar un área de almacenamiento temporal para los datos, mejorando así el rendimiento.
Debido a que normalmente configura el controlador DMA durante la inicialización del código, el kernel solo necesita responder a las interrupciones después de que se completa la transferencia de datos. Puede programar el control DMA para mover datos en paralelo con el núcleo, mientras el núcleo realiza sus tareas de procesamiento básicas: el trabajo en el que debería centrarse.