Перейти до вмісту

Блок управління пам'яттю для вводу/виводу

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з IOMMU)

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

Порівняння IOMMU і memory management unit (MMU)

За наявності 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, і підвищує продуктивність і безпеку такої емуляції.

Див. також

[ред. | ред. код]