Передача DMA RAM-to-RAM

Мой друг сказал мне, что на архитектуре x86 контроллер DMA не может передавать между двумя разными местами ОЗУ. Он может передавать только ОЗУ и периферийные устройства (например, шину PCI).

Это правда?

Поскольку контроллер AFAIK DMA должен быть в состоянии между произвольными устройствами, которые сидят на шине и имеют адрес. В частности, я не вижу проблем, если оба источника и адреса отправления принадлежат одному физическому устройству.

Ответы

Ответ 1

ISA (помните?;-) У чипов DMA, конечно, есть тип передачи Fetch-and-Deposit.

Однако из форумов MASM32:

Привет,

Проверка "Недокументированный ПК", он говорит, что память в память DMA возможное. Затем он говорит, что могут быть проблемы, ограничения, и что CPU может сделать копию быстрее, чем аппаратное обеспечение DMA (MOVSD на 386 +).

Итак, кажется, что да, но кто заботится, что-то в этом роде.

Привет,

Стив Н.

Ответ 2

Да, память для передачи памяти возможна до 80386 семьи, которую я пробовал с помощью "современного" x86:)

Укажите оперативную память для источника и адресата. Возможно, вам придется следить за согласованностью кеша L1 в зависимости от устройства, которое вы программируете, и если вы включили кеш.

В ядре Linux можно найти код для обновления страниц видеопамяти в теневой памяти. Это звонит.

Ответ 3

Есть определенные механизмы DMA, которые не могут передавать между двумя адресами ram, поэтому вторая часть вопроса уже основана на неправильной предпосылке.

Ответ 4

В ARM Mem-to-Mem DMA значительно улучшена производительность.