# Unitat de gestió de memòria d'entrada-sortida

En informàtica, una unitat de gestió de memòria d'entrada-sortida (IOMMU) és una unitat de gestió de memòria (MMU) que connecta un bus d'E/S d'accés directe a memòria (apt DMA) a la memòria principal. Igual que una MMU tradicional, que tradueix les adreces virtuals visibles de la CPU en adreces físiques, l'IOMMU mapeja les adreces virtuals visibles per al dispositiu (també anomenades adreces de dispositiu o adreces d'E/S de memòria en aquest context) a adreces físiques. Algunes unitats també proporcionen protecció de memòria contra dispositius defectuosos o maliciosos.
Un exemple IOMMU és la taula de reasignació d'adreces gràfiques (GART) que utilitzen les targetes gràfiques AGP i PCI Express en ordinadors Intel Architecture i AMD.
A l'arquitectura x86, abans de dividir la funcionalitat de northbridge i southbridge entre la CPU i el Platform Controller Hub (PCH), la virtualització d'E/S no la realitzava la CPU, sinó el chipset.

## Avantatges

Els avantatges de tenir un IOMMU, en comparació amb l'adreçament físic directe de la memòria (DMA), inclouen:
* Es poden assignar grans regions de memòria sense necessitat de ser contigües a la memòria física – l'IOMMU mapeja adreces virtuals contigües a les adreces físiques fragmentades subjacents. Així, de vegades es pot evitar l'ús d'E/S vectoritzades (llistes de dispersió).
* Els dispositius que no admeten adreces de memòria el temps suficient per adreçar-se a tota la memòria física encara poden adreçar-se a tota la memòria mitjançant l'IOMMU, evitant les despeses generals associades a la còpia de buffers cap a i des de l'espai de memòria adreçable del perifèric.
** Per exemple, els ordinadors x86 poden adreçar més de 4 gigabytes de memòria amb la funció d'extensió d'adreça física (PAE) en un processador x86. Tot i així, un dispositiu PCI normal de 32 bits simplement no pot adreçar la memòria per sobre del límit de 4 GiB i, per tant, no hi pot accedir directament. Sense un IOMMU, el sistema operatiu hauria d'implementar els buffers de rebot que consumeixen molt de temps (també coneguts com a tampons dobles).
* La memòria està protegida dels dispositius maliciosos que intenten atacs de DMA i dels dispositius defectuosos que intenten transferències de memòria errades perquè un dispositiu no pot llegir ni escriure a la memòria que no s'ha assignat (mapejada) explícitament. La protecció de la memòria es basa en el fet que el sistema operatiu que s'executa a la CPU (vegeu la figura) controla exclusivament tant la MMU com la IOMMU. Els dispositius no poden eludir o corrompre físicament les taules de gestió de memòria configurades.
** A la virtualització, els sistemes operatius convidats poden utilitzar maquinari que no estigui dissenyat específicament per a la virtualització. El maquinari de més rendiment, com ara les targetes gràfiques, utilitzen DMA per accedir directament a la memòria; en un entorn virtual, totes les adreces de memòria són reasignades pel programari de la màquina virtual, cosa que fa que els dispositius DMA fallin. L'IOMMU gestiona aquesta reasignació, permetent que els controladors de dispositiu natius s'utilitzin en un sistema operatiu convidat.
* En algunes arquitectures, l'IOMMU també realitza la reassignació d'interrupcions de maquinari, d'una manera similar a la reasignació estàndard d'adreces de memòria.
* La paginació de memòria perifèrica pot ser compatible amb un IOMMU. Un perifèric que utilitzi l'extensió de la interfície de sol·licitud de pàgina (PRI) dels serveis de traducció d'adreces PCIe (ATS) de PCI-SIG pot detectar i assenyalar la necessitat de serveis de gestor de memòria.
Per a les arquitectures de sistemes en què el port I/O és un espai d'adreces diferent de l'espai d'adreces de memòria, no s'utilitza una IOMMU quan la CPU es comunica amb dispositius mitjançant ports d'E/S. A les arquitectures de sistemes en què l'E/S de port i la memòria es mapegen en un espai d'adreces adequat, un IOMMU pot traduir els accessos d'E/S del port.

## Desavantatges

Els desavantatges de tenir un IOMMU, en comparació amb l'adreçament físic directe de la memòria, inclouen:
* Certa degradació del rendiment a causa de les despeses generals de traducció i gestió (p. ex., passejades per taules de pàgines).
* Consum de memòria física per a les taules de la pàgina d'E/S afegida (traducció). Això es pot mitigar si les taules es poden compartir amb el processador.
* Per tal de reduir la mida de la taula de pàgines, la granularitat de molts IOMMU és igual a la paginació de memòria (sovint 4096 bytes), i per tant, cada petit buffer que necessita protecció contra l'atac DMA s'ha d'alinear i posar a zero abans de fer-lo visible al dispositiu. A causa de la complexitat de l'assignació de memòria del sistema operatiu, això significa que el controlador del dispositiu ha d'utilitzar buffers de rebot per a les estructures de dades sensibles i, per tant, disminueix el rendiment general.

## Referències

* ↑ lorihollasch. «IoMmu model - Windows drivers» (en anglès americà), 25-06-2022. [Consulta: 4 desembre 2023].
* ↑ «Intel platform hardware support for I/O virtualization» (en anglès). intel.com, 10-08-2006. Arxivat de l'original el 2007-01-20. [Consulta: 7 juny 2014].
* ↑ «Desktop Boards: Compatibility with Intel Virtualization Technology (Intel VT)» (en anglès). intel.com, 14-02-2014. [Consulta: 7 juny 2014].
* ↑ «IOMMU (Input-Output Memory Management Unit)» (en anglès). [Consulta: 4 desembre 2023].