[so] nelamurire tema 3

Mircea Bardac cs at mircea.bardac.net
Tue May 5 18:34:28 EEST 2009


Salut,

Stoiculescu Andrei wrote:
> Programul meu nu reuseste sa treaca un test, din suita de teste 3 :
> run_test3, si anumeram_clean din functia check_ram0. 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 :

> "Paginile vor fi create în memoria RAM doar atunci când programul
> le accesează (on demand paging). La crearea paginilor, acestea trebuie
> să aibă doar bytes 0 (doar zero-uri)." 
> , care mie mi se pare putin vaga, in sensul ca poate fi interpretata
> in modul sa se initializeze ramul cu 0-uri, dar si in modul sa se
> initializeze memoria virtuala cu 0-uri.
> 
> 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.
> 
> Functia run_test3 are urmatoarea secventa de inceput : 
>     start = vinit (6, 3);
>     test ("init3", start != NULL);    
>     
>     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);
> 
> poison_ram_swap va anula efectul initializarii ram-ului cu 0-uri, 

Gresit.

poison_ram_swap este apelat inaintea "initializarii ram-ului cu 0-uri".
Dupa cum ai spus si tu,
> "Paginile vor fi create în memoria RAM doar atunci când programul
> le accesează (on demand paging). La crearea paginilor, acestea trebuie
> să aibă doar bytes 0 (doar zero-uri)."

Asadar, ele trebuie create atunci cand sunt citite prin _read (lucru
care se intampla dupa poison_ram_swap).

-- 
Mircea
http://mircea.bardac.net


More information about the so mailing list