У меня довольно простой вопрос, но я нигде не мог найти ответ на него.
В системе Von-Neumann, где код и данные находятся в одном и том же ОЗУ, ЦП должен извлекать все свои инструкции из памяти. Теперь для перемещения больших объемов данных между компьютерными компонентами имеется контроллер прямого доступа к памяти, который позволяет периферийным устройствам иметь доступ к основной оперативной памяти системы.
У меня такой вопрос: если DMA разрешает (возможно, очень длительную) передачу данных, скажем, между жестким диском и ОЗУ, не означает ли это, что ЦП не может использовать ОЗУ и, следовательно, не может извлечь свою следующую инструкцию?
Вкратце, DMA предназначен для замены процессора, который выполняет арбитраж всех операций чтения и записи ввода / вывода, чтобы освободить процессор для выполнения других задач. Однако, если он не может извлечь свои инструкции из ОЗУ, он все равно не был освобожден.
Есть ли какая-то деталь, которую я здесь упускаю?
Благодарность
источник
Ответы:
Вы правы, что ЦП не может получить доступ к памяти во время передачи DMA. Однако есть два фактора, которые в совокупности обеспечивают очевидный параллельный доступ к памяти со стороны ЦП и устройства, выполняющего передачу DMA:
mov
инструкция с косвенным операндом).В совокупности эти два фактора означают, что устройство, выполняющее передачу DMA, будет мало влиять на скорость процессора.
РЕДАКТИРОВАТЬ: забыл упомянуть, что есть также фактор кэш-памяти ЦП, поскольку, пока код, который выполняет ЦП, находится в кеше, ему не потребуется доступ к реальной памяти для извлечения инструкций, поэтому передача DMA не происходит. мешать (хотя если инструкции требуется доступ к памяти, то, очевидно, будет иметь место реальный доступ к памяти - возможно, придется ждать перерыва в использовании памяти устройством DMA).
источник
Если имеется один интерфейс памяти, между запросами будет аппаратное обеспечение для арбитража. Как правило, процессору будет предоставлен приоритет над вводом-выводом без истощения ввода-вывода, но даже при постоянном приоритете ввода-вывода процессор будет иметь некоторые возможности для доступа к памяти, потому что ввод-вывод имеет тенденцию иметь более низкие требования к пропускной способности и быть прерывистым.
Кроме того, обычно имеется более одного интерфейса для памяти. Процессоры с более высокой производительностью, как правило, имеют кеши (если DMA не является связным, кешировать даже не нужно отслеживать; даже при отслеживании издержки обычно будут небольшими из-за разницы в пропускной способности между кешем и основной памятью или (когда DMA переходит к L3) кэша) между кэшем L3 и кэшем L1), предоставляя отдельный интерфейс для доступа к памяти. Микроконтроллеры часто получают доступ к инструкциям из отдельной флэш-памяти, что позволяет выполнять выборку во время прямого доступа к памяти на встроенной памяти и часто имеет тесно связанную память с независимым интерфейсом (что позволяет многим доступам к данным избежать конфликтов прямого доступа к памяти).
Даже с одним интерфейсом памяти пиковая пропускная способность обычно будет выше, чем обычно используемая пропускная способность. (Для выборки инструкций даже небольшой буфер с загрузкой выборки, превышающей среднюю, позволил бы выборку инструкций из буфера, пока другой агент использует интерфейс памяти, используя тенденцию кода не переходить.)
Также обратите внимание, что, поскольку процессор обращается к данным, если существует единственный интерфейс памяти, должен быть механизм для арбитража между доступом к данным и доступом к командам.
Если процессор (с одним интерфейсом памяти) был вынужден реализовать копию из буфера устройства ввода-вывода в основную память, ему также пришлось бы получать инструкции для выполнения копирования. Это может означать два обращения к памяти на каждое слово, передаваемое даже в ISA с операциями с памятью (для ISA хранилища загрузки может потребоваться три или более обращений к памяти, если не обеспечена адресация памяти после приращения); это в дополнение к доступу ввода / вывода, который в старых системах может использовать тот же интерфейс, что и основная память. Механизм прямого доступа к памяти не обращается к инструкциям в памяти, и таким образом избегает этих издержек.
источник
Поскольку существует только одна система шин, которая заблокирована доступом к памяти DMA, ЦП не может работать, пока DMA перемещает данные, и поэтому остановлен.
Идея этого заключается в следующем:
Если вы хотите скопировать последовательные данные из памяти, то процессор должен будет сделать что-то вроде этого:
Вычислить адрес-> прочитать данные-> рассчитать новый адрес (+ 1 слово) -> прочитать данные ...
Принимая во внимание, что DMA выполняет вычисление нового адреса параллельно (в зависимости от режима) и, следовательно, быстрее. Таким образом, DMA может работать с полной пропускной способностью шины (теоретически).
источник
Вообщем нет.
В большинстве системных архитектур всем запросам на доступ к памяти назначен приоритет . Когда одновременно выполняется больше запросов памяти, чем может обработать система, запросы с более высоким приоритетом обслуживаются в первую очередь. Запросы памяти, инициируемые ЦП, обычно получают наивысший возможный приоритет.
источник
В общем нет.
Некоторые системы уверены, только один мастер за один раз. Немного более старый дизайн, если это так (даже старые проекты часто имели параллельные решения). Современный тип шины, хотя каждая шина (адрес, запись данных, чтение данных) работает независимо и имеет тег или идентификатор на тактовый цикл, чтобы показать, с какой транзакцией связан один тактовый цикл. Таким образом, вы можете иметь много / много транзакций в полете одновременно в обоих направлениях, причем различные транзакции перемешиваются вместе на шинах чтения или записи данных. Кто будет дальше, будет зависеть от приоритета, нет правила, что транзакции на шине должны были бы выполняться в том порядке, в котором выложены инструкции программного обеспечения, процессор может определить, что некоторые из них могут начаться раньше, чем другие, и, естественно, ответы будут возвращаться в разных порядках, в зависимости от того, насколько близка и быстра цель. Аналогично, выборки не в порядке, предсказание ветвлений запускает случайные выборки всякий раз, когда это похоже.
Большая транзакция dma потребовала бы гораздо большей пропускной способности шины, но утверждение о том, что процессор останавливается, не обязательно, зависит также от архитектуры и кода. В коде может быть инструкция, которая говорит «остановка» до тех пор, пока не произойдет этот конец сигнала / события передачи, а затем убедится, что процессор завершит то, что он может сделать в канале, и затем остановится. Но это или некоторые архитектуры могут не требовать, чтобы вы останавливались, не очень разумно останавливать в любом случае, так много тратили пропускную способность. В любом случае, какой смысл использовать dma, если он не работает параллельно, просто закодируйте передачу в цикле, выборки добавляют несколько циклов, возможно, в зависимости от архитектуры, они не так дороги, как издержки логики dma, мощность и т. Д. Поймите, как dma работает для конкретной архитектуры и системы, в которой вы находитесь, и решите, стоит ли ее использовать,
Не существует общего ответа о том, как работает dma, он сильно зависит от конструкции системы и всех компонентов системы.
источник