2

Я знаю, что в большинстве современных архитектур CPU отправляет запросы на чтение и запись в блок управления памятью, а не непосредственно в контроллер RAM.Является ли связь между процессором и периферийными устройствами, посредниками MMU

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

ответ

1

Я не могу говорить по-глобальному, могут быть исключения. Но это общая идея, заключающаяся в том, что интерфейс памяти cpu полностью проходит через mmu (и полностью через кеш или слои кешей).

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

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

Возможно, вы можете создать чип/систему, где адресное пространство автоматически не отправляется через mmu или кеш, что может сделать уродливые шины, и/или чип может иметь отдельные шины для периферийных устройств от ram или другие решения, поэтому вышеизложенное не обязательно является универсальным ответом, но, скажем, рукой, и я бы принял x86, как это работает. На руках, которыми я знаком с кешем mmu и l1, находятся в ядре, l2 находится снаружи и l3 за его пределами, если он у вас есть. l2 буквально между ядром и миром (если у вас есть один (от руки)), но шина axi/amba имеет параметры кэширования, поэтому каждая транзакция может быть или не быть помечена как кэшируемая, если она не кэшируема, то она проходит прямо через l2. если включено, mmu определяет, что если включено для каждой транзакции.

1

Фактически, виртуальный-физический перевод находится в ЦП почти для всех современных (и на данный момент, даже самых старых) архитектур. Даже контроллеры DRAM и PCIe (ранее в северном мостике) превратили его в CPU. Поэтому современный процессор даже не разговаривает с контроллером RAM, он напрямую разговаривает с DRAM.

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

По крайней мере, в случае x86, да. Вы можете практически отображать диапазоны IO с отображением памяти в любом месте. Хорошая вещь тоже, в противном случае виртуальное адресное пространство обязательно отразило бы странную физическую компоновку с «дырками», которые вы не могли бы отобразить в реальном баране, потому что тогда у вас было бы две вещи в одном и том же месте.

Смежные вопросы