[so] nelamurire tema 3

Stoiculescu Andrei andreistoiculescu at yahoo.com
Mon May 4 04:19:57 EEST 2009


Salut,

Am o nelamurire in legatura cu tema 3 la SO - Memorie virtuala si as fi recunoscator daca as primi o sugestie. 

Exista sanse sa fi interpretat sau inteles ceva gresit.. si atunci expunerea ce urmeaza sa o ia pe cai gresite..

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, iar urmatoarea secventa de _read va genera page_faulturi care vor aduce din swap in ram paginile respective. Coreland mai departe cu cerinta :
"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).
"
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.

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.

P.S. : Razvan, imi cer scuze ca iti adresez direct mailul dar nu stiu sa postez pe so at cs.pub.ro fiind logat... pana acum nu am primit raspunsuri de la respectiva adresa.

Multumesc,
Andrei Stoiculescu



      
-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090503/7ce7ad08/attachment.htm>


More information about the so mailing list