posix shared-memory memory-mapped-files

Posix compartió memoria vs archivos mapeados



shared-memory memory-mapped-files (3)

Al haber aprendido un poco sobre el tema, ¿alguien puede decir cuál es la diferencia real entre la memoria compartida POSIX (shm_open) y los archivos mapeados POSIX (mmap)?

Ambos parecen usar el subsistema / dev / tmpfs, en lugar del mecanismo IPC más antiguo.

Entonces, ¿hay alguna ventaja de usar el archivo mmap sobre la memoria compartida?

Gracias.


Básicamente, la memoria compartida es una forma de IPC. La región compartida se crea en / dev / shm, que se crea solo en la memoria (RAM) y no requiere operaciones de disco, por lo que es un método más rápido de IPC. Aunque IPC se puede hacer usando También puede usar el archivo de disco y luego usar mmap, pero sería comparativamente lento. Alternativamente, siempre puede usar MAP_ANONYMOUS con mmap que no hace copia de seguridad con ningún archivo de disco.


Entiendo que la memoria compartida se construye sobre los archivos asignados, pero esta Página parece indicar que la capacidad de usar los archivos asignados de la memoria como memoria compartida es condicional.

El uso de la función mmap () está restringido por el valor del sistema QSHRMEMCTCTL. Cuando este valor del sistema es 0, la función mmap () puede no crear una asignación compartida que tenga la capacidad PROT_WRITE. Esencialmente, esto evita la creación de un mapa de memoria que podría alterar el contenido del archivo de flujo que se asigna. Si el parámetro flags indica MAP_SHARED, el parámetro prot especifica PROT_WRITE y el valor del sistema QSHRMEMCTCT es 0, entonces las funciones mmap () fallarán y aparecerá un número de error de EACCES.