Memoria compartida Posix vs archivos mapeados


Habiendo aprendido un poco sobre el tema, ¿puede alguien 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 antiguo mecanismo IPC.

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

Gracias.

Author: skaffman, 2010-02-15

3 answers

La distinción no siempre es clara. La memoria compartida se puede implementar a través de archivos mapeados de memoria. Una excelente escritura sobre esto se puede encontrar aquí (como se aplica a la programación en C/C++).

 15
Author: ennuikiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-14 21:22:09

Entiendo que esa memoria compartida se construye sobre archivos asignados, pero Esta página parece indicar que la capacidad de usar archivos asignados de memoria como memoria compartida es condicional.

El uso de la función mmap() está restringido por el valor del sistema QSHRMEMCTL. Cuando este valor del sistema es 0, la función mmap() puede no crear una asignación compartida con 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 está mapeando. Si el parámetro flags indica MAP_SHARED, el parámetro prot especifica PROT_WRITE y el valor del sistema QSHRMEMCTL es 0, entonces las funciones mmap() fallarán y un número de error de resultados EACCES.

 2
Author: John Knoeller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-14 21:28:25

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

 0
Author: Rajat Paliwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-02 18:08:56