[pso] tema1 linux - syscall 0 este folosit

Razvan Deaconescu razvand at cs.pub.ro
Mon Mar 5 00:04:39 EET 2007


Andrei Popa wrote:
> eu in tema am protejat accesul la lista de PID-uri cu spinlock-uri, si
> in acele spinlock-uri am parsat lista si am apelat list_add, list_del,
> kfree, kmalloc.
> acum am citit ca nu e bine sa fie folosit kmalloc in spinlock-uri pt. ca
> s-ar putea sa tina spinlock-ul foarte mult.

kmalloc este un apel care poate sa blocheze procesul (sleep - se cauta 
pagini etc.) - se poate evita blocarea daca se foloseste GFP_ATOMIC, dar 
trebuie avut grija ... spatiul alocabil cu GFP_ATOMIC e limitat - daca 
sistemul nu dispune de memorie RAM fizica in acel moment, alocarea va esua

daca se intampla sa faci sleep in spinlock ... u are gone :-) ... o sa 
iti dea un oops de toata frumusetea

asa ca am inlocuit toate
> spinlock-urile pt. accesul la lista cu un semafor pe care fac down/up.
> este ok ? se depuncteaza cumva pt. ca in enuntul temei se spune sa se
> foloseasca spinlock-uri ?

in principiu este ok; doar ca solutia este ceva mai lenta

alta solutie ar fi sa prealoci unele zone inainte sa achizitionezi 
spinlock-ul si nu mai e nevoie nici de GFP_ATOMIC nici de folosire de 
semafoare; poti sa folosesti kfree in spinlock (la list_del) si la 
list_add intai faci alocarea zonei, o initializezi si faci _numai_ 
list_add in spinlock; ceva de genul:

aloca_element_lista;
initializeaza_element_lista;
spin_lock ();
list_add ();
spin_unlock ();

Razvan


More information about the pso mailing list