2011-09-07 10 views
6

Sono di fronte a un problema abbastanza difficile. Sto cercando di ottenere 2 aree di memoria virtuale che puntano alla stessa memoria fisica. Il punto è di avere diversi parametri di protezione della pagina su diverse aree di memoria.Come mappare due indirizzi virtuali sulla stessa memoria fisica su linux?

Su questo forum, l'utente sembra avere una soluzione, ma sembra un po hacky ed è abbastanza chiaro che qualcosa di meglio si può fare prestazioni-saggio: http://www.linuxforums.org/forum/programming-scripting/19491-map-two-virtual-memory-addres-same-physical-page.html

Come sto affrontando lo stesso problema, Voglio dare un colpo qui per sapere se qualcuno ha un'idea migliore. Non abbiate paura di menzionare i dettagli sporchi dietro il cofano, questo è ciò di cui tratta questa domanda.

Grazie da anticipo.

risposta

3

Sto cercando di ottenere 2 aree di memoria virtuale puntate sulla stessa memoria fisica.

mmap stessa regione nello stesso file, per due volte, o utilizzare System V shared memory (che non richiede la mappatura di un file in memoria).

+0

Questo è ancora peggio. Se MAP_SHARED è specificato, sarà richiesto IO e se MAP_PRIVATE è impostato, la copia su write renderà il trucco inoperante. La soluzione ha lo stesso inconveniente della soluzione proposta nel thread: questa condivisione di memoria attraverso processo in modo incontrollato. – deadalnix

+0

@deadalnix: aggiunta una nota su System V SHM. Ci sono, AFAIK, nessun altro modo per farlo nello spazio utente. –

+0

@larsmars> yes Le chiamate System V sono ciò che viene suggerito nel collegamento. Funziona, ma la memoria potrebbe essere agganciata abbastanza facilmente da un altro processo, che è problematico per la sicurezza. – deadalnix

3

Suppongo che se non ti piace la memoria condivisa di Sys V potresti usare POSIX shared memory objects. Non sono molto popolari ma disponibili su Linux e BSD almeno.

Una volta ottenuto un file con shm_open è possibile chiamare immediatamente shm_unlink. Quindi nessun altro processo può collegarsi alla stessa memoria condivisa, e puoi farlo mmap più volte. Ancora un piccolo periodo di gara disponibile però.

+0

Haha, non è che non mi piaccia il SysV. Ciò che non mi piace è consentire alla condivisione della memoria di ottenere qualcosa che non ha nulla a che fare con questo. – deadalnix

Problemi correlati