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