Передача 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 значительно улучшена производительность.