Am spus ca nu vad posibilitatea simularii memorie virtuale folosind maparea intregului fisier de RAM intr-o bucata continua de memorie. Initial am dedus ca asta trebuie sa facem din indiciile oferite in enunt (e.g. <tt>&quot;ram_sync</tt> va fi implementată folosind un apel <tt>msync</tt>.
&quot;; &quot;un&quot; apel, nu mai multe pentru fiecare pagina). Implementarea mea curenta &quot;rezerva&quot;(folosind mmap anonim cu acces PROT_NONE) virt_pages pagini in memorie iar adresa obtinuta este apoi intoarsa de functia vinit. Exista 3 situatii in care poate aparea SEGFAULT:<br>
1. Exista pagini fizice nemapate si pagina virtuala nu se afla in RAM: aleg prima pagina din RAM nemapata si o mapez in zona de memorie rezervata la inceput in locul in care a aparut SEGFAULT.<br>2. Nu mai exista pagini de memorie nemapate si pagina virtuala nu se afla in RAM: aleg prima pagina din RAM mapata in memoria virtuala, o copiez in swap daca e dirty, o demapez, rezerv vechea zona de memorie (ca nu cumva sa o foloseasca altcineva), remapez pagina de RAM in locul unde a aparut SEGFAULT.<br>
3. Pagina se afla in RAM dar are doar PROT_READ: setez flagul dirty si ii dau dreptul PROT_WRITE.<br><br>Toate testele par sa treaca cu brio. O pagina se va afla la un momentt dat ori in RAM ori in SWAP. Implicit am limitat folosirea memcpy numai cand faceam transferul din RAM in SWAP si viceversa.<br>
<br>Mai ramane o intrebare... este valida solutia?<br><br><br><div class="gmail_quote">2009/4/30 Mircea Bardac <span dir="ltr">&lt;<a href="mailto:cs@mircea.bardac.net">cs@mircea.bardac.net</a>&gt;</span><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="im">Sergiu Iordache wrote:<br>
&gt; 2009/4/21 Andrei Bucur &lt;<a href="mailto:andrei.bucur@gmail.com">andrei.bucur@gmail.com</a>&gt;:<br>
&gt;&gt; Eu ma gandesc ca tema trebuie structurata in modul urmator:<br>
&gt;&gt; 1. virt_pages pagini mapate peste RAM-ul fizic;<br>
&gt;&gt; 2. phys_pages pagini mapate peste fisierul RAM;<br>
&gt;&gt; 3. virt_pages pagini mapate peste fisierul SWAP.<br>
&gt;&gt; Accesul la memoria simulata se va face strict prin (1). Fiecare pagina va fi<br>
&gt;&gt; protejata impotriva scrierii / citirii. In momentul in care se semnalizeaza<br>
&gt;&gt; un acces invalid se efectueaza operatiile necesare (aducere din (3) in (1)<br>
&gt;&gt; daca exista page fault etc.). Sincronizarea intre (1) si (2) se face prin<br>
&gt;&gt; apelul ram_sync, as in se copiaza din memoria virtuala paginile marcate ca<br>
&gt;&gt; fiind in RAM si &quot;dirty&quot;.<br>
&gt;&gt; Tu spui ca ar trebui sa elimin (1) si sa folosesc (2) pe post de memorie<br>
&gt;&gt; virtuala. Cum simulezi atunci pagefault? Functia vinit intoarce o adresa la<br>
&gt;&gt; care sunt mapate virt_pages.La (2) sunt mapate doar phys_pages, care e mai<br>
&gt;&gt; mic decat virt_pages.<br>
&gt;<br>
&gt; Ar fi bun un răspuns oficial, și eu tot ca Andrei am făcut deocamdată<br>
&gt; pentru că așa am înțeles din textul temei.<br>
<br>
</div>(adaugare la ce s-a comentat deja in acest thread, in caz ca mai este<br>
necesar)<br>
<br>
In primul rand, &quot;fisierul RAM&quot; si &quot;RAM-ul fizic&quot; sunt acelasi lucru.<br>
Maparea peste fisierul RAM poate fi considerata ca fiind &quot;modul de acces<br>
la RAM-ul fizic&quot;.<br>
<br>
As dori sa stiu ce anume in textul temei duce la ideea ca ar fi 3 zone<br>
de memorie (3 mapari/alocari)?<br>
<br>
In textul temei este specificat faptul ca &quot;Paginile de memorie virtuală<br>
(din spațiul de adresă al procesului) se vor mapa direct peste fișierul<br>
de RAM folosind apelurile mmap și MapViewOfFile.&quot;<br>
<br>
Asta nu inseamna ca *toate* paginile de memorie virtuala se mapeaza<br>
peste fisierul RAM, pentru ca:<br>
- fisierul RAM are phys_pages iar<br>
- memoria virtuala are virt_pages.<br>
(iar aceste valori pot fi diferite)<br>
<font color="#888888"><br>
--<br>
</font><div class="im">Mircea<br>
<a href="http://mircea.bardac.net" target="_blank">http://mircea.bardac.net</a><br>
_______________________________________________<br>
</div><div><div></div><div class="h5">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>