2010-10-03 5 views
20

В чем разница между DMA и IO с отображением памяти? Они оба похожи на меня.В чем разница между DMA и IO с отображением памяти?

+0

Связанные с этим: [драйверы устройств Linux, второе издание: глава 13: mmap и DMA] (http://www.xml.com/ldd/chapter/book/ch13.html); Первое чтение ответов здесь мне очень помогло. – sdaau

ответ

31

Входы/выходы с отображением памяти позволяют процессору управлять аппаратным обеспечением путем чтения и записи определенных адресов памяти. Обычно это будет использоваться для операций с низкой пропускной способностью, таких как изменение битов управления.

DMA позволяет аппаратно напрямую считывать и записывать память без с использованием ЦП. Обычно это будет использоваться для операций с высокой пропускной способностью, таких как ввод/вывод на диск или видеовход камеры.

+0

Значит, они в основном то же самое, но в противоположных направлениях? – f126ck

+0

Не совсем. DMA - это когда два устройства, которые не являются центральным процессором, используют шину памяти для обмена данными (при этом одно устройство обычно является основной памятью, а процесс управляется процессором). Отображаемый память IO - это процессор, который разговаривает с устройством на шине памяти, которая не является основной памятью. – jdizzle

+0

Почему требуется отображать буфер dma, даже если движок dma находится на устройстве? – ransh

10

Память с отображением памяти означает, что регистры устройства отображаются в пространство памяти аппарата - когда эти области памяти считываются или записываются процессором, это чтение или запись на устройство, а не реальная память. Чтобы перенести данные с устройства на реальный буфер памяти, ЦП должен считывать данные из регистров устройств с отображением памяти и записывать их в буфер (и наоборот для передачи данных на устройство).

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

17

Поскольку другие уже ответили на этот вопрос, я просто добавлю немного истории.

В прежние времена на оборудовании x86 (ПК) имелось только пространство ввода/вывода и пространство памяти. Это были два разных адресных пространства, доступ к которым осуществлялся с использованием разных протоколов шины и различных инструкций CPU, но позволяющих разговаривать через один и тот же слот для плагинов.

Большинство устройств используют пространство ввода-вывода как для интерфейса управления, так и для интерфейса массовой передачи данных. Простым способом доступа к данным было выполнение множества инструкций ЦП для передачи данных по одному слову за раз от адреса ввода-вывода до адреса памяти (иногда называемого «бит-биение»).

Для перемещения данные из устройств в память хоста автономно, не было поддержки в протоколе шины ISA для устройств для инициирования передач. Было изобретено компромиссное решение: контроллер DMA. Это был набор аппаратных средств, которые были загружены процессором и инициировали передачи для перемещения данных с адреса ввода-вывода устройства в память или наоборот. Поскольку адрес ввода-вывода одинаков, контроллер DMA выполняет те же операции, что и процессор, но немного более эффективно и дает некоторую свободу работать в фоновом режиме (хотя, возможно, недолго, поскольку он не может разговаривать с памятью).

Быстрая перемотка вперед в дни PCI и протоколы шины стали намного умнее: любое устройство может инициировать передачу. Таким образом, можно, скажем, получить карту контроллера RAID для перемещения любых данных, которые ему нравятся, или от хоста в любое время, когда это нравится. Это называется режимом «мастер шины», но по какой-то причине люди продолжают ссылаться на этот режим как «DMA», хотя старый контроллер DMA давно ушел. В отличие от старых передач DMA, часто нет соответствующего адреса ввода-вывода, и режим мастер-шины часто является единственным интерфейсом, присутствующим на устройстве, без какого-либо режима «бит-стук» центрального процессора.

+3

В ядре Linux «DMA» упоминается в файлах более 5000 C, это может быть причиной, по которой все еще говорят о DMA. – JohnnyFromBF

0

Прямой доступ к памяти (DMA) - это способ передачи данных с ввода-вывода в память и из памяти в I/O без вмешательства CPU. Для этой цели используется специальный чип, называемый контроллером DMA, для управления всеми действиями и синхронизацией данных. В результате, по сравнению с другими методами передачи данных, DMA намного быстрее.

С другой стороны, виртуальная память действует как кеш между основной памятью и вторичной памятью.Данные извлекаются заранее из вторичной памяти (жесткий диск) в основную память, так что данные уже доступны в основной памяти, когда это необходимо. Это позволяет нам запускать больше приложений в системе, чем у нас достаточно физической памяти для поддержки.

Смежные вопросы