[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