[pso] [T1]Spinlock-uri vs Semafoare
Razvan Deaconescu
razvand at cs.pub.ro
Fri Mar 14 15:58:33 EET 2008
On Fri, 2008-03-14 at 14:59 +0200, Diana Elena Kelerman wrote:
> 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.
De ce e nevoie sa protejezi _inclusiv_ apelul original? Tabela de
apeluri de sistem salvata (original_syscall_table) nu este modificata
niciodata de nimeni. De ce trebuie sincronizat accesul la ea.
> 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.
Nu inteleg care este problema. In functia in care este interceptat
apelul original pentru monitorizare, apelezi functia originala (fara
sincronizare; nu e nevoie - apelul original nu se schimba). Operatiile
pe lista/listele de procese monitorizate le sincronizezi prin
spinlock-uri (nu sunt operatii blocante).
Razvan
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
More information about the pso
mailing list