[so] ram_sync

Lucian Adrian Grijincu lucian.grijincu at gmail.com
Sun May 11 03:52:48 EEST 2008


2008/5/11 Alexandru Marinescu <alexandru.marinescu at yahoo.com>:
> In implementarea temei am ales sa mapez fisierele peste memoria din program.
> In consecinta creez fisierele cu drepturi de citire/scriere si o mapare cu
> protectie PROT_READ | PROT_WRITE. Memoria virtuala este creata initial cu
> PROT_NONE.
>
> In functia de swapout am urmatoarea logica:
> 1. demapeaza pagina care mi-a dat sigsegv din mem virt
> 2. mapeaza pagina care este pe poz 1 in ram, in swap la pagina
> corespunzatoare
> 3. modifica proprietatile paginii de la pct 2. pentru a reflecta schimbarile
> 4. verific daca pagina de la pct 1. este dirty -> scrie in swap
> 5. mapeaza pagina in ram la prima pozitie(asta este algoritmul pe care
> doresc sa il folosesc la alegera paginii)
> 6. modifica proprietatile paginii de la pct 1 pentru a reflecta schimbarile
> 7. scrie informatiile din swap in ram
>
> Deoarece am folosit mapare pe fisiere ar trebui sa folosesc memcpy pentru a
> transfera informatiile dintr-un fisier intr-altul la punctele 4, 7.
>
> Problema mea este urmatoarea:
> In momentul in care se apeleaza ram_sync (care nu este nimic altceva decat
> un msync(ram, ram_size, MS_SYNC)) primesc urmatorul output de la perror:
> "Cannot allocate memory". obs: ram = adresa la care a fost mapat fisierul
> ram.
>

man 2 msync:
       ENOMEM The indicated memory (or part of it) was not mapped.

Verifică dacă toată zona corespunzătoare lui "ram" e corect mapată:
   char * ramp = (char*) ram;
   char x;
   for(int i=0;i<ram_size;i++) x+=ramp[i];
in signal handler verifică daca sigsegv a fost generat de un acces la
o adresa din [ramp, ramp+ram_size).

> Daca comentez msync-ul voi trece majoritatea testelor cu urmatoarele
> exceptii:
> T2: check_ram, swap_ram_precheck, swap_count
> T4: check_ram, swap_ram_precheck, swap_count.
>
> Care ar putea fi cauza?
>
> Multumesc!
>
> ________________________________
> Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it
> now.
> _______________________________________________
> so mailing list
> so at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>
>



-- 
Lucian


More information about the so mailing list