NU ai voie sa intorci intorci maparea swapului pentru ca ar insemna ca procesul care foloseste biblioteca sa acceseze direct swapul, nu RAMul. Acest lucru e conceptual imposibil. <br>Nu zice nimeni sa folosesti write cand scrii in swap. Eu cand "creez" o pagina virtuala mapez in memorie si corespundentul ei din fisierul de swap. Nu folosesc decat memcpy pentru a copia dintr-o parte in alta pagini.<br>
<br><div class="gmail_quote">2009/4/30 Dragos Valentin Moinescu <span dir="ltr"><<a href="mailto:dragos.moinescu@gmail.com">dragos.moinescu@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Mai, din cate am inteles eu din tema, nu are niciun sens sa folosesti<br>
RAM-ul fizic decat prin zonele mapate din cele doua fisiere.<br>
1 fisier mapat este SWAP-ul<br>
1 fisier mapat este RAM-ul<br>
<br>
in vinit() intorci adresa oferita prin maparea SWAP-ului (ca doar aia<br>
este toata memoria de care beneficiaza programul). Zona de memorie<br>
oferita prin mmap() va fi folosita de integrator sa acceseze acele<br>
zone de memorie. Toate paginile din SWAP sunt cu PROT_NONE, cele din<br>
RAM sunt PROT_READ | PROT_WRITE | PROT_EXECUTE, depinde de nivelul de<br>
protectie cerut de operatie. Cand aduci o pagina din SWAP in RAM, faci<br>
un memcpy intre cele doua zone de memorie si mprotect(PROT_READ |<br>
PROT_WRITE | PROT_EXECUTE) pe acea zona din SWAP. este mai bine sa<br>
faci o mapare pentru RAM decat sa tii lista de intrari in RAM si sa<br>
executi tu write() pe acele zone.<br>
<br>
2009/4/30 Andrei Bucur <<a href="mailto:andrei.bucur@gmail.com">andrei.bucur@gmail.com</a>>:<br>
<div><div></div><div class="h5">> Nefiresc ar putea fi faptul ca-s obligat sa fac mmap-uri anonime doar pentru<br>
> a fi sigur ca cine va folosi biblioteca nu va scrie la adresa intoarsa de<br>
> vinit in locurile unde nu este mapata nicio pagina din RAM. Si dupa cum bine<br>
> observ, in test.c se foloseste malloc deci blocarea accesului la acele<br>
> pagini este absolut necesara.<br>
> Altceva ar putea fi implementarea On Demand Paging. Cum in tema nu putem<br>
> vorbi de aducerea paginilor de pe disc in memorie, atunci tot ce trebuie sa<br>
> facem e sa mapam o pagina din fisierul RAM si sa o initializam cu 0? In<br>
> enunt se precizeaza "Ele [Paginile] vor fi create...". Nu pot sa spun ca am<br>
> inteles exact la ce se refera acest act de creatie in contextul in care<br>
> cantitatea de memorie folosita ramane constanta pe parcursul programului si<br>
> initializarea paginilor cu 0 nu mi se pare un fenomen atat de special.<br>
><br>
> 2009/4/30 Mircea Bardac <<a href="mailto:cs@mircea.bardac.net">cs@mircea.bardac.net</a>><br>
>><br>
>> Andrei Bucur wrote:<br>
>> > Toate testele par sa treaca cu brio. O pagina se va afla la un momentt<br>
>> > dat<br>
>> > ori in RAM ori in SWAP. Implicit am limitat folosirea memcpy numai cand<br>
>> > faceam transferul din RAM in SWAP si viceversa.<br>
>> ><br>
>> > Mai ramane o intrebare... este valida solutia?<br>
>><br>
>> Atat timp cat trec testele, solutia este valida. Daca tie ti se pare<br>
>> ceva nefiresc in rezolvarea ta*, te rog sa ne spui.<br>
>><br>
>> * nefiresc = ai implementa altfel/logic ti se pare ca ceva nu e corect<br>
>> /testele verifica ceva aiurea si tu ai scris rezolvarea cu anumite<br>
>> hack-uri pentru ca testele sa treaca<br>
>><br>
>> --<br>
>> Mircea<br>
>> <a href="http://mircea.bardac.net" target="_blank">http://mircea.bardac.net</a><br>
>> _______________________________________________<br>
>> so mailing list<br>
>> <a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br>
>> <a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>
><br>
><br>
> _______________________________________________<br>
> so mailing list<br>
> <a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br>
> <a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>
><br>
><br>
<br>
<br>
<br>
</div></div>--<br>
Best regards,<br>
<font color="#888888">Dragos Moinescu<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
so mailing list<br>
<a href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br>
<a href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br>
</div></div></blockquote></div><br>