<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div>Salut,<br><br>Am o nelamurire in legatura cu tema 3 la SO - Memorie virtuala si as fi recunoscator daca as primi o sugestie. <br><br>Exista sanse sa fi interpretat sau inteles ceva gresit.. si atunci expunerea ce urmeaza sa o ia pe cai gresite..<br><br>Programul meu nu reuseste sa treaca un test, din suita de teste 3 : run_test3, si anume<span style="font-style: italic;"> ram_clean</span> din functia <span style="font-style: italic;">check_ram0</span>.
Studiind putin respectiva functie, am observat ca verifica daca in
fisierul de ram exista altceva in afara de 0 si am corelat-o cu cerinta
din enunt : <br>"Paginile vor fi <b>create</b> în memoria RAM doar atunci când programul
le accesează (on <span style="border-bottom: 1px dashed rgb(0, 102, 204); cursor: pointer;" class="yshortcuts" id="lw_1241424838_0">demand paging</span>). La crearea paginilor, acestea trebuie
să aibă doar bytes 0 (doar zero-uri)." <br>, care mie mi se pare putin vaga, in sensul ca poate fi interpretata in modul <span style="font-style: italic;">sa se initializeze ramul cu 0-uri</span>, dar si in modul <span style="font-style: italic;">sa se initializeze memoria virtuala cu 0-uri. </span><br><br>Am
incercat sa initializez atat memoria virtuala cat si fisierul ram cu 0,
insa apoi am realizat (sau cel putin asa mi se pare in acest moment) ca
este inutil si voi incerca sa explic de ce.<br><br>Functia run_test3 are urmatoarea secventa de inceput : <br>&nbsp;&nbsp;&nbsp; start = vinit (6, 3);<br>&nbsp;&nbsp;&nbsp; test ("init3", start != NULL);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; test_ram_swap (6, 3);<br>&nbsp;&nbsp;&nbsp; poison_ram_swap (6, 3);<br><br>&nbsp;&nbsp;&nbsp; sig_handler_fault = 0;<br>&nbsp;&nbsp;&nbsp; set_signal ();<br><br>&nbsp;&nbsp;&nbsp; rand_pos = (rand () % (p_sz / 4 - 2)) *
 4;<br><br>&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; 3; i++) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _read (i, PAGE_FAULT, rand_pos);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; _read (i, NO_PAGE_FAULT, rand_pos + 4);<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; ram_sync ();<br>&nbsp;&nbsp;&nbsp; check_ram0 (3);<br><br><span style="font-style: italic;">poison_ram_swap</span> va anula efectul initializarii ram-ului cu 0-uri, iar urmatoarea secventa de <span style="font-style: italic;">_read</span> va genera page_faulturi care vor aduce din swap in ram paginile respective. Coreland mai departe cu cerinta :<br>"Actualizarea inversa, de la RAM la memoria virtuala se realizeaza in
momentul copierii unei pagini din swap in RAM, in cazul unui page-fault
(cand pagina dorita se afla in swap).
"<br>programul
va updata memoria virtuala cu ce a fost adus din swap, adica tocmai cu
ce a scris functia poison_ram_swap si deci daca respecta cele 2 cerinte
asa cum eu le am inteles, programul nu va trece niciodata testul.<br><br>Imi
cer scuze daca am facut greseli sau daca am omis ceva, dar deja timpul
pierdut pentru aceasta problema a trecut de cateva ore bune si mi-ar
prinde bine putin ajutor.<br><br>P.S. : Razvan, imi cer scuze ca iti adresez direct mailul dar nu stiu sa postez pe <span style="border-bottom: 1px dashed rgb(0, 102, 204); cursor: pointer;" class="yshortcuts" id="lw_1241424838_1">so@cs.pub.ro</span> fiind logat... pana acum nu am primit raspunsuri de la respectiva adresa.<br><br>Multumesc,<br>Andrei Stoiculescu</div></div><br>



      </body><br />-- 
<br />This message has been scanned for viruses and
<br />dangerous content by
<a href="http://www.mailscanner.info/"><b>MailScanner</b></a>, and is
<br />believed to be clean.
</html>