Documente Academic
Documente Profesional
Documente Cultură
Sisteme Concurente Si Distribuite
Sisteme Concurente Si Distribuite
Capitolul 3
2017 - 2018
Rezumat
• Invarianti
• Verificarea modelelor
2017 - 2018
Semantica proprietatilor de corectitudine
2017 - 2018
A treia incercare
Sectiune critica V3
boolean wantp false
boolean wantq false
p q
loop forever loop forever
p1: sectiune non-critica q1: sectiune non-critica
p2: wantp true q2: wantq true
p3: await wantq = false q3: await wantp = false
p4: sectiune critica q4: sectiune critica
p5: wantp false q5: wantq false
Sursa: M.Ben-Ari, 2006
• Formula p1 q1 wantp wantq este adevarata doar in starea pcp
= p1, pcq = q1, wantp = false, wantq = false
• Formula p4 q4 este adevarata cand procesele se afla simultan in
sectiunea critica. O conditie de excludere mutuala este (p4 q4).
2017 - 2018
Demonstrarea prin inductie a invariantilor
• Un invariant este o formula logica care este adevarata in
fiecare stare a unui program concurent.
• Deoarece algoritmul “Sectiune critica V3” verifica proprietatea
de excludere mutuala, formula (p4 q4) este un invariant.
2017 - 2018
Exemplu
• Notatie: O formula disjunctiva pi pi+1 … pj, unde pk
pentru k = i, i+1, …, j sunt instructiuni succesive in acelasi
proces se noteaza simplificat prin pi..j.
• Propozitie: In cazul algoritmului “Sectiune critica V3”:
a. Formula A p3..5 wantp este un invariant.
b. Formula B wantp p3..5 este un invariant.
c. Formulele p3..5 wantp si q3..5 wantq sunt invarianti
d. Formula (p4 q4) este un invariant.
• Observatii:
– Este suficient sa demonstram a, deoarece b rezulta prin analogie.
– Punctul c rezulta considerand formulele simetrice cu cele din a si b si
combinand toate cele 4 formule.
– Rezulta ca e suficient sa demonstram a si apoi d.
2017 - 2018
Demonstratia punctului a
• Pasul initial e trivial deoarece p3..5 = false si wantp = false.
• In pasul inductiv, intai observam ca executia procesului q nu
afecteaza valoarea formulei. Daca suntem in p1 nu este afectata
valoarea de adevar a formulei. Daca suntem in p3 sau p4 atunci
nu se schimba valorile lui wantp si p3..5, astfel ca invariantul
se pastreaza.
• Daca suntem in p2 atunci in starea urmatoare wantp devine
true, iar p3..5 devine true, asa ca invariantul se pastreaza.
• Daca suntem in p5 atunci in starea urmatoare wantp devine
false si p3..5 devine false, deci invariantul se pastreaza.
true
false
time
• Logica temporala extinde logica clasica (propozitii, predicate) cu
operatori temporali, care permit rationamentul cu valori de adevar care se
schimba in timp, de-alungul unei cai de calcul.
2017 - 2018
Semantica logicii temporale liniare – LTL
• Se numeste cale de calcul (engl. computation path) sau
scenariu o secventa de stari = [s0, s1, s2, …].
• In logica temporala liniara (engl. linear temporal logic –
LTL), semantica formulelor se defineste “interpretand” cai de
calcul, spre deosebire de logica propozitiilor, in care semantica
se defineste “interpretand” stari individuale.
• Fie CP multimea tuturor cailor de calcul intr-un program
concurent P si fie ⊨ : CP P, unde P este multimea formulelor.
• Pentru o cale de calcul = [s0, s1, s2, …], pentru j 0 se
noteaza cu j subcalea incepand de la starea j, adica:
j = [sj, sj+1, sj+2, …]
• Daca p este formula netemporala atunci ⊨ p dnd s0 ⊨ p.
2017 - 2018
Operatorul intotdeauna
• Operatorul temporal intotdeauna (engl.always, numit si
necesar sau global) este desemnat prin ⃞ sau G (global).
⊨ ⃞p dnd pentru orice j 0 avem j ⊨ p
2017 - 2018
Progres pentru instructiuni de control
• Exemplu: in algoritmul Dekker, nu putem concluziona
urmatoarea proprietate de progres, desi pare intuitiva:
⃞((p4 (turn = 2)) ⃟p5)
2017 - 2018
Progres in algoritmul lui Dekker
• Proprietatea de progres se exprima prin:
“Daca p intra in sectiunea de preprotocol atunci p eventual va
intra in sectiunea critica”
⃞(p2⃟p8)
2017 - 2018
Lema
• Se considera ca suntem in cazul (ii).
• Daca p insista sa intre in sectiunea critica atunci eventual q ii
va ceda locul, adica:
(⃞wantp ⃞turn=1) ⃟⃞wantq
• Demonstratie:
Din ipoteza de progres a lui q rezulta ca q ajunge in q2.
Din progresul atribuirii, q ajunge din q2 in q3
Din ipoteza ⃞wantp si progres in bucla while, q va ajunge la q4
Din ipoteza ⃞turn=1 si progres la if, q va ajunge la q5
Din progresul atribuirii, q ajunge din q5 in q6
Deoarece ⃞turn=1, q va ramane la q6
Din Invq rezulta ca eventual wantq si va ramane asa, adica ⃟⃞wantq
2017 - 2018
Demonstratie progres
• Presupunem prin absurd ca (⃞(p2⃟p8)) adica ⃟(p2 ⃟p8).
Inseamna ca exista o cale de calcul si o stare in care sa avem p2 ⃟p8.
• Sa presupunem ca ⃞turn=2. Acest lucru inseamna ca:
Procesul p progreseaza la instructiunea de atribuire de la p2 la p3
Prin progres la p3, avand in vedere ca ⃟p8, rezulta ca p intra in bucla while la p4.
Conform ipotezei ⃞turn=2, p progreseaza la instructiunea if in p5
Procesul p progreseaza la instructiunea de atribuire de la p5 la p6
Conform ipotezei ⃞turn=2, p ramane la p6
Dar din invariantul Invp rezulta ca eventual wantp si va ramane asa, adica
⃟⃞wantp.
Din ipoteza de progres a lui q rezulta ca q va progresa (ca in cazul lemei) dincolo de q6,
va iesi din bucla si va ajunge in q9
Apoi q va progresa la q10 si vom avea eventual turn=1 adica ⃟turn=1, contradictie !
In concluzie rezulta ca ⃞turn=2, adica ⃟turn=1.
2017 - 2018
Continuare demonstratie progres
2017 - 2018
Modelare si verificare
Structura Proprietati
Model Proprietati
Diagrama de stare Logica temporala
Verificare
Lume formala abstracta
(matematica)
Modelare Formalizare
Lume fizica reala
(programare)
Program Cerinte de
concurent comportament
Testare
2017 - 2018
Limbajul Promela
• Un program Promela este compus din:
– declaratii de variabile globale si
– o multime de procese
• Un proces contine:
– declaratii de variabile locale si
– o secventa instructiuni.
2017 - 2018
Instructiuni Promela
• Atribuire. Intotdeauna executabila.
wantp = true;
critical++;
assert(critical <= 1);
critical--;
2017 - 2018
Verificarea lipsei infometarii in SPIN
• Pentru problema SC putem folosi 2 variabile booleene
auxiliare, cate una pe proces, initializate cu false.
bool csp = false;
bool csq = false;
• Cand un proces intra in SC, variabila sa booleana devine true,
apoi iar false. Procesul p contine in sectiunea sa critica codul:
csp = true;
csp = false;
• Lipsa infometarii procesului p se descrie cu formula LTL:
[]<>csp
• Ea se poate adauga la program pentru verificare cu sintaxa:
ltl { []<>csp }
• Tema: Sa se verifice excluderea mutuala printr-o formula LTL.
2017 - 2018
Algoritmul bakery (propus de Leslie Lamport)
Algoritmul bakery pentru doua procese
integer np 0, nq 0
p q
loop forever loop forever
p1: sectiune non-critica q1: sectiune non-critica
p2: np nq + 1 q2: nq np + 1
p3: await nq = 0 or np nq q3: await np = 0 or nq < np
p4: sectiune critica q4: sectiune critica
p5: np 0 q5: nq 0
2017 - 2018
Invarianti ai algoritmului bakery
• Lema. Urmatoarele formule sunt invarianti
a. np = 0 p1 p2 (Inva)
b. nq = 0 q1 q2 (Invb)
c. p4 (nq = 0) (np nq) (Invc)
d. q4 (np = 0) (nq < np) (Invd)
• Demonstratie
a si b rezulta trivial din structura. Demonstram c, d rezulta prin simetrie.
Initial Invc este adevarat. Presupunem Invc adevarat la pasul curent.
i. Invc este adevarat deoarece p4 este fals. Daca prin absurd Invc ar deveni fals prin
devenirea lui p4 adevarat, inseamna ca p executa p3. Insa astfel ar trebui sa avem
conditia (nq = 0) (np nq) adevarata, contradicitie !
ii. Invc este adevarat deoarece p4 si (nq = 0) (np nq) sunt adevarate. Daca in
pasul urmator Invc ar deveni fals, ar trebui ca (nq = 0) (np nq) sa devina fals. p
ramane la p4, doar q poate schimba variabilele la q2 sau q5. Dupa q2 conditia np
nq ramane adevarata. Dupa q5 conditia nq = 0 ramane adevarata. Contradictie !
2017 - 2018
Excluderea mutuala in algoritmul bakery
• Combinand Invc si Invd rezulta ca:
p4 q4 ((nq = 0) (np nq)) ((np = 0) (nq < np))
• Dar, daca p4 q4 atunci din Inva si Invb rezulta ca nq 0 si np
0. Rezulta ca va ramane doar implicatia:
p4 q4 (np nq) (nq < np)
• Insa (np nq) (nq < np) este falsa, de unde rezulta ca:
(p4 q4)
• Acest invariant exprima proprietatea de excludere mutuala.
2017 - 2018
Lipsa infometarii in algoritmul bakery
• Faptul ca p nu este infometat se exprima prin ⃞(p2 ⃟p4).
• Presupunem prin absurd ca exista o stare in care p2 ⃟p4
este fals, adica p2 si ⃟p4 sunt adevarate.
• Prin progres al lui p la atribuirea p2, p3 devine adevarata. Dar
corelat cu ⃟p4 inseamna ca p3 va ramane adevarata, adica
⃟⃞p3. Dar, conform Inva, vom avea ⃟⃞(np=k) pentru un
k>0. Deoarece p ramane in p3, instructiunea p3 nu va progresa,
desi procesul p va executa instructiunea (conform echitatii),
gasind conditia falsa. Rezulta ca: ⃞⃟((nq = 0) (np nq)).
• Rezulta ca ⃞⃟(nq 0) ⃞⃟(nq < np). Din ⃞⃟(nq 0)
rezulta ca q paraseste SC de o infinitate de ori deci prin progres
va executa q2 de o infinitate de ori. Insa din ⃟⃞(np=k) va
rezulta ca ⃟⃞(nq=k+1) cu k>0, ce contrazice ⃞⃟(nq < np) !
2017 - 2018
Algoritmul bakery pentru N procese
Algoritmul bakery pentru N procese
integer array[1..N] number [0,. …, 0]
pi
loop forever
p1: sectiune non-critica
p2: number[i] 1 + max(number)
p3: for all other processes j
p4: await (number[j] = 0) or (number[i] ≪ number[j])
p5: sectiune critica
p6: number[i] 0
Sursa: M.Ben-Ari, 2006
2017 - 2018
Algoritmul bakery fara atribuire atomica
Algoritmul bakery pentru N procese
integer array[1..N] number [0,. …, 0]
boolean array[1..N] choosing [false, ..., false]
pi
loop forever
p1: sectiune non-critica
p2: choosing[i] true
p3: number[i] 1 + max(number)
p4: choosing[i] false
p5: for all other processes j
p6: await choosing[i] = false
p7: await (number[j] = 0) or (number[i] ≪ number[j])
p8: sectiune critica
p9: number[i] 0 Sursa: M.Ben-Ari, 2006
2017 - 2018
Tema
2017 - 2018