[so] [tema5] testul ramclean
Razvan Deaconescu
razvand at cs.pub.ro
Thu Dec 13 21:26:42 EET 2007
On Thu, 2007-12-13 at 18:17 +0200, Vlad Cananau wrote:
> Am o problema cu urmatorul test(ram_clean) din cadrul calupului de
> teste 3
> pe windows, el se asteapta sa gaseasca acolo ori RAM_POISON, ori zero
> pe linux, el se asteapta sa gaseasca acolo numai RAM_POISON.
>
> Problema este ca la mine in fisier am numai zero, ceea ce face ca pe
> windows sa treaca testul, iar pe linux nu.
>
> Nu prea inteleg ce urmareste acest test (testul 3). El umple fisierul
> RAM cu RAM_POISON, si fisierul SWAP cu SWAP_POISON. Apoi face trei
> citiri, care sa marcheze "activarea" a trei pagini de memorie, care
> vor fi scrise in RAM la sincronizare.
>
> In implementarea mea, memoria neinitializata contine zero. Cand se
> citeste, ea ramane zero, doar ca este marcata ca aflandu-se in RAM,
> alocata. La sincronizare, ea este scrisa practic in fisier. Din moment
> ce toate paginile care se pot scrie in RAM la testul trei sunt citite,
> si deci marcate pentru scriere, este foarte clar ca la sincronizarea
> fisierul de RAM se va umple cu zero.
>
> De unde discrepanta intre windows si linux, si de ce se asteapta sa
> faseasca RAM_POISON?
Stai sa o luam usor ("batraneste" - citat furat cu nerusinare de la Vlad
Nica :-P):
--- snippet ---
test_ram_swap (6, 3);
poison_ram_swap (6, 3);
sig_handler_fault = 0;
set_signal ();
rand_pos = (rand () % (p_sz / 4 - 2)) * 4;
for (i = 0; i < 3; i++) {
_read (i, PAGE_FAULT, rand_pos);
_read (i, NO_PAGE_FAULT, rand_pos + 4);
}
ram_sync ();
check_ram0 (3);
--- end of snippet ---
test_ram_swap verifica validitatea fisierelor de RAM/SWAP
poison_ram_swap "otraveste" fisierele RAM/SWAP
operatiile _read citesc pagini de memorie virtuala; intrucat paginile nu
se gasesc in memoria fizica (nu sunt mapate), atunci se va face maparea
lor in mod read_only din memoria fizica; paginile din memoria fizica
sunt mapate in memoria virtuala; astfel paginile de memorie virtuala vor
fi pagini otravite
ram_sync are rolul de sincronizare a memoriei virtuale si a memoriei
fizice (aici nu are rol; are rol doar cand modificam memoria virtuala si
trebuie actualizata si memoria fizica)
check_ram0 verifica daca paginile virtuale sunt "otravite"; asa si
trebuie sa fie din cauza operatiilor anterioare; acele pagini virtuale
contin numai informatii de tip poison
> P.S: Nu cred ar trebui sa ma intereseze niciodata ce se afla pe RAM
> neinitializat
Nu trebuie. E o greseala in testul de Windows comparatia cu 0
("readValue != 0")
Razvan
More information about the so
mailing list