IOMMU () — блок управління пам'яттю (MMU) для операцій введення/виводу. Так само як традиційний, процесорний блок управління пам'яттю, який переводить віртуальні адреси, видимі процесором, в фізичні, цей блок займається трансляцією віртуальних адрес, видимих ​​апаратним пристроєм, у фізичні адреси. Деякі IOMMU також дозволяють задавати різні обмеження операцій введення-виведення для захисту від пристроїв, що неправильно працюють або для ізоляції, наприклад, при використанні віртуалізації (див. VT-d).

За наявності IOMMU у апаратури є можливість проводити DMA-операції не тільки за фізичними адресами, а й за логічними (віртуальними). Така можливість спрощує пристрої, яким більше не потрібно піклуватися про підтримку DMA по розривному (з точки зору фізичних адрес) регіону пам'яті (підтримка такого DMA в драйвері тягне за собою накладні витрати).

Недоліками використання IOMMU в порівнянні з прямою фізичною адресацією пам'яті в DMA запитах є:

Деяке погіршення продуктивності через необхідність транслювання адрес і витрат на управління, наприклад, прохід по ієрархії таблиці сторінок. Додаткове споживання пам'яті для зберігання таблиць відображення. Може бути зменшений при використанні основним таблиць трансляції адрес процесора.

IOMMU використовується для прямої роботи віртуалізованих операційних систем з обладнанням основної системи. Наявність IOMMU для таких комбінацій дозволяє підвищити безпеку, продуктивність і спростити реалізацію віртуальної машини.

IOMMU завжди використовувався на комп'ютерах Sun SPARC для шини SBus, також він використовувався на комп'ютерах DEC Alpha для шини PCI.

Різновидом IOMMU є AGP GART (Graphics Address Remapping Table, таблиця перетворень графічних адрес ).

Як правило, звичайні PC-сумісні комп'ютери не мали IOMMU (крім AGP GART). Замість цього всі найголовніше периферійне устаткування десь з кінця 90 -х років розроблялося з підтримкою chain DMA.

Проте, широке поширення гіпервізорів віртуальних машин призвело до включення підтримки IOMMU в "гостьові" ОС, такі, як Windows (API ядра Windows завжди підтримував цю функцію, хоча зазвичай дана підтримка не реалізовувалася).

Наявність такої підтримки в гостьовій ОС при віртуалізації самого пристрою IOMMU сильно полегшує завдання емуляції в гостьовій ОС складних пристроїв, що використовують DMA, і підвищує продуктивність і безпеку такої емуляції.

Див. також