mmap (memory map) es una llamada al sistema POSIX que permite a un proceso mapear un segmento de un archivo o un objeto de memoria anónimo directamente en su espacio de direcciones virtuales. Esto significa que el contenido del archivo o la memoria compartida se puede acceder y manipular directamente mediante punteros de memoria, eliminando la necesidad de operaciones explícitas de lectura (read) y escritura (write) al disco. El sistema operativo gestiona automáticamente la carga de páginas del archivo a la memoria física bajo demanda (demand paging) y la escritura de las páginas modificadas de vuelta al disco (write-back), lo que puede resultar en un rendimiento superior y una gestión de memoria más eficiente para ciertos patrones de acceso.

mmap es fundamental en muchos sistemas operativos y herramientas de alto rendimiento. Bases de datos como PostgreSQL y MongoDB utilizan mmap para mapear sus archivos de datos en memoria, permitiendo que el sistema operativo gestione el caching de páginas y reduciendo la sobrecarga de E/S. Servidores web como Nginx y Apache lo emplean para servir archivos estáticos de manera eficiente, mapeando los archivos directamente en el espacio de direcciones del proceso para evitar copias de datos innecesarias. También es la base para la memoria compartida (shared memory) entre procesos, donde múltiples procesos mapean la misma región de memoria, facilitando la comunicación y el intercambio de datos de alta velocidad. Los cargadores de programas (program loaders) también usan mmap para mapear ejecutables y bibliotecas compartidas en la memoria al iniciar un proceso.

Para un arquitecto de sistemas, mmap es una herramienta poderosa con importantes implicaciones en el diseño. Ofrece un rendimiento de E/S potencialmente superior al reducir las copias de datos entre el kernel y el espacio de usuario, y al delegar la gestión del caché de archivos al sistema operativo. Sin embargo, su uso introduce consideraciones críticas: la gestión de errores (por ejemplo, qué sucede si el archivo subyacente se trunca o se elimina), la consistencia de datos en entornos concurrentes (especialmente con memoria compartida), y el manejo de la paginación. Un uso inadecuado puede llevar a problemas de rendimiento debido a la paginación excesiva (thrashing) o a la complejidad en la sincronización. Los arquitectos deben evaluar si los patrones de acceso a datos se benefician de un acceso aleatorio y si la complejidad adicional en el manejo de errores y concurrencia es justificable frente a las ganancias de rendimiento.