2010-11-28 23 views
14

Un amigo mío me ha dicho que en la arquitectura x86, el controlador DMA no puede transferir entre dos ubicaciones diferentes de RAM. Solo puede transferir entre RAM y periféricos (como el bus PCI).DMA transfer RAM-to-RAM

¿Es esto cierto?

Dado que el controlador AFAIK DMA debe poder entre dispositivos arbitrarios que se encuentran en BUS y tienen una dirección. En particular, no veo ningún problema si las direcciones de origen y de deserción pertenecen al mismo dispositivo físico.

+0

¿Por qué copiar la RAM de una ubicación a otra? x86 tiene un sistema de paginación de memoria, por lo que cualquier página de memoria puede ser visible en la memoria virtual en cualquier dirección. –

+0

@GJ No en modo real. –

Respuesta

12

ISA (¿recuerdas? ;-) Los chips DMA ciertamente tienen un tipo de transferencia Fetch-and-Deposit.

Sin embargo, desde el MASM32 forums:

Hola,

check in "a los indocumentados PC", que dice la memoria a la memoria DMA es posible. Luego continúa diciendo que puede haber problemas, limitaciones, y que la CPU puede hacer la copia más rápido que el hardware DMA (MOVSD en 386+).

Parece ser un sí, pero a quién le importa, algo así.

Saludos,

Steve N.

+0

¡Guau! Esto es interesante. Ahora veo por qué * puede * haber problemas con dicha transferencia. No se puede hacer en un solo ciclo ... Pero OTOH hay arquitecturas modernas donde tienes un llamado "canal de memoria dual". Aquí puedes ** leer + escribir en un solo ciclo, ¿o no? – valdo

+0

De todos modos, las transferencias de ciclo dual pueden ser más lentas. Sin embargo, durante dicha transferencia, la CPU puede utilizarse para otra cosa. ¿No hay alguna razón para hacer una transferencia de este tipo a través de DMA? – valdo

+0

'Aquí puedes leer + escribir en un solo ciclo, ¿o no?'No soy cien por ciento positivo en esto, pero aparte de otras trampas de viabilidad, me imagino que esta hazaña solo es posible si los módulos no están organizados, por lo que proporcionan buses separados y las áreas de origen y destino residen en dos memorias separadas módulos. Esto limitaría severamente su usabilidad. –

2

Definitivamente hay motores DMA que no pueden transferir entre 2 direcciones de ram, por lo que la segunda parte de la pregunta ya está basada en una premisa incorrecta.

+0

¿Qué quiere decir con "motores DMA"? ¿Las especificaciones del controlador DMA varían para diferentes chipsets basados ​​en x86? – valdo

+2

Interpreté su segundo párrafo (o el tercero, si cuenta el de una línea) como una declaración general. No trabajo con los x86, pero definitivamente me he encontrado con los controladores dma powerpc que no pueden realizar transferencias ram-to-ram, razón por la cual hice esa afirmación. – lijie

7

Sí, la memoria de transferencia de la memoria es posible así hasta 80386 familia he tratado con "modernos" de x 86 :)

Especificar memoria RAM para la fuente y destino Es posible que tenga que prestar atención a la coherencia de la memoria caché L1, según el dispositivo que esté programando y si ha habilitado la caché.

Puede encontrar algún código en el kernel de Linux para actualizar las páginas de RAM de video en la memoria oculta. Esto suena una campana.

+0

¿Funciona con PCI/PCIex? ¿Cómo se puede "cuidar la coherencia"? ¿El chip del controlador de memoria, de hecho, hace el DMA? – Pyjong

0

En ARM Mem-to-Mem DMA mejora significativamente el rendimiento.

Cuestiones relacionadas