Прямой доступ к памяти

У меня есть основные сомнения по поводу DMA. Когда ЦП освободил шину для DMA для продолжения выборки/сохранения данных, как он продолжает обработку?

Я имею в виду, что даже ЦП должен получать инструкции, сохранять результаты в память/операции ввода-вывода через шину, не так ли?


person Agent007    schedule 30.07.2016    source источник


Ответы (2)


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

Что еще более важно, DMA не "занимает" ОЗУ и даже не перегружает пропускную способность памяти. ЦП не «отказывается от шины»; контроллер памяти принимает запросы на чтение/запись от ядер ЦП и других системных устройств. Выполнение задачи с большим объемом памяти на ЦП замедлит задержку DMA, а также наоборот, поскольку контроллер памяти или системный агент распределяет доступ к памяти, ставя в очередь запросы на чтение и запись из всех источников.

DMA отлично подходит для передачи, которая все еще намного медленнее, чем пропускная способность памяти. Например, SATAIII составляет 6 Гбит/с, а пропускная способность основной памяти для двухканальной DDR3-1600 МГц составляет около 25 Гбайт/с. Таким образом, programd-io проводил большую часть времени в ожидании данных от контроллера SATA, даже не ограничиваясь сохранением в ОЗУ.


Пример того, как части соединяются вместе в современном процессоре Intel x86: эта диаграмма системной архитектуры Intel Skylake (включая eDRAM в качестве кэша на стороне памяти). К сожалению, я не нашел более простой схемы, показывающей только ядра и системный агент, но в системе без eDRAM справа от системного агента находится только контроллер памяти, а все остальное остается прежним.

Контроллер памяти находится на кристалле, поэтому единственным внешним соединением на этой схеме является шина PCIe.

Схема агента системы Skylake, из IDF через ARStechnica

person Peter Cordes    schedule 30.07.2016

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

Если я правильно понимаю ваш вопрос, и, как сказал Питер, когда ЦП сделал неблокирующий запрос DMA, а DMA активно что-то делает на шине, ЦП все равно может выполнять все обычные операции, включая доступ к ОЗУ, потому что шина может иметь мультиплексированный трафик. Или, другими словами, шина может обслуживать несколько мастеров одновременно.

Согласованность и непротиворечивость, которые немного усложняют ситуацию, обычно поддерживаются с помощью правильных парадигм программирования, основанных на аппаратной поддержке.

person coder23    schedule 04.08.2016