Salut!<br>Tot postez mesaje cu partII in header, pt ca nush sa dau reply la un mesaj anterior( mesajele de pe mailing list nu imi vin in inbox - asa am setat eu, pentru ca asa doresc, am pus daily digest -,&nbsp; asa ca nu am posibilitatea unui e-mail de reply). Sper sa nu deranjeze pe nimeni chestia asta...<br><br><br>Referitor la reply-ul tau, Razvan, iti dau dreptate intr-un punct. M-am uitat mai atent pe codul meu, si am gasit niste bug-uri monstruoase, care nu numai ca impiedicau trecerea anumitor teste, insa impiedicau insasi functionarea "normala" a pager-ului. Asta cauza si erorile "criptice" ce apareau cand uploadam tema pe sit - era vorba doar de un buffer overflow cauzat de faptul ca nu am fost eu atent cand am codat... Deci: ai dreptate, am gresit prin prisma faptului ca nu m-am uitat foarte atent mai intai la codul meu, si apoi la codul testului, ci eu am facut exact invers.<br><br>Acum urmeaza critica&nbsp; :-P <br>O sa explic mai intai in ce consta bug-ul
 meu. In esenta, datorita faptului ca am fost neglijent cu numele unei variabile, intr-un punct-cheie al programului (adica in SIGSEGV handler/ GFPHandler :-) ), programul meu nu facea swapping niciodata !!! Pur si simplu, el aducea pagini in memoria RAM, chiar daca aceasta se umplea! Clar, tema mea era "invalida" atunci; insa, ma surprinde acum cat de multe teste era in stare sa treaca vesiunea aceea a temei; practic, tema mea nu facea nimic esential pt swapping, si cu toate acestea ea pica (doar) 6 teste, din cate sunt? 30? Asta m-a facut sa cred ca sunt foarte aproape de final, si sa ma uit mai intai in codul testului, pt ca credeam ca mai sunt niste situatii peste care eu am trecut cu vederea mai rapid, si le pot depista din teste( mentionez ca asta mi s-a mai intamplat si la alte teme! adica: citind codul testelor, sa imi dau seama unde gresisem eu, la logica programului meu , evident, deci eu personal nu cred ca e o mare tragedie daca noi ne uitam si pe codul
 testelor, nu cred ca trebe sa te apuci sa programezi in assembler prea curand... :P). Dar revin: totushi, parca prea usor trec anumite versiuni de teme testele. Asta pe mine nu m-ar deranja - si nici pe colegii mei cred! :D - pentru ca ar insemna ca tema noastra e gata mai repede - trece testu' nu? Insa, lucrurile nu stau chiar asa; cu siguranta peste cod se va uita si un om la un moment dat, si daca va descoperi un cod ce nu face ce trebuie, dar trece testele, dintr-un motiv sau altul, intentionat sau nu!, deci cum ziceam, daca va descoperi asa ceva, va invalida tema. Asta inseamna ca ne putem trezi in situatia trista zic eu, ca cineva de ex sa fi facut o tema ce trece toate testele - sau o mare parte din ele, sa zicem - si totushi sa ia pe tema respectiva un punctaj gen 6-7. Cu siguranta asta ar fi fost cazul meu, daca nu ma uitam pe varza pe care am trimis-o eu pe sit prima data si nu as fi corectat-o.<br><br>Deci, un fel de concluzie-rugaminte-sfat-... : pe viitor,
 faceti testele sa "testeze" efectiv TOT ceea ce se doreste de la tema respectiva - pt ca testul este barometrul esential la care se raporteaza cel ce rezolva tema - studentu' zice : "tema a trecut testele =&gt; iau 10 pe ea", in contextul in care nu apar warninguri la compilare(si cu warningurile astea as putea face o dizertatie separata, dar, poate aldata...) si ai un readme bun, si cod bine scris, etc...<br><br><br>Si acum , sa revenim la esenta testului pentru tema5... <br><pre>You got it wrong here!<br>Testul if (page_id == mapped_vpages[k]) verifica daca o pagina virtuala <br>care se gaseste in swap (identificata prin page_id) se gaseste si in RAM <br>  (caz clar de functionare invalida a temei ... o pagina virtuala nu se <br>poate afla simultan in RAM si swap).<br><br></pre>exact de asta spuneam eu ca modul asta de a "identifica" paginile, memorand ID-ul lor in insasi zona de memorie catre care pointeaza, este un "ugly hack". Tu afirmi, prin codul scris in test, ca o
 pagina virutala se afla simultan in RAM si in swap daca identificatorii cititi din zona de memorie catre care pointeaza cele doua pagini coincid. Asta inseamna ca din start cuplezi partea de adresare a memoriei cu continutul efectiv al dansei. Sa iti dau un exemplu, cum am procedat eu in tema, si cum cred de alfel ca poate proceda orice swapper din lumea asta: in momentul cand aduc o pagina din swap inapoi in RAM, ma intereseaza ca , in momentul unui acces ulterior la pagina adusa din swap, sa nu mai dea page fault - adica, pagina ceruta chiar sa se gaseasca in RAM , si nu in swap. In rest, nu ma intereseaza nimic altceva - ca in SWAP si RAM se afla aceleasi chestii, sau ca in SWAP e junk, e foarte putin relevant - zic eu.<br><br>De ce afirmi tu ca "o pagina virtuala nu se poate afla simultan si in RAM, si in SWAP" ? Afirmatia ta ar fi adevarata, daca am discuta la nivel logic, adica la nivel de "adresare" : o pagina virtuala se poate gasi la un moment dat fie in RAM, fie
 in SWAP, dar nu in ambele locuri simultan, din punct de vedere al adresarii; insa, din punctul de vedere al continutului, o pagina virtuala se poate foarte bine gasi si in RAM si in SWAP. DE CE ? Pai, poate eu , ca si implementator, sunt mai "lazy" din fire si, in momentul cand copiez pagina din SWAP in RAM, las SWAP-ul nealterat; in felul acesta, exact acelasi lucru se va gasi si in RAM, si in SWAP, la aceeasi adresa de memorie; si anume, ce se va gasi ? pai, exact adresele respectivelor zone de memorie!!! iata hack-ul, in toata splendoarea lui !! si nu putem vorbi de o eroare de logica a programului, pt ca sa fim seriosi! cui ii pasa de cum arata SWAP-ul? ne intereseaza doar ca sistemul sa ii creeze impresia utilizatorului ca are un RAM infinit(i.e. limitat doar de dimensiunea adreselor utilizate). Tu, in schimb, folosesti SWAP-ul tocmai pentru a verifica logica programului, ceea ce mie mi se pare gresit.<br><br>Iar partea cu have_count - sincer, nici pana acum nu
 inteleg cum functioneaza check_swap , dar nu mai conteaza, pt ca am trimis tema si nu cred ca o sa o mai modific, pt ca nu mai exista timp pentru mine...<br>&nbsp;<br>Am scris mult si poate ca nu am fost coerent, dar sper ca s-a inteles ce am vrut sa comunic. Si sper ca nu am suparat pe nimeni cu post-ul asta - am vrut doar sa fac niste observatii referitor la problemele si nelamuririle cu care m-am intalnit eu cand mi-am facut tema.<br><br>PS: Pe langa bug-urile proprii, pentru care imi asum vina, o mare parte a problemelor cu car em-am confruntat eu in implementarea temei s-au datorat faptului ca fisierele ce simuleaza RAM-ul, respectiv SWAP-ul, le-am mapat in spatiul de adresa al procesului aplicatiei. D-asta apare si neconcordanta descrisa pe larg mai sus, ce duce la concluzia aparenta zic eu " pagina virtuala nu se poate afla simultan si in RAM, si in SWAP" - sau cel putin asa imi justific faptul ca alti colegi nu s-au ivit cu astfel de probleme . Deci : sfat pentru
 cei ce se vor apuca ceva mai tarziu de tema5 SO: tema e simpla si instructiva , dar nu faceti cu memory-mapped files, ca o sa aveti ceva mai multe probleme! ;-)<br><p>&#32;

<hr size=1>
Don't get soaked.  Take a<a href="
http://tools.search.yahoo.com/shortcuts/?fr=oni_on_mail&#news"> quick peak at the forecast </a><br> with the<a href="
http://tools.search.yahoo.com/shortcuts/?fr=oni_on_mail&#news">Yahoo! Search weather shortcut.</a>