MMIO (Memory-Mapped I/O) es una técnica fundamental en la arquitectura de computadoras donde los registros de control y los buffers de datos de los dispositivos de hardware se asignan directamente a ubicaciones dentro del espacio de direcciones de memoria del procesador. Esto permite que la CPU acceda y manipule estos recursos de hardware utilizando las mismas instrucciones de carga y almacenamiento (load/store) que se usan para acceder a la memoria RAM convencional, eliminando la necesidad de instrucciones de E/S especiales (como las instrucciones IN/OUT utilizadas en I/O-mapped I/O). Cada registro o buffer del dispositivo aparece como una celda de memoria en una dirección física específica, simplificando la interfaz entre el software del sistema operativo (drivers) y el hardware.

MMIO es omnipresente en sistemas modernos. Por ejemplo, las tarjetas gráficas (GPUs) utilizan MMIO para que el procesador pueda configurar modos de video, cargar texturas y enviar comandos de renderizado. Los controladores de red (NICs) exponen sus registros de configuración y buffers de paquetes a través de MMIO para que el kernel pueda inicializarlos y gestionar el tráfico. Los controladores de almacenamiento (como NVMe SSDs) también dependen de MMIO para la comunicación de comandos y estado. Incluso los controladores de interrupción y los temporizadores del sistema a menudo tienen sus registros accesibles vía MMIO. En arquitecturas como ARM y x86 (en modo protegido), MMIO es el mecanismo principal para la interacción CPU-dispositivo.

Para un Arquitecto de Sistemas, entender MMIO es crucial para diseñar sistemas de alto rendimiento y baja latencia. La elección entre MMIO y I/O-mapped I/O (en arquitecturas que lo soportan) impacta la complejidad del driver, el rendimiento y la seguridad. MMIO simplifica el desarrollo de drivers al usar un modelo de programación uniforme con la memoria, pero requiere una gestión cuidadosa del espacio de direcciones para evitar conflictos. Los arquitectos deben considerar cómo el MMIO afecta el diseño de la MMU (Memory Management Unit), la coherencia de caché (a menudo, las regiones MMIO son 'uncached' o 'write-through' para evitar problemas de coherencia con el hardware), y la seguridad (aislamiento de dispositivos). Un diseño deficiente puede llevar a cuellos de botella de rendimiento, latencia impredecible o vulnerabilidades de seguridad si los dispositivos no están correctamente aislados o si las regiones MMIO no se configuran adecuadamente en la tabla de páginas.