De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

El acceso directo a la memoria ( DMA ) es una característica de los sistemas informáticos que permite que ciertos subsistemas de hardware accedan a la memoria principal del sistema ( memoria de acceso aleatorio ) independientemente de la unidad central de procesamiento (CPU).

Sin DMA, cuando la CPU está usando una entrada / salida programada , normalmente está completamente ocupada durante toda la operación de lectura o escritura y, por lo tanto, no está disponible para realizar otro trabajo. Con DMA, la CPU primero inicia la transferencia, luego realiza otras operaciones mientras la transferencia está en progreso, y finalmente recibe una interrupción del controlador DMA (DMAC) cuando la operación finaliza. Esta función es útil en cualquier momento en que la CPU no pueda mantener el ritmo de transferencia de datos, o cuando la CPU necesite realizar un trabajo mientras espera una transferencia de datos de E / S relativamente lenta. Muchos sistemas de hardware utilizan DMA, incluidos controladores de unidades de disco , tarjetas gráficas , tarjetas de red y tarjetas de sonido.. DMA también se utiliza para la transferencia de datos dentro del chip en procesadores de varios núcleos . Las computadoras que tienen canales DMA pueden transferir datos hacia y desde dispositivos con mucho menos sobrecarga de CPU que las computadoras sin canales DMA. De manera similar, un elemento de procesamiento dentro de un procesador multinúcleo puede transferir datos hacia y desde su memoria local sin ocupar el tiempo de su procesador, lo que permite que el cálculo y la transferencia de datos se realicen en paralelo.

DMA también se puede utilizar para copiar o mover datos de "memoria a memoria" dentro de la memoria. DMA puede descargar costosas operaciones de memoria, como copias grandes u operaciones de dispersión y recopilación , desde la CPU a un motor DMA dedicado. Un ejemplo de aplicación es la aceleración de E / S tecnología . DMA es de interés en arquitecturas informáticas de red en chip y en memoria .

Principios [ editar ]

De terceros [ editar ]

DMA estándar, también llamado DMA de terceros, utiliza un controlador DMA. Un controlador DMA puede generar direcciones de memoria e iniciar ciclos de lectura o escritura de memoria. Contiene varios registros de hardware que la CPU puede escribir y leer. Estos incluyen un registro de dirección de memoria, un registro de recuento de bytes y uno o más registros de control. Dependiendo de las características que proporcione el controlador DMA, estos registros de control pueden especificar alguna combinación del origen, el destino, la dirección de la transferencia (lectura del dispositivo de E / S o escritura en el dispositivo de E / S), el tamaño del unidad de transferencia y / o el número de bytes a transferir en una ráfaga. [1]

Para llevar a cabo una operación de entrada, salida o memoria a memoria, el procesador host inicializa el controlador DMA con un recuento del número de palabras a transferir y la dirección de memoria a usar. Luego, la CPU ordena al dispositivo periférico que inicie una transferencia de datos. El controlador DMA luego proporciona direcciones y líneas de control de lectura / escritura a la memoria del sistema. Cada vez que un byte de datos está listo para ser transferido entre el dispositivo periférico y la memoria, el controlador DMA incrementa su registro de dirección interno hasta que se transfiere el bloque completo de datos.

Masterización de bus [ editar ]

En un sistema de masterización de bus , también conocido como sistema DMA de primera parte, se puede otorgar a la CPU y los periféricos el control del bus de memoria. Cuando un periférico puede convertirse en un bus maestro, puede escribir directamente en la memoria del sistema sin la participación de la CPU, proporcionando direcciones de memoria y señales de control según sea necesario. Se deben tomar algunas medidas para poner el procesador en una condición de espera para que no ocurra la contención del bus.

Modos de funcionamiento [ editar ]

Modo ráfaga [ editar ]

En el modo de ráfaga , se transfiere un bloque completo de datos en una secuencia contigua. Una vez que el controlador DMA obtiene acceso al bus del sistema por parte de la CPU, transfiere todos los bytes de datos en el bloque de datos antes de liberar el control de los buses del sistema de regreso a la CPU, pero deja la CPU inactiva durante períodos de tiempo relativamente largos. El modo también se denomina "Modo de transferencia en bloque".

Modo de robo de ciclo [ editar ]

El modo de robo de ciclo se utiliza en sistemas en los que la CPU no debe desactivarse durante el tiempo necesario para los modos de transferencia por ráfagas. En el modo de robo de ciclo, el controlador DMA obtiene acceso al bus del sistema de la misma manera que en el modo de ráfaga, utilizando BR ( Solicitud de bus ) y BG ( Concesión de bus ) signals, which are the two signals controlling the interface between the CPU and the DMA controller. However, in cycle stealing mode, after one byte of data transfer, the control of the system bus is deasserted to the CPU via BG. It is then continually requested again via BR, transferring one byte of data per request, until the entire block of data has been transferred. By continually obtaining and releasing the control of the system bus, the DMA controller essentially interleaves instruction and data transfers. The CPU processes an instruction, then the DMA controller transfers one data value, and so on. Data is not transferred as quickly, but CPU is not idled for as long as in burst mode. Cycle stealing mode is useful for controllers that monitor data in real time.

Transparent mode[edit]

El modo transparente toma más tiempo para transferir un bloque de datos, pero también es el modo más eficiente en términos de rendimiento general del sistema. En modo transparente, el controlador DMA transfiere datos solo cuando la CPU está realizando operaciones que no utilizan los buses del sistema. La principal ventaja del modo transparente es que la CPU nunca deja de ejecutar sus programas y la transferencia DMA es gratuita en términos de tiempo, mientras que la desventaja es que el hardware necesita determinar cuándo la CPU no está utilizando los buses del sistema, lo que puede ser complejo. . Esto también se denomina " modo de transferencia de datos DMA oculta ".

Coherencia de caché [ editar ]

Incoherencia de caché debido a DMA

DMA puede provocar problemas de coherencia de la caché . Imagine una CPU equipada con una memoria caché y una memoria externa a la que se pueda acceder directamente mediante dispositivos que utilicen DMA. Cuando la CPU accede a la ubicación X en la memoria, el valor actual se almacenará en la caché. Las operaciones posteriores en X actualizarán la copia en caché de X, pero no la versión de memoria externa de X, asumiendo una caché de escritura diferida . Si el caché no se vacía en la memoria antes de la próxima vez que un dispositivo intente acceder a X, el dispositivo recibirá un valor obsoleto de X.

De manera similar, si la copia en caché de X no se invalida cuando un dispositivo escribe un nuevo valor en la memoria, entonces la CPU funcionará con un valor obsoleto de X.

Este problema se puede abordar de dos maneras en el diseño del sistema: Los sistemas coherentes con la caché implementan un método en el hardware, llamado bus snooping , mediante el cual las escrituras externas se señalan al controlador de la caché, que luego realiza una invalidación de la caché para las escrituras DMA o el vaciado de la caché para DMA lee. Los sistemas no coherentes dejan esto en manos del software, donde el sistema operativo debe asegurarse de que las líneas de caché se vacíen antes de que se inicie una transferencia DMA saliente y se invalide antes de que se acceda a un rango de memoria afectado por una transferencia DMA entrante. Mientras tanto, el sistema operativo debe asegurarse de que ningún subproceso en ejecución acceda al rango de memoria. El último enfoque introduce algunos gastos generales en la operación de DMA, ya que la mayoría del hardware requiere un bucle para invalidar cada línea de caché individualmente.

También existen híbridos, donde la caché L2 secundaria es coherente mientras que la caché L1 (generalmente en la CPU) es administrada por software.

Ejemplos [ editar ]

ISA [ editar ]

En el IBM PC original (y el siguiente PC / XT ), solo había un controlador Intel 8237 DMA capaz de proporcionar cuatro canales DMA (numerados del 0 al 3). Estos canales DMA realizaban transferencias de 8 bits (ya que el 8237 era un dispositivo de 8 bits, idealmente adaptado a la arquitectura de bus / CPU i8088 de la PC ), solo podían abordar el primer megabyte de RAM (estándar i8086 / 8088) y eran limitados a direccionamiento único de 64  kBsegmentos dentro de ese espacio (aunque los canales de origen y destino podrían abordar diferentes segmentos). Además, el controlador solo se puede usar para transferencias hacia, desde o entre dispositivos de E / S de bus de expansión, ya que el 8237 solo puede realizar transferencias de memoria a memoria utilizando los canales 0 y 1, de los cuales el canal 0 en la PC (& XT ) se dedicó a la actualización dinámica de la memoria . Esto impidió que se utilizara como un " Blitter " de propósito general y, en consecuencia, los movimientos de memoria de bloques en la PC, limitados por la velocidad PIO general de la CPU, eran muy lentos.

Con el IBM PC / AT , el AT Bus mejorado (más familiarmente llamado ISA , o "Arquitectura estándar de la industria") agregó un segundo controlador DMA 8237 para proporcionar tres adicionales, y como se destaca por los conflictos de recursos con la capacidad de expansión adicional del XT sobre el PC original, canales muy necesarios (5-7; el canal 4 se usa como cascada al primer 8237). El registro de página también se reconectó para abordar el espacio completo de direcciones de memoria de 16 MB de la CPU 80286. Este segundo controlador también se integró de una manera capaz de realizar transferencias de 16 bits cuando se usa un dispositivo de E / S como fuente y / o destino de datos (ya que en realidad solo procesa los datos en sí para transferencias de memoria a memoria, de lo contrario simplemente controladorel flujo de datos entre otras partes del sistema de 16 bits, lo que hace que su propio ancho de bus de datos sea relativamente inmaterial), duplicando el rendimiento de datos cuando se utilizan los tres canales superiores. Por compatibilidad, los cuatro canales DMA inferiores todavía estaban limitados a transferencias de 8 bits solamente, y aunque las transferencias de memoria a memoria ahora eran técnicamente posibles debido a la liberación del canal 0 de tener que manejar la actualización de DRAM, desde un punto de vista práctico eran de valor limitado debido al consiguiente bajo rendimiento del controlador en comparación con lo que la CPU podía lograr ahora (es decir, un 80286 de 16 bits más optimizado que se ejecuta a un mínimo de 6 MHz, frente a un controlador de 8 bits bloqueado a 4,77 MHz). En ambos casos, el límite del segmento de 64 kBEl problema persistió, con transferencias individuales incapaces de cruzar segmentos (en lugar de "envolverse" hasta el inicio del mismo segmento) incluso en el modo de 16 bits, aunque en la práctica esto era más un problema de complejidad de programación que de rendimiento, ya que la necesidad continua de DRAM La actualización (sin importar cómo se manejara) para monopolizar el bus aproximadamente cada 15  μs impidió el uso de transferencias en bloque grandes (y rápidas, pero ininterrumpidas).

Debido a su retraso en el rendimiento (1,6  MB / s de capacidad máxima de transferencia de 8 bits a 5 MHz, [2] pero no más de 0,9 MB / s en el PC / XT y 1,6 MB / s para transferencias de 16 bits en el AT debido a los gastos generales del bus ISA y otras interferencias, como interrupciones en la actualización de la memoria [3] ) y la falta de disponibilidad de cualquier grado de velocidad que permitiría la instalación de reemplazos directos operando a velocidades más altas que el reloj estándar de 4.77 MHz de la PC original, estos dispositivos han sido efectivamente obsoletos desde finales de los 80. En particular, la llegada del procesador 80386 en 1985 y su capacidad para transferencias de 32 bits (aunque grandes mejoras en la eficiencia del cálculo de direcciones y la memoria de bloques se mueven en las CPU Intel después del 80186significó que las transferencias PIO incluso por el bus de 16 bits 286 y 386SX podrían superar fácilmente al 8237), así como el desarrollo de evoluciones adicionales a ( EISA ) o reemplazos para ( MCA , VLB y PCI ) el bus "ISA" con sus propios subsistemas DMA de rendimiento mucho más alto (hasta un máximo de 33 MB / s para EISA, 40 MB / s MCA, típicamente 133 MB / s VLB / PCI) hicieron que los controladores DMA originales parecieran más una piedra de molino de rendimiento que un aumentador de presión. Fueron admitidos en la medida en que sean necesarios para admitir hardware de PC heredado integrado en máquinas posteriores. Las piezas de hardware heredado que continuaron usando ISA DMA después de que los buses de expansión de 32 bits se volvieran comunes fueron Sound Blastertarjetas necesarias para mantener una compatibilidad total de hardware con el estándar Sound Blaster; y dispositivos Super I / O en placas base que a menudo integran un controlador de disquete incorporado , un controlador de infrarrojos IrDA cuando se selecciona el modo FIR (infrarrojo rápido) y un controlador de puerto paralelo IEEE 1284 cuando se selecciona el modo ECP. En los casos en los que todavía se usaban 8237s originales o compatibles directos, la transferencia hacia o desde estos dispositivos aún puede estar limitada a los primeros 16 MB de RAM principal, independientemente del espacio de direcciones real del sistema o la cantidad de memoria instalada.

Cada canal DMA tiene un registro de direcciones de 16 bits y un registro de recuento de 16 bits asociado. Para iniciar una transferencia de datos, el controlador del dispositivo configura la dirección del canal DMA y los registros de recuento junto con la dirección de la transferencia de datos, lectura o escritura. Luego le indica al hardware DMA que comience la transferencia. Cuando se completa la transferencia, el dispositivo interrumpe la CPU.

El DMA de E / S vectorizado o de recopilación de dispersión permite la transferencia de datos hacia y desde múltiples áreas de memoria en una sola transacción DMA. Es equivalente a encadenar varias solicitudes DMA simples. La motivación es descargar múltiples interrupciones de entrada / salida y tareas de copia de datos de la CPU.

DRQ significa solicitud de datos ; DACK para reconocimiento de datos . Estos símbolos, que se ven en los esquemas de hardware de los sistemas informáticos con funcionalidad DMA, representan líneas de señalización electrónica entre la CPU y el controlador DMA. Cada canal DMA tiene una línea de solicitud y una de reconocimiento. Un dispositivo que usa DMA debe estar configurado para usar ambas líneas del canal DMA asignado.

Masterización de bus permitida ISA de 16 bits. [4]

Asignaciones estándar de ISA DMA:

  1. Actualización de DRAM (obsoleta),
  2. Hardware de usuario, normalmente tarjeta de sonido DMA de 8 bits
  3. Controlador de disquete ,
  4. Disco duro (obsoleto por los modos PIO y reemplazado por los modos UDMA ), puerto paralelo (puerto compatible con ECP), ciertos clones de SoundBlaster como el OPTi 928.
  5. Controlador en cascada a PC / XT DMA,
  6. Disco duro (solo PS / 2 ), hardware de usuario para todos los demás, normalmente tarjeta de sonido DMA de 16 bits
  7. Hardware de usuario.
  8. Hardware de usuario.

PCI [ editar ]

Una arquitectura PCI no tiene un controlador DMA central, a diferencia de ISA. En cambio, cualquier dispositivo PCI puede solicitar el control del bus ("convertirse en el maestro del bus ") y solicitar leer y escribir en la memoria del sistema. Más precisamente, un componente PCI solicita la propiedad del bus del controlador de bus PCI (generalmente el puente de host PCI y el puente de PCI a PCI [5] ), que arbitrará si varios dispositivos solicitan la propiedad del bus simultáneamente, ya que solo puede haber un maestro de bus en una vez. Cuando se le otorga la propiedad al componente, emitirá comandos normales de lectura y escritura en el bus PCI, que serán reclamados por el controlador del bus PCI.

Por ejemplo, en una PC basada en AMD Socket AM2 , el southbridge enviará las transacciones al controlador de memoria (que está integrado en el chip de la CPU) mediante HyperTransport , que a su vez las convertirá en operaciones DDR2 y las enviará a la Bus de memoria DDR2. Como resultado, hay varios pasos involucrados en una transferencia PCI DMA; sin embargo, eso plantea un pequeño problema, ya que el dispositivo PCI o el bus PCI en sí son un orden de magnitud más lentos que el resto de los componentes (consulte la lista de anchos de banda del dispositivo ).

Una CPU x86 moderna puede usar más de 4 GB de memoria, utilizando la Extensión de dirección física (PAE), un modo de direccionamiento de 36 bits o el modo nativo de 64 bits de las CPU x86-64 . En tal caso, un dispositivo que usa DMA con un bus de direcciones de 32 bits no puede direccionar la memoria por encima de la línea de 4 GB. El nuevo mecanismo de ciclo de doble dirección (DAC), si se implementa tanto en el bus PCI como en el dispositivo mismo, [6] habilita el direccionamiento DMA de 64 bits. De lo contrario, el sistema operativo tendría que solucionar el problema utilizando costosos búferes dobles (nomenclatura de DOS / Windows), también conocidos como búfer de rebote ( FreeBSD / Linux), o podría usar un IOMMU. para proporcionar servicios de traducción de direcciones si hay alguno presente.

I / OAT [ editar ]

Como ejemplo de motor DMA incorporado en una CPU de uso general, algunos conjuntos de chips Intel Xeon incluyen un motor DMA llamado I / O Acceleration Technology (I / OAT), que puede descargar la copia de memoria de la CPU principal, dejándola libre para realizar otros trabajos. . [7] En 2006, el desarrollador del kernel de Linux de Intel, Andrew Grover, realizó evaluaciones comparativas utilizando I / OAT para descargar copias de tráfico de red y no encontró más del 10% de mejora en la utilización de CPU con cargas de trabajo de recepción. [8]

DDIO [ editar ]

Se han introducido mejoras adicionales orientadas al rendimiento del mecanismo DMA en los procesadores Intel Xeon E5 con su función Data Direct I / O ( DDIO ), lo que permite que las "ventanas" DMA residan dentro de los cachés de la CPU en lugar de la RAM del sistema. Como resultado, las memorias caché de la CPU se utilizan como fuente principal y destino para E / S, lo que permite que los controladores de interfaz de red(NIC) a DMA directamente a la caché de último nivel (caché L3) de las CPU locales y evitar la recuperación costosa de los datos de E / S de la RAM del sistema. Como resultado, DDIO reduce la latencia general de procesamiento de E / S, permite que el procesamiento de E / S se realice completamente en caché, evita que el ancho de banda / latencia de RAM disponible se convierta en un cuello de botella de rendimiento y puede reducir el consumo de energía al permitir RAM para permanecer más tiempo en estado de baja potencia. [9] [10] [11] [12]

AHB [ editar ]

En sistemas integrados y en sistemas en chip , la infraestructura de bus del sistema típica es un bus en chip complejo, como el bus de alto rendimiento AMBA . AMBA define dos tipos de componentes AHB: maestro y esclavo. Una interfaz esclava es similar a la E / S programada a través de la cual el software (que se ejecuta en una CPU integrada, por ejemplo, ARM ) puede escribir / leer registros de E / S o (menos comúnmente) bloques de memoria local dentro del dispositivo. El dispositivo puede utilizar una interfaz maestra para realizar transacciones DMA hacia / desde la memoria del sistema sin cargar demasiado la CPU.

Por lo tanto, los dispositivos de gran ancho de banda, como los controladores de red que necesitan transferir grandes cantidades de datos hacia / desde la memoria del sistema, tendrán dos adaptadores de interfaz al AHB: una interfaz maestra y una esclava. Esto se debe a que los buses en chip como AHB no admiten la indicación triple del bus o la alternancia de la dirección de cualquier línea en el bus. Al igual que PCI, no se requiere un controlador DMA central ya que el DMA controla el bus, pero se requiere un árbitro en caso de que haya varios maestros presentes en el sistema.

Internamente, un motor DMA multicanal suele estar presente en el dispositivo para realizar múltiples operaciones simultáneas de dispersión y recopilación según lo programado por el software.

Celda [ editar ]

Como ejemplo de uso de DMA en un sistema multiprocesador en chip , el procesador Cell de IBM / Sony / Toshiba incorpora un motor DMA para cada uno de sus 9 elementos de procesamiento, incluido un elemento de procesador de potencia (PPE) y ocho elementos de procesador sinérgico (SPEs) . Dado que las instrucciones de carga / almacenamiento de la SPE pueden leer / escribir solo su propia memoria local, una SPE depende completamente de los DMA para transferir datos hacia y desde la memoria principal y las memorias locales de otras SPEs. Por lo tanto, el DMA actúa como un medio principal de transferencia de datos entre los núcleos dentro de esta CPU (en contraste con las arquitecturas CMP coherentes en caché, como la GPU de propósito general cancelada de Intel , Larrabee ).

DMA in Cell es totalmente coherente en caché (tenga en cuenta, sin embargo, que los almacenes locales de SPEs operados por DMA no actúan como caché coherente globalmente en el sentido estándar ). Tanto en lectura ("obtener") como en escritura ("poner"), un comando DMA puede transferir un área de bloque individual con un tamaño de hasta 16 KB, o una lista de 2 a 2048 bloques de este tipo. El comando DMA se emite especificando un par de una dirección local y una dirección remota: por ejemplo, cuando un programa SPE emite un comando put DMA, especifica una dirección de su propia memoria local como fuente y una dirección de memoria virtual (apuntando a ya sea la memoria principal o la memoria local de otra SPE) como destino, junto con un tamaño de bloque. Según un experimento, un rendimiento máximo efectivo de DMA en celda (3 GHz, con tráfico uniforme) alcanza los 200 GB por segundo.[13]

Canalización [ editar ]

Los procesadores con memoria scratchpad y DMA (como los procesadores de señales digitales y el procesador Cell ) pueden beneficiarse del software que superpone las operaciones de la memoria DMA con el procesamiento, mediante doble búfer o multibúfer. Por ejemplo, la memoria en chip se divide en dos búferes; el procesador puede estar operando con datos en uno, mientras que el motor DMA está cargando y almacenando datos en el otro. Esto permite que el sistema evite la latencia de la memoria y aproveche las transferencias de ráfagas , a expensas de necesitar un patrón de acceso a la memoria predecible . [ cita requerida ]

Ver también [ editar ]

  • AT adjunto
  • Operación periférica autónoma
  • Blitter
  • E / S de canal
  • Ataque DMA
  • E / S mapeadas en memoria
  • Aceleracion de hardware
  • Procesamiento en memoria
  • Gestión de la memoria
  • Red en un chip
  • Sondeo (ciencias de la computación)
  • Acceso remoto directo a memoria
  • UDMA
  • Servicios virtuales de DMA (VDS)

Notas [ editar ]

  1. ^ Osborne, Adam (1980). Introducción a las microcomputadoras: Volumen 1: Conceptos básicos (2ª ed.). Osborne McGraw Hill. págs.  5-64 a 5-93 . ISBN 0931988349.
  2. ^ "Hoja de datos de Intel 8237 y 8237-2" (PDF) . Subsitio JKbox RC702 . Consultado el 20 de abril de 2019 .
  3. ^ "Fundamentos de DMA en varias plataformas de PC, National Instruments, páginas 6 y 7" . Universidad Nacional de la Plata, Argentina . Consultado el 20 de abril de 2019 .
  4. ^ Intel Corp. (25/04/2003), "Capítulo 12: Bus ISA" (PDF) , Arquitectura de PC para técnicos: Nivel 1 , consultado el 27 de enero de 2015
  5. ^ "Características del bus: controladores de dispositivos de escritura para Oracle® Solaris 11.3" . docs.oracle.com . Consultado el 18 de diciembre de 2020 .
  6. ^ "Physical Address Extension — PAE Memory and Windows". Microsoft Windows Hardware Development Central. 2005. Retrieved 2008-04-07.
  7. ^ Corbet, Jonathan (December 8, 2005). "Memory copies in hardware". LWN.net.
  8. ^ Grover, Andrew (2006-06-01). "I/OAT on LinuxNet wiki". Overview of I/OAT on Linux, with links to several benchmarks. Retrieved 2006-12-12.
  9. ^ "Intel Data Direct I/O (Intel DDIO): Frequently Asked Questions" (PDF). Intel. March 2012. Retrieved 2015-10-11.
  10. ^ Rashid Khan (2015-09-29). "Pushing the Limits of Kernel Networking". redhat.com. Retrieved 2015-10-11.
  11. ^ "Achieving Lowest Latencies at Highest Message Rates with Intel Xeon Processor E5-2600 and Solarflare SFN6122F 10 GbE Server Adapter" (PDF). solarflare.com. 2012-06-07. Retrieved 2015-10-11.
  12. ^ Alexander Duyck (2015-08-19). "Pushing the Limits of Kernel Networking" (PDF). linuxfoundation.org. p. 5. Retrieved 2015-10-11.
  13. ^ Kistler, Michael (May 2006). "Cell Multiprocessor Communication Network". Extensive benchmarks of DMA performance in Cell Broadband Engine.

References[edit]

  • DMA Fundamentals on Various PC Platforms, from A. F. Harvey and Data Acquisition Division Staff NATIONAL INSTRUMENTS
  • mmap() and DMA, from Linux Device Drivers, 2nd Edition, Alessandro Rubini & Jonathan Corbet
  • Memory Mapping and DMA, from Linux Device Drivers, 3rd Edition, Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
  • DMA and Interrupt Handling
  • DMA Modes & Bus Mastering

External links[edit]

  • Mastering the DMA and IOMMU APIs, Embedded Linux Conference 2014, San Jose, by Laurent Pinchart