[pso] [T1]Spinlock-uri vs Semafoare

Diana Elena Kelerman diana.kelerman at gmail.com
Fri Mar 14 14:59:12 EET 2008


Pentru fiecare syscall interceptat pastrez intr-o structura lista de pid-uri
pentru care este monitorizat, syscall-ul original si alte informatii mai
putin importante.

Structurele astea le pastrez intr-un vector de syscall-uri interceptate.
In momentul in care accesez un syscall din acest vector, il protejez cu un
spinlock.

In functia de monitorizare, eu accesez syscall-ul corespunzator pentru
verificari si pentru a apela functia de system originala. Numai ca aceasta
functie originala poate fi blocanta, deci nu o pot executa in regiunea
critica
protejata de spinlock-ul asociat syscall-ului meu.

Daca eliberez pur si simplu spinlock-ul inainte de a apela functia originala
creez conditii pentru un race si nu mai stiu daca verificarile facute in
regiunea critica mai sunt valabile.

Deci ma aflu in situatia de a apela o functie blocanta in regiunea critica
(primul caz de la folosirea semafoarelor :) )

Pot folosi semafoare? Sau incerc alta abordare care se va mula mai bine
pe spinlock-uri?

Diana

2008/3/14 Razvan Deaconescu <razvand at cs.pub.ro>:

> On Fri, 2008-03-14 at 13:29 +0200, Diana Elena Kelerman wrote:
> > Salut,
> >
> > De ce este indicat sa folosim spinlock-uri si nu semafoare? E vreo
> > problema daca preemptivitatea kernelului ramane activa intre un down
> > si un up pe semafor? Oricum resursa de care am nevoie este protejata.
>
> Semafoare sunt mai heavy-weight decat un spinlock. Desi spinlock-ul
> inseamna busy-waiting pentru regiuni critice de mica dimensiune este de
> preferat. Folosirea unui semafor pentru regiuni critice de dimensiune
> mai mare ar insemna overhead important.
>
> Semafoarele se folosesc in urmatoarele situatii:
> - in regiunea critica se vor realiza operatii blocante
> - regiunea critica este de dimensiune mare
>
> De partea cealalta, spinlock-urile se folosesc atunci cand:
> - se ruleaza cod in context intrerupere/amanabil
> - regiunea critica este de dimensiune mica
>
> In cazul de fata, regiunile sincronizate sunt mici si se recomanda
> spinlock-uri. In plus, pe un sistem uni-procesor spinlock-urile doar
> dezactiveaza preemptivivatea kernel-ului (se spune "a spinlock is
> compiled out"), adica dispare problema de busy waiting.
>
> > In implementarea mea actuala fiecare structura in care imi pastrez
> > informatii legate de un syscall este protejata de un spinlock. In
> > momentul in care trebuie sa apelez syscall-ul original, sunt nevoita
> > sa eliberez spinlock-ul si se ajunge la un race.
>
> Nu cred ca inteleg la ce te referi. Poti fi putin mai specifica, te rog?
>
> Razvan
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
> _______________________________________________
> pso mailing list
> pso at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20080314/0ae000bc/attachment.htm 


More information about the pso mailing list