Memoria de acceso directo

Compartir Imprimir Citar
Características de los sistemas informáticos

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

Sin DMA, cuando la CPU utiliza entrada/salida programada, normalmente está totalmente 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 curso y finalmente recibe una interrupción del controlador DMA (DMAC) cuando finaliza la operación. Esta función es útil en cualquier momento en que la CPU no puede mantener el ritmo de la transferencia de datos, o cuando la CPU necesita realizar un trabajo mientras espera una transferencia de datos de E/S relativamente lenta. Muchos sistemas de hardware utilizan DMA, incluidos los controladores de unidades de disco, las tarjetas gráficas, las tarjetas de red y las tarjetas de sonido. DMA también se utiliza para la transferencia de datos dentro del chip en procesadores multinúcleo. Las computadoras que tienen canales DMA pueden transferir datos hacia y desde dispositivos con mucha menos sobrecarga de CPU que las computadoras sin canales DMA. De manera similar, un circuito de procesamiento dentro de un procesador multinúcleo puede transferir datos hacia y desde su memoria local sin ocupar su tiempo de procesador, lo que permite que el cálculo y la transferencia de datos se realicen en paralelo.

DMA también se puede utilizar para "memoria a memoria" copiar o mover datos 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 implementación es la tecnología de aceleración de E/S. DMA es de interés en arquitecturas informáticas de red en chip y en memoria.

Principios

Terceros

Armario de un ordenador NeXTcube (1990). Los dos grandes circuitos integrados debajo del centro de la imagen son el controlador DMA (l.) y - inusual - un controlador DMA extra dedicado (r.) para el disco magnético-optical utilizado en lugar de un disco duro en la primera serie de este modelo de computadora.

La DMA estándar, también denominada 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 conteo de bytes y uno o más registros de control. Dependiendo de las funciones que proporcione el controlador DMA, estos registros de control pueden especificar alguna combinación de la fuente, el destino, la dirección de la transferencia (leer desde el dispositivo de E/S o escribir 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.

Para llevar a cabo una operación de entrada, salida o de 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 autobuses

En un sistema de masterización de bus, también conocido como sistema DMA propio, se puede otorgar a la CPU y a los periféricos el control del bus de memoria. Cuando un periférico puede convertirse en un maestro de bus, 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 proporcionar algunas medidas para poner el procesador en una condición de espera para que no ocurra la contención del bus.

Modos de funcionamiento

Modo ráfaga

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

Modo robo de ciclo

El modo de robo de ciclos se utiliza en sistemas en los que la CPU no debe desactivarse durante el tiempo necesario para los modos de transferencia en ráfaga. 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, usando señales BR (Solicitud de bus) y BG (Concesión de bus), que son las dos señales que controlan la interfaz entre la CPU y el controlador DMA. Sin embargo, en el modo de robo de ciclos, después de una unidad (p. ej., un byte) de transferencia de datos, el control del bus del sistema se anula a la CPU a través de BG. Luego, se vuelve a solicitar continuamente a través de BR, transfiriendo una unidad (por ejemplo, un byte) de datos por solicitud, hasta que se haya transferido todo el bloque de datos. Al obtener y liberar continuamente el control del bus del sistema, el controlador DMA esencialmente intercala transferencias de instrucciones y datos. La CPU procesa una instrucción, luego el controlador DMA transfiere un valor de datos, y así sucesivamente. Los datos no se transfieren tan rápido, pero la CPU no permanece inactiva durante tanto tiempo como en el modo de ráfaga. El modo de robo de ciclos es útil para los controladores que monitorean datos en tiempo real.

Modo transparente

El modo transparente requiere 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 oculto".

Coherencia de caché

Cache incoherence due to DMA

DMA puede generar problemas de coherencia de caché. Imagine una CPU equipada con un caché y una memoria externa a la que puedan acceder directamente los dispositivos que utilizan DMA. Cuando la CPU accede a la ubicación X en la memoria, el valor actual se almacenará en el caché. Las operaciones subsiguientes en X actualizarán la copia en caché de X, pero no la versión de memoria externa de X, asumiendo una caché de reescritura. Si la memoria 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.

Del mismo modo, si la copia almacenada en caché de X no se invalida cuando un dispositivo escribe un nuevo valor en la memoria, la CPU funcionará con un valor obsoleto de X.

Este problema se puede abordar de una de dos maneras en el diseño del sistema: los sistemas coherentes con la caché implementan un método en el hardware, llamado indagación de bus, mediante el cual las escrituras externas se envían al controlador de caché, que luego realiza una invalidación de caché para las escrituras DMA o vaciado de caché para lecturas DMA. 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 de DMA saliente y se invaliden antes de que se acceda a un rango de memoria afectado por una transferencia de DMA entrante. El sistema operativo debe asegurarse de que ningún subproceso en ejecución acceda al rango de memoria mientras tanto. El último enfoque introduce cierta sobrecarga 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

ISA

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

Con IBM PC/AT, el bus AT mejorado (más conocido como ISA, o "Arquitectura estándar de la industria") agregó un segundo controlador 8237 DMA para proporcionar tres controladores adicionales, y como lo destaca el recurso choca con la capacidad de expansión adicional de XT sobre la PC original, canales muy necesarios (5 a 7; el canal 4 se usa como una cascada para el primer 8237). El registro de página también se volvió a cablear 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 datos para transferencias de memoria a memoria, de lo contrario simplemente controlar el flujo de datos entre otras partes del sistema de 16 bits, haciendo que su propio ancho de bus de datos sea relativamente irrelevante), 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, tenían un 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 funcionaba a un mínimo de 6 MHz, frente a un controlador de 8 bits bloqueado en 4,77 MHz). En ambos casos, el problema del límite del segmento de 64 kB se mantuvo, con transferencias individuales que no podían cruzar segmentos (en lugar de "envolverse" al inicio del mismo segmento) incluso en el modo de 16 bits, aunque esto era en la práctica. más un problema de complejidad de programación que de rendimiento, ya que la necesidad continua de actualización de DRAM (como sea que se maneje) para monopolizar el bus aproximadamente cada 15 μs impidió el uso de transferencias de bloque grandes (y rápidas, pero ininterrumpidas).

Debido a su retraso en el rendimiento (capacidad máxima de transferencia de 8 bits de 1,6 MB/s a 5 MHz, pero no más de 0,9 MB/s en PC/XT y 1,6 MB/s para transferencias de 16 bits en AT debido a los gastos generales del bus ISA y otras interferencias, como las interrupciones de actualización de la memoria) y la falta de disponibilidad de cualquier grado de velocidad que permitiría la instalación de reemplazos directos que funcionan a velocidades superiores al reloj estándar de 4,77 MHz de la PC original, estos dispositivos han quedado obsoletos desde entonces. finales de la década de 1980. En particular, la llegada del procesador 80386 en 1985 y su capacidad para transferencias de 32 bits (aunque las grandes mejoras en la eficiencia del cálculo de direcciones y los movimientos de memoria de bloques en las CPU Intel después del 80186 significaron que las transferencias PIO incluso por el bus de 16 bits 286 y 386SX aún podrían superar fácilmente al 8237), así como el desarrollo de nuevas evoluciones para (EISA) o reemplazos para (MCA, VLB y PCI) el "ISA" bus con sus propios subsistemas DMA de mucho mayor rendimiento (hasta un máximo de 33 MB/s para EISA, 40 MB/s MCA, típicamente 133 MB/s VLB/PCI) hizo que los controladores DMA originales parecieran más una piedra de molino de rendimiento que un refuerzo Fueron compatibles en la medida en que se requieren para admitir hardware de PC heredado incorporado en máquinas posteriores. Las piezas de hardware heredadas que continuaron usando ISA DMA después de que los buses de expansión de 32 bits se volvieron comunes fueron las tarjetas Sound Blaster que necesitaban mantener una compatibilidad total de hardware con el estándar Sound Blaster; y dispositivos Super I/O en placas base que a menudo integraban 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 usaba un 8237 original 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 dirección de 16 bits y un registro de conteo 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 conteo 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 vectorial o de dispersión-recopilación permite la transferencia de datos hacia y desde múltiples áreas de memoria en una sola transacción de DMA. Es equivalente al encadenamiento de múltiples 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 configurarse para usar ambas líneas del canal DMA asignado.

Masterización de bus permitida por ISA de 16 bits.

Asignaciones estándar de ISA DMA:

  1. DRAM Refresh (obsoleto)
  2. hardware de usuario, generalmente tarjeta de sonido 8-bit DMA
  3. Controlador de disco flotador
  4. Disco duro (obsoleto por modos PIO, y reemplazado por modos UDMA), Puerto paralelo (porto capaz ECP), ciertos Clones SoundBlaster como el OPTi 928
  5. Cascade a PC/XT DMA controlador
  6. Disco duro (PS/2 solamente), hardware de usuario para todos los demás, generalmente tarjeta de sonido 16-bit DMA
  7. Equipo de usuario
  8. Equipo de usuario

PCI

Una arquitectura PCI no tiene un controlador DMA central, a diferencia de ISA. En cambio, un 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 puente de host PCI y puente de PCI a PCI), que arbitrará si varios dispositivos solicitan la propiedad del bus simultáneamente, ya que solo puede haber un maestro de bus a la vez. Cuando se 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.

Como ejemplo, en una PC basada en Intel Core, el puente sur reenviará las transacciones al controlador de memoria (que está integrado en la matriz de la CPU) mediante DMI, que a su vez las convertirá en operaciones DDR y las enviará en el bus de memoria. Como resultado, hay una gran cantidad de pasos involucrados en una transferencia PCI DMA; sin embargo, eso plantea pocos problemas, 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, ya sea utilizando el modo nativo de 64 bits de la CPU x86-64 o la Extensión de dirección física (PAE), un modo de direccionamiento de 36 bits. 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 propio dispositivo, permite el direccionamiento DMA de 64 bits. De lo contrario, el sistema operativo tendría que solucionar el problema utilizando costosos búferes dobles (nomenclatura DOS/Windows) también conocidos como búferes de rebote (FreeBSD/Linux), o podría usar un IOMMU para proporcionar servicios de traducción de direcciones, si hay uno presente..

I/OAT

Como ejemplo de motor DMA incorporado en una CPU de propósito general, algunos conjuntos de chips Intel Xeon incluyen un motor DMA llamado tecnología de aceleración de E/S (I/OAT), que puede descargar la copia de memoria de la CPU principal, liberándola para hacer otro trabajo. En 2006, el desarrollador del kernel de Linux de Intel, Andrew Grover, realizó pruebas comparativas utilizando I/OAT para descargar copias de tráfico de red y no encontró una mejora de más del 10 % en la utilización de la CPU con la recepción de cargas de trabajo.

DDIO

Se han introducido más mejoras orientadas al rendimiento en el mecanismo DMA en los procesadores Intel Xeon E5 con su característica Data Direct I/O (DDIO), que permite que DMA y #34;ventanas" para residir 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 y destino principal para la E/S, lo que permite que los controladores de interfaz de red (NIC) realicen DMA directamente a la memoria caché de último nivel (caché L3) de las CPU locales y evitan la obtención costosa de la E/S. datos de la RAM del sistema. Como resultado, DDIO reduce la latencia de procesamiento de E/S general, 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.

AHB

En los sistemas integrados y de sistemas en un chip, la infraestructura típica del bus del sistema es un bus en el 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 la 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 para el AHB: una interfaz maestra y una esclava. Esto se debe a que los buses en chip como AHB no admiten la configuración triple del bus ni la alternancia de la dirección de ninguna línea en el bus. Al igual que PCI, no se requiere un controlador DMA central ya que el DMA es el control de 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.

Celular

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 energía (PPE) y ocho elementos de procesador sinérgico (SPE). Dado que las instrucciones de carga/almacenamiento del SPE pueden leer/escribir solo en su propia memoria local, un SPE depende completamente de los DMA para transferir datos hacia y desde la memoria principal y las memorias locales de otros SPE. Por lo tanto, el DMA actúa como un medio principal de transferencia de datos entre los núcleos dentro de esta CPU (a diferencia de las arquitecturas CMP coherentes con la memoria caché, como la GPU de propósito general cancelada de Intel, Larrabee).

DMA in Cell es completamente coherente con la memoria caché (tenga en cuenta, sin embargo, que las tiendas locales de SPE operadas por DMA no actúan como una memoria caché globalmente coherente en el sentido estándar). Tanto en lectura ("get") como en escritura ("put"), un comando DMA puede transferir un área de un solo bloque de tamaño de hasta 16 KB, o una lista de 2 a 2048 tales bloques. 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 (que apunta a ya sea la memoria principal o la memoria local de otro SPE) como destino, junto con un tamaño de bloque. Según un experimento, el rendimiento máximo efectivo de DMA en Cell (3 GHz, con tráfico uniforme) alcanza los 200 GB por segundo.

Conducción

Los procesadores con memoria scratchpad y DMA (como los procesadores de señal digital y el procesador Cell) pueden beneficiarse del software que superpone las operaciones de memoria DMA con el procesamiento, a través de búfer doble o búfer múltiple. Por ejemplo, la memoria en el 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 en ráfaga, a expensas de necesitar un patrón de acceso a la memoria predecible.