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

Catalina Caloian catalina.caloian at gmail.com
Tue Jan 8 19:26:31 EET 2008


Buna.

M-am uitat putin pe tema ta si impresia mea e ca ai combinat doua abordari
posibile:

   - memoria virtuala sa fie reprezentata de o mapare a fisierului care
   simuleaza RAM-ul, caz in care 'ram_sync' s-ar rezuma la un 'msync'
   - memoria virtuala sa fie reprezentata de o zona obtinuta prin maparea
   de memorie, caz in care 'ram_sync' ar presupune o "sincronizare de mana" a
   continutului memoriei virtuale simulate si a fisierului RAM

'mmap' cu 'MAP_ANONYMOUS' nu rezerva un spatiu de adrese pe care mai apoi
sa-l poti folosi ca sa mapezi un fisier; zona obtinuta cu 'MAP_ANONYMOUS'
poate fi folosita ca atare (doar ca in loc sa mapezi un fisier, ai mapat
memorie).

Primul parametru dat lui 'mmap' e o sugestie de care sistemul de operare
poate sa nu tina cont si sa mapeze la o cu totul alta adresa decat cea
dorita de tine.

Cand in 'vinit' mapezi cu 'MAP_ANONYMOUS', zona obtinuta e suficienta pentru
a simula memoria virtuala. In handler, tu incerci sa mapezi peste fisierul
RAM la exact aceeasi adresa; daca asta vroiai de la inceput (ca memoria
virtuala sa fie o mapare a fisierului RAM), nu mai era necesara acea mapare
cu 'MAP_ANONYMOUS' din 'vinit'. In 'vinit' ori mapezi memorie, ori mapezi
fisierul si in handler nu mai ai de ce sa mapezi/demapezi.

Sfatul meu ar fi ca tinand cont de observatiile de mai sus, sa aduci
modificarile necesare temei tale si sa retrimiti.

Catalina

On Jan 8, 2008 6:48 PM, Catalina Caloian <catalina.caloian at gmail.com> wrote:

> On Jan 8, 2008 6:11 PM, Liviu Ciortea <liviuefer at gmail.com> wrote:
>
> > Nu chiar... In solutia mea o pagina virtuala nu se mapeaza efectiv de
> > memoria reala a sistemului, ci de o portiune din fisierul de RAM.
> > Aceasta mapare are loc la aducerea paginii din swap sau la alocarea
> > ei, deci in event handler.
>
>
> Chiar daca mapezi fisierul care simuleaza RAM-ul sau mapezi memorie,
> aceasta mapare ar trebui sa se faca o data, in 'vinit', si in intregime; in
> handler ar trebui doar sa schimbi protectia zonelor ce corespund paginilor
> accesate. Tu din 'vinit' ce intorci (pointer catre ce zona si de ce
> dimensiune?) daca mapezi doar in handler?
>
>
> > Cand trebuie s-o inlocuiesc (si eventual
> > s-o trimit in swap), trebuie mai intai sa o demapez de pe aceasta
> > portiune fizica din fisierul de RAM, deci aici apare acel unmap, si
> > apoi nevoia de remapare.
>
>
> Cand "eliberezi" o pagina fizica n-ar trebui sa faci 'unmap', ci doar sa
> schimbi protectia astfel incat un acces ulterior sa-ti genereze un page
> fault.
>
>
> > Pana la urma, ambele rezolvari au avantajele si dezavantajele lor.
> > Este de preferat una dintre ele, sau vor fi considerate corecte
> > amandoua?
> >
>
>
> Nu sunt sigura ca am inteles complet ce faci tu, dar nu pare tocmai
> corect.
>
> Catalina
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/so/attachments/20080108/d53de336/attachment-0001.htm


More information about the so mailing list