Блок управління пам'яттю для вводу/виводу
Ця стаття не містить посилань на джерела. (жовтень 2018) |
IOMMU (англ. input/output memory management unit) — блок управління пам'яттю (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, і підвищує продуктивність і безпеку такої емуляції.