Buna.<br><br>M-am uitat putin pe tema ta si impresia mea e ca ai combinat doua abordari posibile: <br><ul><li>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'
</li><li>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
</li></ul>'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).
<br><br>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.<br><br>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.
<br><br>Sfatul meu ar fi ca tinand cont de observatiile de mai sus, sa aduci modificarile necesare temei tale si sa retrimiti.<br><br>Catalina<br><br><div class="gmail_quote">On Jan 8, 2008 6:48 PM, Catalina Caloian <<a href="mailto:catalina.caloian@gmail.com">
catalina.caloian@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">On Jan 8, 2008 6:11 PM, Liviu Ciortea <
<a href="mailto:liviuefer@gmail.com" target="_blank">liviuefer@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><div class="Ih2E3d"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Nu chiar... In solutia mea o pagina virtuala nu se mapeaza efectiv de<br>memoria reala a sistemului, ci de o portiune din fisierul de RAM.<br>Aceasta mapare are loc la aducerea paginii din swap sau la alocarea<br>ei, deci in event handler.
</blockquote></div><div><br>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?<br> <br></div><div class="Ih2E3d"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Cand trebuie s-o inlocuiesc (si eventual
<br>s-o trimit in swap), trebuie mai intai sa o demapez de pe aceasta<br>portiune fizica din fisierul de RAM, deci aici apare acel unmap, si<br>apoi nevoia de remapare.</blockquote></div><div><br>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.
<br></div><div class="Ih2E3d"><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Pana la urma, ambele rezolvari au avantajele si dezavantajele lor.
<br>
Este de preferat una dintre ele, sau vor fi considerate corecte<br>amandoua?<br></blockquote></div></div><br><br>Nu sunt sigura ca am inteles complet ce faci tu, dar nu pare tocmai corect.<br><font color="#888888"><br>Catalina
<br>
</font></blockquote></div><br>