2010-02-14 11 views
22

Avendo imparato qualcosa sull'argomento, qualcuno può dire, qual è la vera differenza tra memoria condivisa POSIX (shm_open) e file mappati POSIX (mmap)?Posix memoria condivisa e file mappati

Entrambi sembrano utilizzare il sottosistema/dev/tmpfs, piuttosto che il meccanismo IPC più vecchio.

Quindi, c'è qualche vantaggio nell'usare il file mmap sulla memoria condivisa?

Grazie.

risposta

2

La mia comprensione è che quella memoria condivisa è costruita sopra i file mappati, ma This Page sembra indicare che la possibilità di utilizzare i file mappati in memoria come memoria condivisa è condizionale.

L'uso della funzione mmap() è limitato dal valore di sistema QSHRMEMCTL. Quando questo valore di sistema è 0, la funzione mmap() non può creare una mappatura condivisa che abbia funzionalità PROT_WRITE. In sostanza, ciò impedisce la creazione di una mappa di memoria che potrebbe alterare il contenuto del file di flusso che viene mappato. Se il parametro flags indica MAP_SHARED, il parametro prot specifica PROT_WRITE e il valore di sistema QSHRMEMCTL è 0, quindi le funzioni mmap() non riusciranno e un numero di errore dei risultati EACCES.

memoria
+2

Giustamente sicuro QSHRMEMCTL è specifico per iSeries. Per esempio, non c'è alcuna menzione in http://www.opengroup.org/onlinepubs/007908775/xsh/mmap.html. Come tante domande sulle apis Unix, la risposta dipende davvero da quale unix. –

+0

@Logan: abbastanza giusto, sembrava una limitazione irragionevole. –

-1

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 di IPC. Anche se IPC può essere fatto usando il file su disco e quindi usando anche mmap, ma sarebbe comparativamente lento. In alternativa puoi sempre usare MAP_ANONYMOUS con mmap che non esegue il backup con nessun file su disco.

+1

In che modo MAP_ANONYMOUS porta alla memoria condivisa? – Flexo

+0

MAP_ANONYMOUS può portare alla memoria condivisa tra processi correlati (figli, nipoti, ecc. E il processo che li ha forgiati). –

Problemi correlati