¿Está bloqueando la lectura y escritura de un archivo asignado en memoria?

Entonces, la pregunta aquí parece ser que cada lectura y escritura desde o hacia el mapa de memoria será una lectura o escritura del disco. Eso sería muy lento, pero el diseño es más inteligente que esto.

El contenido del archivo se almacena en la memoria caché para que no tenga que acceder al disco en cada lectura o escritura. Cuando asigna un archivo a la memoria, su sistema operativo cargará el archivo en la memoria y luego asignará esa memoria a su espacio de direcciones virtuales. * Luego, puede leer y escribir en esa memoria como cualquier otra memoria. Y cuando le escribes, no se descarga inmediatamente en el disco, sino que se descarga más tarde, siempre que el núcleo lo decida, o cuando llamas fsync.

* En realidad, puede cargar datos del disco perezosamente, solo cuando se accede, pero cuando lo hace, carga una página completa de datos (como 4096 bytes aproximadamente) a la vez, y luego los guarda en la memoria para que el futuro los lea. Desde esa página no hay que ir al disco.

La asignación de memoria de un archivo en el disco no hace que la E / S del disco sea más rápida, y los sectores del disco se pueden almacenar en caché en la memoria tan fácilmente como las páginas se pueden almacenar en la memoria. Sin embargo, la mayoría de los sistemas operativos no permiten que un programa atrape sus propios errores de página, por lo que cuando una página debe leerse desde el archivo, su hilo se bloqueará hasta que la página haya sido leída y, a diferencia de las E / S asíncronas, no estará Se le da la oportunidad de hacer otra cosa mientras está esperando. Esto importó hace treinta años, pero hoy nadie está dispuesto a pasar por la cantidad de trabajo y codificación necesarios para utilizar técnicas asíncronas para optimizar este tipo de actividad.

No creo que sea un problema siempre que mmap () no requiera ningún soporte de VFS que pueda faltar en algunos sistemas de archivos (como FUSE o MSDOS).

Si el disco estuviera formateado como un sistema de archivos EXT3, entonces podría haber lentitud cuando la memoria que se asignó a bloques de disco particulares en el archivo que usted había grabado se leyó desde el disco. El kernel estaría administrando los bloques de disco, por lo que si hubiera otro proceso de lectura o escritura en el mismo archivo, no sería diferente.