Полностью ли зависает процессор при использовании DMA?


19

У меня довольно простой вопрос, но я нигде не мог найти ответ на него.

В системе Von-Neumann, где код и данные находятся в одном и том же ОЗУ, ЦП должен извлекать все свои инструкции из памяти. Теперь для перемещения больших объемов данных между компьютерными компонентами имеется контроллер прямого доступа к памяти, который позволяет периферийным устройствам иметь доступ к основной оперативной памяти системы.

У меня такой вопрос: если DMA разрешает (возможно, очень длительную) передачу данных, скажем, между жестким диском и ОЗУ, не означает ли это, что ЦП не может использовать ОЗУ и, следовательно, не может извлечь свою следующую инструкцию?

Вкратце, DMA предназначен для замены процессора, который выполняет арбитраж всех операций чтения и записи ввода / вывода, чтобы освободить процессор для выполнения других задач. Однако, если он не может извлечь свои инструкции из ОЗУ, он все равно не был освобожден.

Есть ли какая-то деталь, которую я здесь упускаю?

Благодарность


7
Да. DMA редко работает на полной пропускной способности памяти. Он просто время от времени крадет цикл (или серию циклов), контролируемый скоростью устройства ввода-вывода.
Дэйв Твид

Домашний компьютер Amiga справился с этим, заметив, что используемый процессор фактически обращался к шине только два цикла, а затем оставался вне шины в течение двух циклов, когда все еще работал на полной скорости. Периферийные устройства на основе DMA (графика, аудио, диск) использовали промежуточные циклы. Не ответ на ваш вопрос, так как вопрос является гипотетическим, а компьютеры всегда разрушены практическими деталями. :)
труба

2
@pipe: это звучит неправильно. Amiga использовала процессор M68K, который имеет полностью асинхронную шину. Вы можете подумать об Apple II, который воспользовался тем, что его процессор 6502 использует шину только для половины каждого тактового цикла, а другую половину использовал для видеовыхода, который также служил для обновления DRAM.
Дэйв Твид

4
Современные процессоры имеют кэши, которые в среднем разрешают 95% обращений к памяти. Пока процессор не нуждается в оперативной памяти, DMA все равно не мешает.
MSalters

2
@DaveTweed Нет. Если вы посмотрите на тайминги шины для 68000, каждый «цикл шины» (чтение или запись) делится на 8 состояний, принимая как минимум 4 фактических тактовых цикла, из которых только некоторые из них управляют шиной данных. Это мультиплексирование требует некоторого дополнительного оборудования, потому что оно постоянно управляет адресной шиной.
труба

Ответы:


18

Вы правы, что ЦП не может получить доступ к памяти во время передачи DMA. Однако есть два фактора, которые в совокупности обеспечивают очевидный параллельный доступ к памяти со стороны ЦП и устройства, выполняющего передачу DMA:

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

В совокупности эти два фактора означают, что устройство, выполняющее передачу DMA, будет мало влиять на скорость процессора.

РЕДАКТИРОВАТЬ: забыл упомянуть, что есть также фактор кэш-памяти ЦП, поскольку, пока код, который выполняет ЦП, находится в кеше, ему не потребуется доступ к реальной памяти для извлечения инструкций, поэтому передача DMA не происходит. мешать (хотя если инструкции требуется доступ к памяти, то, очевидно, будет иметь место реальный доступ к памяти - возможно, придется ждать перерыва в использовании памяти устройством DMA).


4
В качестве дополнительного подхода некоторые системы могут предлагать несколько каналов для доступа к памяти. ЦПУ может быть разрешено использовать один канал, в то время как механизм DMA работает на другом
Cort Ammon - Восстановить Монику

1
@CortAmmon Я считаю, что двухканальная память обычно распределяется по физическому адресному пространству, поэтому, например, если у вас 2 ГБ ОЗУ, то нижний 1 ГБ находится на первом канале, а верхний 1 ГБ - на втором канале. В этом случае, если и ЦП, и DMA хотят получить доступ к одной и той же области памяти объемом 1 ГБ, они будут находиться на одном канале и, таким образом, потенциально конфликтовать.
Майкл Джонсон

Я не уверен, что многие реальные системы когда-либо использовали настоящую архитектуру VNM. Узкое место было слишком узким. Это действительно было теоретическое устройство, используемое в CS. Самым близким, что я могу вспомнить, было техасское 16-битное устройство 1970-х годов, регистры которого были в ОЗУ. Я имею в виду видеокарту, в которой используется двухпортовый ОЗУ. Микросхемы типа ARM, особенно высококлассные, выполняют то же самое на многих внутренних шинах (AHP, APB, Stacks). futureelectronics.com/en/memory/dual-ports.aspx idt.com/products/memory-logic/multi-port-memory/...
ChrisR

1
Я не думал, что вопрос был о строгом ЦП Von-Neumann, а скорее о практическом, таком как x86 или ARM, которые в общих чертах являются Von-Neumann. В случае строгого фон Неймана, без каких-либо внутренних регистров, способность ЦП продолжать работу во время DMA сводится ко второму пункту в моем ответе, что DMA не использует всю пропускную способность памяти.
Майкл Джонсон

20

Если имеется один интерфейс памяти, между запросами будет аппаратное обеспечение для арбитража. Как правило, процессору будет предоставлен приоритет над вводом-выводом без истощения ввода-вывода, но даже при постоянном приоритете ввода-вывода процессор будет иметь некоторые возможности для доступа к памяти, потому что ввод-вывод имеет тенденцию иметь более низкие требования к пропускной способности и быть прерывистым.

Кроме того, обычно имеется более одного интерфейса для памяти. Процессоры с более высокой производительностью, как правило, имеют кеши (если DMA не является связным, кешировать даже не нужно отслеживать; даже при отслеживании издержки обычно будут небольшими из-за разницы в пропускной способности между кешем и основной памятью или (когда DMA переходит к L3) кэша) между кэшем L3 и кэшем L1), предоставляя отдельный интерфейс для доступа к памяти. Микроконтроллеры часто получают доступ к инструкциям из отдельной флэш-памяти, что позволяет выполнять выборку во время прямого доступа к памяти на встроенной памяти и часто имеет тесно связанную память с независимым интерфейсом (что позволяет многим доступам к данным избежать конфликтов прямого доступа к памяти).

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

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

Если процессор (с одним интерфейсом памяти) был вынужден реализовать копию из буфера устройства ввода-вывода в основную память, ему также пришлось бы получать инструкции для выполнения копирования. Это может означать два обращения к памяти на каждое слово, передаваемое даже в ISA с операциями с памятью (для ISA хранилища загрузки может потребоваться три или более обращений к памяти, если не обеспечена адресация памяти после приращения); это в дополнение к доступу ввода / вывода, который в старых системах может использовать тот же интерфейс, что и основная память. Механизм прямого доступа к памяти не обращается к инструкциям в памяти, и таким образом избегает этих издержек.


2

Поскольку существует только одна система шин, которая заблокирована доступом к памяти DMA, ЦП не может работать, пока DMA перемещает данные, и поэтому остановлен.

Идея этого заключается в следующем:

Если вы хотите скопировать последовательные данные из памяти, то процессор должен будет сделать что-то вроде этого:

Вычислить адрес-> прочитать данные-> рассчитать новый адрес (+ 1 слово) -> прочитать данные ...

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


«поскольку существует только одна шинная система» ... это небезопасное предположение для современных компьютеров, у которых память и периферийные шины работают с разной скоростью, а между ними происходит трансляция протоколов.
rackandboneman

3
На старых компьютерах: в Apple II (или каком-то предшествующем / прототипе?) Был упущен дизайн, поскольку они буквально останавливали процессор. Регистры в 6502 реализованы в виде динамической памяти. То, как они остановили процессор, остановило обновление. Максимальная длина прямого доступа к памяти оказалась очень, очень зависимой от машины.
rackandboneman

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

2

Вообщем нет.

В большинстве системных архитектур всем запросам на доступ к памяти назначен приоритет . Когда одновременно выполняется больше запросов памяти, чем может обработать система, запросы с более высоким приоритетом обслуживаются в первую очередь. Запросы памяти, инициируемые ЦП, обычно получают наивысший возможный приоритет.


0

В общем нет.

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

Большая транзакция dma потребовала бы гораздо большей пропускной способности шины, но утверждение о том, что процессор останавливается, не обязательно, зависит также от архитектуры и кода. В коде может быть инструкция, которая говорит «остановка» до тех пор, пока не произойдет этот конец сигнала / события передачи, а затем убедится, что процессор завершит то, что он может сделать в канале, и затем остановится. Но это или некоторые архитектуры могут не требовать, чтобы вы останавливались, не очень разумно останавливать в любом случае, так много тратили пропускную способность. В любом случае, какой смысл использовать dma, если он не работает параллельно, просто закодируйте передачу в цикле, выборки добавляют несколько циклов, возможно, в зависимости от архитектуры, они не так дороги, как издержки логики dma, мощность и т. Д. Поймите, как dma работает для конкретной архитектуры и системы, в которой вы находитесь, и решите, стоит ли ее использовать,

Не существует общего ответа о том, как работает dma, он сильно зависит от конструкции системы и всех компонентов системы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.