Posix memoria condivisa vs file mappati
-
20-09-2019 - |
Domanda
Dopo aver imparato un po 'su questo argomento, qualcuno può dire, qual è la vera differenza tra la memoria condivisa POSIX (shm_open) e POSIX file mappati (mmap)?
Sia sembra utilizzare il sottosistema / dev / tmpfs, piuttosto che vecchio meccanismo IPC.
Quindi non v'è alcun vantaggio di usare file di mmap su memoria condivisa?
Grazie.
Soluzione
La distinzione non è sempre chiara. Memoria condivisa può essere implementato tramite file di memoria mappata. Un ottimo scrivere su questo può essere trovato qui (come applicato al C / C ++ programmazione).
Altri suggerimenti
La mia comprensione è che che la memoria condivisa è costruito sulla base di file mappati, ma questa pagina sembra indicare che la possibilità di utilizzare file mappati in memoria come memoria condivisa è condizionale.
L'utilizzo della funzione mmap () è limitato dalla QSHRMEMCTL sistema di valori. Quando questo valore di sistema è 0, la funzione mmap () non può creare una mappatura comune avente dotata di sistema PROT_WRITE. In sostanza, questo impedisce la creazione di una mappa di memoria che potrebbe alterare il contenuto del file di flusso viene mappati. Se il parametro flags indicato MAP_SHARED, il parametro prot specifica PROT_WRITE e il valore di sistema QSHRMEMCTL è 0, allora la mmap () funzioni saranno sicuro e un numero di errore EACCES risultati.
Fondamentalmente condivisa è una forma di regione condivisa IPC.The viene creato in / dev / shm che viene creato soltanto memoria (RAM) e non necessita di operazioni di disco, quindi è un metodo più veloce IPC.Although IPC può essere fatto utilizzando file su disco e quindi utilizzando mmap troppo, ma sarebbe comparetively slow.Alternatively si può sempre utilizzare MAP_ANONYMOUS con mmap che non esegue il backup con qualsiasi file su disco.