[so] [Tema5] Secventa munmap/mmap pe Linux

Liviu Ciortea liviuefer at gmail.com
Tue Jan 8 13:34:46 EET 2008


Salut!

Pe Linux nu am reusit sa fac tema intr-un mod 100% safe.  Metoda mea
este urmatoarea: fac o rezervare initiala a intregului spatiu de
adrese necesar, apoi cand este nevoie sa aloc o pagina noua sau sa
aduc una din swap, o leg de o pagina fizica din fisierul ce simuleaza
memoria RAM.  Problema este ca unmap sterge toate maparile existente,
inclusiv rezervarea corespunzatoare, deci este nevoie de o
"re-rezervare".  Aceasta metoda imi pare a fi mai degraba un hack,
nefiind safe.  Nimic nu-mi garanteaza ca adresa respectiva ramane
disponibila intre cele doua apeluri (poate fi mapata, spre exemplu,
intr-un alt thread).  Intrebarea mea este, se poate inlocui secventa
de instructiuni munmap/mmap pentru a fi total safe?

Pe Windows, VirtualAlloc si secventa de flaguri MEM_RESERVE,
MEM_COMMIT, MEM_DECOMMIT si MEM_RELEASE asigura o rezolvare safe (cu
toate ca aici nu mai leg efectiv pagina virtuala de pagina fizica si
ma bazez pe functia de sincronizare RAM ca sa actualizez fisierul
corespunzator).

Care este "pozitia oficiala" fata de acest aspect?  Impresia mea este
ca riguros vorbind, prima solutie nu este corecta in forma descrisa,
dar nu am gasit alta metoda de rezolvare.

Liviu Ciortea


More information about the so mailing list