Зачем использовать контроллер DMA, если он замедляет работу системы? - PullRequest
3 голосов
/ 13 декабря 2011

Я прочитал это в книге:

Если контроллер DMA в системе работает с максимальной частотой 5 МГц, и мы все еще используем память 100 нс, максимальная скорость передачи составляет 5 МГц, потому чтоконтроллер DMA медленнее, чем память.Во многих случаях контроллер DMA замедляет скорость системы, когда происходят передачи DMA.

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

Ответы [ 2 ]

4 голосов
/ 13 декабря 2011

Вся идея контроллера DMA заключается в том, что он работает параллельно с процессором. Таким образом, процессор может поместить длинную операцию ввода-вывода в контроллер DMA и продолжить выполнение кода. Даже если контроллер DMA работает медленнее, он влияет только на работу ввода-вывода, а не на общую производительность. Это очень важно при взаимодействии с медленными устройствами - если бы процессор работал с ними напрямую, он никогда не выполнял бы никакой другой обработки. С DMA он ставит в очередь этот медленный IO на DMA, а IO выполняется параллельно.

2 голосов
/ 22 апреля 2014

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

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

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

...