[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