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