Archivos Mapeados en Memoria (Memory-Mapped I/O)

Archivo: src/mmap.rs (264 líneas)

¿Por qué existe?

Proporciona E/S de alto rendimiento mediante archivos mapeados en memoria. En lugar de usar read()/write() tradicionales (que copian datos entre kernel y userspace), mmap proyecta el archivo directamente en el espacio de direcciones del proceso, permitiendo acceso con punteros de memoria convencionales.

Implementación multi-plataforma

Estructuras principales

EstructuraDescripción
MmapRegionDescribe una región mapeada: puntero addr, longitud len, offset, permisos
Heap global (REGIONS)HashMap<i64, MmapRegion> con Mutex para gestión de ciclos de vida

API Pública

FunciónDescripción
mmap_abrir(ruta, longitud, offset, escritura) -> Result<i64>Abre y mapea un archivo, retorna un handle numérico
mmap_cerrar(handle) -> Result<()>Desmapea y cierra el archivo
mmap_leer(handle, offset, len) -> Result<Vec<u8>>Lee bytes de la región mapeada
mmap_escribir(handle, offset, datos) -> Result<()>Escribe bytes en la región mapeada
mmap_sincronizar(handle) -> Result<()>Fuerza la sincronización (msync)
mmap_longitud(handle) -> Result<usize>Obtiene el tamaño del mapeo

Uso desde Forja

Expuesto a través del módulo mmap.fa de la stdlib, que provee funciones como mmap_abrir, mmap_cerrar, mmap_leer, y mmap_escribir. Ideal para procesamiento de archivos grandes, bases de datos, y operaciones de E/S de baja latencia.

⚠️ Seguridad: El sandbox de red (sandbox.rs) no controla mmap, pero el módulo valida rangos de acceso para prevenir lecturas/escrituras fuera de los límites del mapeo.
💡 Beneficio clave: mmap es significativamente más rápido que read/write tradicionales para archivos grandes porque elimina la copia entre kernel-space y user-space, y delega la carga de páginas al administrador de memoria virtual del SO.