[so] [Tema3] Intrebare mmap
Mircea Bardac
cs at mircea.bardac.net
Fri May 1 17:49:32 EEST 2009
Adrian Lascateu wrote:
> M-am incurcat se pare la lucrul cu maparile. Sa zicem ca aveam
> urmatoarea situatie:
>
> a = mmap(9000); <- deci a este pointer catre o zona de 9000; a este
> mem virtuala;
>
> Daca as vrea sa mapez acum o bucata de fisier (pag de ram in caz
> concret) in memoria virtuala (in a) ca fiind pagina 5 as zice:
>
> temp = mmap(a+5*pagesize,..,ram,offset) <- se mapeaza in memoria care
> s-a mapat in spatiul procesului.
>
> In primul rand as vrea o explicatie pentru ce se intampla si cum au
> loc maparile. Daca vreau sa accesez pagina respectiva este corect sa
> zic a+5*pagesize sau trebuie lucrat cu temp?
>
> Acum sa zicem ca vreau sa mut pagina in swap. O copiez dupa care
> trebuie sa o demapez. Daca fac unmap(a+5*pgsz,pgsz) se demapeaza doar
> pagina din ram sau pierd si memoria virtuala de acolo?
Quote din textul temei (sectiunea Enunt):
"Paginile de memorie virtuala (din spatiul de adresa al procesului) se
vor mapa direct peste fișierul de RAM folosind apelurile mmap si
MapViewOfFile."
Procesul lucreaza doar cu aceasta memorie, memorie pe care va recomandam
sa o mapati direct peste fisierul RAM (pentru ca simularea sa fie cat
mai apropiata de realitate). Altfel spus, nu sunt necesare mai multe
mapari (mapare ANONYMOUS pentru memorie virtuala, mapare peste fisierul
RAM), cand se pot mapa parti (consecutive) din memoria virtuala direct
peste fisierul RAM.
Daca voi preferati sa lucrati atat cu (1) o mapare a fisierului de RAM
cat si cu (2) o mapare de memorie (ANONYMOUS) pe care o returnati in
vinit, atunci va trebui sa faceti management "de mana" al
sincronizarilor" intre cele doua memorii.
Acest lucru nu se apropie in schimb in niciun fel de realitate. In
realitate, adrese virtuala X (dintr-o pagina de memorie virtuala a unui
proces) se va translata (eventual prin intermediul TLB) intr-o adresa
fizica Y (din memoria RAM) iar accesul se va face direct la aceasta
adresa. Acesta este si motivul pentru care am precizat in tema "Paginile
de memorie virtuala (din spatiul de adresa al procesului) se vor mapa
direct peste fișierul de RAM folosind apelurile mmap si MapViewOfFile."
Practic, aceasta mapare tine loc de translatare din adrese virtuale in
adrese fizice.
--
Mircea
http://mircea.bardac.net
More information about the so
mailing list