Así funciona la IOMMU, la comunicación de la CPU con tus periféricos

Así funciona la IOMMU, la comunicación de la CPU con tus periféricos

Josep Roca

Una de las piezas más importantes en las CPUs contemporáneas es la IOMMU, la cual es esencial para la comunicación de la CPU con los periféricos del sistema. En este artículo os explicamos qué es y las funciones de esta tan desconocida por el público como imprescindible pieza de hardware que se encuentra en todo tipo de sistemas informáticos, desde el smartphone de tu bolsillo al superordenador más potente

¿Cómo interactúan los periféricos con la CPU? Utilizando la RAM del sistema como punto en común para comunicarse de manera mutua, pero ello implica una serie de mecanismos siendo el más importante el que os vamos a describir a continuación.

¿Dónde se encuentra la IOMMU?

IOMMU Northbridge Southbridge

Como se puede ver en el diagrama de arriba, los periféricos se encuentran conectados al Southbridge o Puente Sur, este a su vez está conectado con el Northbridge, el cual es el concentrador con el que principalmente la interfaz de la RAM y la CPU se comunican entre sí. Pues bien, la IOMMU se encuentra en el interior del Southbridge que es donde se concentran todas las interfaces de E/S como USB, PCI Express, SATA, etc.

Todas esas interfaces han de pasar bajo el control de la IOMMU para poder acceder a la RAM del sistema. La IOMMU en este caso actúa como una especie de control fronterizo que vigila que los periféricos no hagan accesos ilegales a la memoria y accedan a la parte de la RAM que tengan asignado cada uno de ellos y a ninguna otra parte.

La IOMMU, por tanto, hace de MMU, pero para los periféricos de E/S.

¿Cuál es su utilidad?

IOMMU

Los periféricos de E/S no comparten la MMU (unidad de manejo de la memoria) con la CPU y por tanto no ven la memoria de la misma manera que el procesador central del sistema. Este problema hace que los periféricos puedan acceder a través de sus interfaces a partes de la memoria del sistema que son delicadas como las reservadas para funciones del propio sistema operativo, lo cual es un problema en entornos multitarea.

Es ahí donde entra la IOMMU, la cual actúa como una unidad esclava de la MMU a la que está comunicada a través del puente Norte/Northbridge del sistema. Gracias a esta comunicación, los periféricos saben en qué direcciones de la RAM tienen permiso de acceso y en cuáles no.

Por otro lado, la IOMMU asigna de manera automática y dinámica direcciones de memoria para la comunicación con los diferentes periféricos, de esta manera la CPU siempre sabe a qué direcciones de memoria tiene que apuntar para comunicarse con éstos.

IOMMU Mapa Memoria PC Original

En los sistemas antiguos no se disponía de una unidad IOMMU y se otorgaba con ellos un mapa de memoria donde se informaba a los programadores qué direcciones de la RAM estaban pensadas para comunicarse con los dispositivos. Por este motivo, los desarrolladores en cada arquitectura distinta se tenían que aprender el direccionamiento de la memoria para poder utilizar los periféricos y el resto del hardware de apoyo del sistema.

Hoy en día ya no es así, y la existencia de la IOMMU facilita que los desarrolladores no tengan que aprenderse las direcciones de memoria para comunicarse y amplía las capacidades de configuración y personalización de nuestros PCs permitiendo configuraciones completamente distintas.

Uso de la IOMMU en sistemas virtualizados

IOMMU Device Passthrough

La IOMMU permite el acceso a dispositivos físicos de manera segura en entornos virtualizados a través de lo que llamamos device passthrough. El tándem entre la MMU y la IOMMU permite que los dispositivos conectados al PC aparezcan en el espacio de memoria virtual que hace la función de memoria física para el entorno virtual que se esta ejecutando en ese momento.

Sin la IOMMU no serían posibles entornos virtualizados que tuviesen acceso de manera correcta al hardware instalado en el sistema, por lo que hoy en día es una pieza indispensable en todas las CPUs que tengan que manejar entornos virtualizados.