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