[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