IOMMU () — блок управления памятью (MMU) для операций ввода-вывода. Так же как традиционный, процессорный блок управления памятью, который переводит виртуальные адреса, видимые процессором в физические, этот блок занимается трансляцией виртуальных адресов, видимых аппаратным устройством, в физические адреса. Некоторые IOMMU также позволяют задавать различные ограничения операций ввода-вывода для защиты от неправильно работающих устройств или для изоляции, например, при использовании виртуализации (см. VT-d).
Описание
При наличии IOMMU у аппаратуры имеется возможность проводить DMA-операции не только по физическим адресам, но и по логическим (виртуальным). Такая возможность упрощает устройства, которым больше не нужно заботиться о поддержке DMA по разрывному (с точки зрения физических адресов) региону памяти (поддержка такого DMA в драйвере влечет за собой накладные расходы).
Недостатками использования IOMMU по сравнению с прямой физической адресацией памяти в DMA запросах являются: Некоторое ухудшение производительности из-за необходимости транслирования адресов и расходов на управление, например, проход по иерархии таблицы страниц. Дополнительное потребление памяти для хранения таблиц отображения. Может быть уменьшен при использовании основных таблиц трансляции адресов процессора.
IOMMU используется для прямой работы виртуализованных операционных систем с оборудованием основной системы. Наличие IOMMU для таких комбинаций позволяет повысить безопасность, производительность и упростить реализацию виртуальной машины. Примеры IOMMU для виртуализации на платформах x86/x86_64: Intel VT-d и AMD-Vi.
IOMMU всегда использовался на компьютерах Sun SPARCД Бовет. Ядро Linux, 3-е издание. ISBN 978-5-94157-957-0, глава 13, стр. 702 для шины SBus, также он использовался на компьютерах DEC Alpha для шины PCI.
Разновидностью IOMMU является AGP GART (Graphics Address Remapping Table, таблица преобразований графических адресовД Бовет. Ядро Linux, 3-е издание. ISBN 978-5-94157-957-0, глава 13, стр. 698).
Как правило, обычные PC-совместимые компьютеры не имели IOMMU (кроме AGP GART). Вместо этого все главнейшее периферийное оборудование где-то с конца 90х годов разрабатывалось с поддержкой chain DMA.
Тем не менее, широкое распространение гипервизоров виртуальных машин привело к включению поддержки IOMMU в «гостевые» ОС, такие, как Windows (API ядра Windows всегда поддерживал данную функцию, хотя обычно данная поддержка не реализовывалась).
Наличие такой поддержки в гостевой ОС при виртуализации самого устройства IOMMU сильно облегчает задачу эмуляции в гостевой ОС сложных устройств, использующих DMA, и повышает производительность и безопасность такой эмуляции.
Технология IOMMU играет важную роль в предотвращении DMA-атак за счёт ограничения и контроля доступа устройств к физической памяти компьютера. В контексте использования IOMMU, защита от DMA-атак достигается путём виртуализации адресного пространства устройств и блокировки несанкционированных операций ввода-вывода. Помимо повышения безопасности, IOMMU также предотвращает возможные сбои операционной системы и программ, вызванные некорректной работой устройств, изолируя последствия таких ошибок и сохраняя стабильность системы в целом..
Примечания
Ссылки Каждому bus-master устройству — виртуальное адресное пространство
Категория:Виртуальная память