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.

È stato utile?

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.

memoria

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top