В чем разница между DMA и IOMMU? - PullRequest
2 голосов
/ 01 июля 2019
  • Что такое DMA и IOMMU?Как DMA и IOMMU используются?
  • Что если архитектура не поддерживает IOMMU?
  • Как использовать DMA без IOMMU?

1 Ответ

2 голосов
/ 01 июля 2019

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

IOMMU (блок управления памятью ввода-вывода) - это аппаратная функция, расширяющая доступ к DMA для устройств ввода-вывода. Это похоже на MMU, используемый для сопоставления адресов виртуальной памяти с адресом физической памяти. В то время как обычный MMU используется для предоставления каждому процессу своего собственного виртуального адресного пространства, IOMMU используется для предоставления каждому устройству ввода-вывода своего собственного виртуального адресного пространства. Таким образом, устройство ввода-вывода видит простое непрерывное адресное пространство, возможно, доступное с 32-разрядными адресами, тогда как в действительности физическое адресное пространство фрагментировано и выходит за пределы 32-разрядного.

DMA без IOMMU требует, чтобы устройства ввода / вывода использовали реальные физические адреса. Физические адреса также должны использоваться процессором при настройке передачи DMA. Кроме того, DMA без IOMMU можно использовать для копирования в память (поскольку в нем нет устройств ввода-вывода).

IOMMU доступен только на более мощных микропроцессорах. Вы не найдете его на микроконтроллерах и большинстве встроенных систем.

...