Копирование данных в файл с использованием DMA - PullRequest
2 голосов
/ 10 июня 2009

Мне нужно переместить некоторые данные из одной области файла в другую. В настоящее время я читаю байты и выписываю их обратно. Но мне интересно, если бы передача DMA была бы быстрее, если это возможно. Я нахожусь в C #, но небезопасные и p / invoke функции приемлемы.

1 Ответ

3 голосов
/ 09 февраля 2012

Насколько я могу судить, не делает DMA "случайно", используя обычные файловые потоки для копирования из одного файла в другой. DMA в некоторых местах используется в фоновом режиме (например, для переноса с диска в RAM с помощью FileStreams), но он не может обрабатывать прямое копирование потока файл в файл в C #.

Сам DMA довольно сложный и родной для языков низкого уровня. Я имею в виду этот документ . Все примеры кода написаны на C и asm, поэтому его нельзя напрямую применять к C #.

DMA - это еще одна микросхема на материнской плате (обычно это Intel 8237 чип), что позволяет вам (программисту) разгружать передачи данных между платами ввода / вывода. DMA фактически означает «прямой доступ к памяти». Пример использования DMA - способность Sound Blaster играть образцы в фоновом режиме. Процессор устанавливает звуковую карту и DMA. Когда DMA говорят «идти», он просто переносит данные из ОЗУ в карта. Поскольку это делается вне процессора, процессор может делать другие вещи во время передачи данных.

DMA использует канальную систему, доступ к которой осуществляется через порты. Как правило, вы использовали бы asm для этого. Может быть, вы найдете здесь полезную информацию здесь или здесь .

Альтернативой может быть позволить ОС обрабатывать передачу: просто используйте File.Copy.

...