Прямой доступ к памяти DMA - как это работает? - PullRequest
14 голосов
/ 01 марта 2011

Я прочитал, что если доступен DMA, то процессор может направлять длинные запросы на чтение или запись дисковых блоков в DMA и сосредоточиться на другой работе.Но DMA во время передачи данных / канал памяти занят.Что еще процессор может сделать за это время?

Ответы [ 4 ]

27 голосов
/ 01 марта 2011

Прежде всего, DMA (per se) практически полностью устарел.Как первоначально определено, контроллеры DMA зависели от того факта, что на шине были отдельные строки для утверждения чтения / записи памяти и чтения / записи ввода-вывода.Контроллер DMA воспользовался этим, утверждая одновременно и чтение памяти и запись ввода-вывода (или наоборот).Затем контроллер DMA генерировал последовательные адреса на шине, и данные считывались из памяти и записывались в выходной порт (или наоборот) каждый цикл шины.

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

Что касается того, что еще может делать процессор в данный момент, Все это зависит.В те времена, когда DMA был распространен, ответ обычно был «небольшим» - например, в ранних версиях Windows чтение или запись дискеты (в которой использовался контроллер DMA) в значительной степени блокировали систему на время.

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

3 голосов
/ 01 марта 2011

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

2 голосов
/ 01 марта 2011

Но DMA в канал данных / канал управления памяти занят во время этой передачи.

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

0 голосов
/ 12 октября 2013

Во время передачи DMA ЦП не работает и не контролирует шину памяти. Процессор переводится в состояние ожидания с использованием состояния высокого импеданса

...