Documente Academic
Documente Profesional
Documente Cultură
Cap7 PDF
Cap7 PDF
Cap7 PDF
Capitolul 7
2017-2018
Recapitulare principii
• Principiul I. Invocarile de metode trebuie sa para ca fiind
executate una-cate-una intr-o ordine secventiala. Obs. Ordinea
nu conteaza, important este ca executia sa para secventiala.
2017-2018
Exemplul 1
time
2017-2018
Exemplul 1
q.enq(x)
time
2017-2018
Exemplul 1
q.enq(x)
q.enq(y)
time
2017-2018
Exemplul 1
q.enq(x)
q.enq(y) q.deq(x)
time
2017-2018
Exemplul 1
q.enq(x) q.deq(y)
q.enq(y) q.deq(x)
time
2017-2018
Exemplul 1
q.enq(x)
q.deq(y)
q.enq(y) q.deq(x)
time
2017-2018
Exemplul 2
time
2017-2018
Exemplul 2
q.enq(x)
time
2017-2018
Exemplul 2
q.enq(x) q.deq(y)
time
2017-2018
Exemplul 2
q.enq(x) q.deq(y)
q.enq(y)
time
2017-2018
Exemplul 2
q.enq(x) q.deq(y)
q.enq(y)
time
2017-2018
Exemplul 3
time
2017-2018
Exemplul 3
q.enq(x)
time
2017-2018
Exemplul 3
q.enq(x)
q.deq(x)
time
2017-2018
Exemplul 3
q.enq(x)
q.deq(x)
time
2017-2018
Exemplul 3
q.enq(x)
q.deq(x)
time
2017-2018
Exemplul 4
q.enq(x)
time
2017-2018
Exemplul 4
q.enq(x)
q.enq(y)
time
2017-2018
Exemplul 4
q.enq(x) q.deq(y)
q.enq(y)
time
2017-2018
Exemplul 4
q.enq(x) q.deq(y)
q.enq(y) q.deq(x)
time
2017-2018
Exemplul 4
q.enq(x) q.deq(y)
q.enq(y) q.deq(x)
time
2017-2018
Registru R/W 1
write(1) read(0)
time
2017-2018
Registru R/W 1
write(1) read(0)
write(1) a avut
loc deja
2017-2018
Registru R/W 1
write(1) read(0)
write(1) a avut
loc deja
2017-2018
Registru R/W 2
write(1) read(1)
write(1) a avut
loc deja
2017-2018
Registru R/W 2
write(1) read(1)
write(1) a avut
loc deja
2017-2018
Registru R/W 3
write(0) write(2)
write(1) read(1)
time
2017-2018
Registru R/W 3
write(0) write(2)
write(1) read(1)
time
2017-2018
Punctul de liniarizare depinde de executie
2017-2018
Eveniment de invocare de metoda
2017-2018
Exemplu
A q.enq(x)
fir metoda
obiect argumente
2017-2018
Eveniment raspuns
A q: void
fir rezultat
obiect
2017-2018
Exemplu
A q: empty()
fir exceptie
obiect
2017-2018
Istoria executiei
• Executia unui sistem concurent defineste o istorie =
secventa finita de evenimente de invocare si
evenimente raspuns.
• O subistorie a unei istorii ℋ = subsecventa a lui ℋ.
A q.enq(3)
A q:void
A q.enq(5) Secventa de
H = B p.enq(4) invocari si
B p:void raspunssuri
B q.deq()
B q:3
2017-2018
Identificarea dintre invocare si raspuns
• Un raspuns si o invocare se identifica (engl. match) dnd ele
contin acelasi obiect 𝑥 si acelasi fir 𝐴.
• Se numeste apel de metoda (engl. method call) in istoria ℋ o
pereche formata dintr-o invocare si urmatorul raspuns cu care
ea se identifica.
A q.enq(3)
Method call
A q:void
2017-2018
Subistorie a unui obiect
• Se numeste subistorie a unui obiect 𝑥 o subsecventa notata cu
ℋ│𝑥 a lui ℋ care contine toate evenimentele lui ℋ
corespunzatoare obiectului 𝑥.
A q.enq(3) A q.enq(3)
A q:void A q:void
H= B
B
p.enq(4)
p:void
H|q = B
B
p.enq(4)
p:void
B q.deq() B q.deq()
B q:3 B q:3
2017-2018
Subistorie a unui fir
• Se numeste subistorie a unui fir 𝐴 o subsecventa notata cu
ℋ│𝐴 a lui ℋ care contine toate evenimentele lui ℋ
corespunzatoare firului 𝐴.
A q.enq(3) A q.enq(3)
A q:void A q:void
H= B
B
p.enq(4)
p:void
H|B = B
B
p.enq(4)
p:void
B q.deq() B q.deq()
B q:3 B q:3
2017-2018
Subistorie completa
2017-2018
Subistorie completa – exemplu
A q.enq(3)
A q:void
A q.enq(5)
H = B p.enq(4)
B p:void
B q.deq() Invocare in
B q:3 asteptare
2017-2018
Subistorie completa – exemplu
A q.enq(3)
A q:void
A q.enq(5)
H = B p.enq(4)
B p:void
B q.deq() Efectul sau ar fi putut
B q:3 sau nu sa aiba loc
2017-2018
Subistorie completa – exemplu
A q.enq(3)
A q:void
A q.enq(5)
H = B p.enq(4)
B p:void
B q.deq() Elimina invocarile in
B q:3 asteptare
2017-2018
Subistorie completa – exemplu
A q.enq(3)
A q:void
Complete(H) = B p.enq(4)
B p:void
B q.deq()
B q:3
2017-2018
Subistorie secventiala
• O istorie ℋ se numeste secventiala dnd primul eveniment al lui
ℋ este o invocare si fiecare invocare (posibil exceptand-o pe
ultima) este urmata de un raspuns cu care se identifica.
A q.enq(3)
A q:void
B p.enq(4)
B p:void
B q.deq()
B q:3
A q:enq(5)
2017-2018
Subistorie secventiala
A q.enq(3) identificare
A q:void
B p.enq(4) identificare
B p:void
identificare
B q.deq()
B q:3 Invocare finala in
A q:enq(5) asteptare OK
2017-2018
Subistorie secventiala
A q.enq(3) identificare
A q:void
B p.enq(4) identificare
B p:void
identificare
B q.deq()
B q:3 Invocare finala in
A q:enq(5) asteptare OK
2017-2018
Istorie bine formata
• O istorie ℋ este bine-formata dnd subistoriile firelor sunt
secventiale (acest lucru nu este necesar pentru subistoriile
obiectelor).
A q.enq(3)
B p.enq(4)
B p:void
H= B q.deq()
A q:void
B q:3
2017-2018
Istorie bine formata
B p.enq(4)
H|B= B p:void
A q.enq(3) B q.deq()
B p.enq(4) B q:3
B p:void
H= B q.deq()
A q:void
A q.enq(3)
B q:3 H|A=
A q:void
2017-2018
Istorii echivalente
• Doua istorii ℋ si ℋ ′ sunt echivalente dnd pentru orice fir 𝐴
avem ℋ│𝐴 = ℋ ′ │𝐴.
A q.enq(3) A q.enq(3)
B p.enq(4) A q:void
B p:void B p.enq(4)
H= B q.deq() G= B p:void
A q:void B q.deq()
B q:3 B q:3
2017-2018
Specificatie secventiala
• Pentru a determina daca un obiect este corect, va trebui sa
verificam ca orice istorie secventiala a obiectului este legala
(permisa) pentru obiectul respectiv (adica verifica preconditiile
si postconditiile obiectului).
2017-2018
Istorii legale
2017-2018
Precedenta metodelor
• Apelul de metoda 𝑚0 precede apelul de metoda 𝑚1 in istoria
ℋ dnd raspunsul lui 𝑚0 s-a terminat inaintea invocarii lui 𝑚1 .
Aceasta se noteaza cu 𝑚0 →ℋ 𝑚1 .
• Relatia →ℋ este:
– ordine partiala (tranzitiva si pentru orice 𝑚 avem ¬ (𝑚 →ℋ 𝑚).
– ordine totala daca ℋ este secventiala..
A q.enq(3)
B p.enq(4)
B p.void
A q:void Method call Method call
B q.deq()
B q:3
2017-2018
Ne-precedenta
A q.enq(3)
B p.enq(4)
B p.void Apeluri de metode
B q.deq() suprapuse
A q:void
B q:3
Method call
Method call
2017-2018
Definitia liniarizarii
• Ideea liniarizarii este ca orice istorie este echivalenta cu o
istorie secventiala cu respectarea regulilor:
– Daca un apel de metoda precede alt apel de metoda, atunci primul apel
trebuie sa produca efect asupra obiectului inaintea celuilalt apel.
– Daca doua apeluri se suprapun atunci ordinea lor este nedeterminata.
2017-2018
Ce inseamna →𝒢 ⊆ →𝒮 ?
→𝒢 = *𝑎 → 𝑐, 𝑏 → 𝑐+
→𝒮 = *𝑎 → 𝑏, 𝑎 → 𝑐, 𝑏 → 𝑐+
b G c
time S
2017-2018
Exemplu
A q.enq(3)
B q.enq(4)
B q:void
B q.deq()
B q:4
B q:enq(6)
A. q.enq(3)
time
2017-2018
Exemplu
A q.enq(3)
B q.enq(4) Completeaza
B q:void aceasta invocare
B q.deq() in asteptare
B q:4
B q:enq(6)
A. q.enq(3)
time
2017-2018
Exemplu
A q.enq(3)
B q.enq(4) Completeaza
B q:void aceasta invocare
B q.deq() in asteptare
B q:4
B q:enq(6)
A q:void
A.q.enq(3)
time
2017-2018
Exemplu
A q.enq(3)
B q.enq(4)
B q:void
Elimina aceasta
B q.deq()
invocare
B q:4
B q:enq(6)
A q:void
A.q.enq(3)
time
2017-2018
Exemplu
A q.enq(3)
B q.enq(4)
B q:void
Elimina aceasta
B q.deq()
invocare
B q:4
A q:void
A.q.enq(3)
time
2017-2018
Exemplu
A q.enq(3)
B q.enq(4)
B q:void
B q.deq()
B q:4
A q:void
A.q.enq(3)
B.q.enq(4) B.q.deq(4)
time
2017-2018
Exemplu
A.q.enq(3)
B.q.enq(4) B.q.deq(4)
time
2017-2018
Compozitionalitatea liniarizarii
• Teorema. O istorie ℋ este liniarizabila dnd pentru orice obiect
𝑥 subistoria ℋ│𝑥 este liniarizabila.
2017-2018
Liniarizarea – proprietate neblocanta
• Teorema. Fie 𝑖 𝑚 = 𝑃 𝑥. 𝑚(𝑎∗ ) o invocare a metodei totale 𝑚
intr-o istorie liniarizabila ℋ. Atunci exista un raspuns 𝑟 𝑚 a.i.
ℋ ⋅ 𝑟(𝑚) este liniarizabila.
• Demonstratie:
• Fie 𝒮 o liniarizare a lui ℋ. Daca ℋ contine un raspuns, 𝑟(𝑚) la
𝑖 𝑚 atunci 𝒮 contine 𝑟(𝑚) , rezultand ca 𝒮 este si o liniarizare
a lui ℋ ⋅ 𝑟(𝑚) cctd.
• Altfel, daca 𝑟(𝑚) nu apare in ℋ atunci 𝑟(𝑚) nu va aparea nici
in 𝒮 intrucat potrivit definitiei 𝒮 nu poate contine invocari in
asteptare. Deoarece metoda 𝑚 este totala rezulta ca exista un
raspuns 𝑟(𝑚) astfel incat istoria secventiala 𝒮 ′ = 𝒮 ⋅ 𝑖 𝑚 ⋅
𝑟(𝑚) este legala. Atunci 𝒮 ′ este o liniarizare a lui ℋ ⋅ 𝑟(𝑚)
cctd.
2017-2018
Concluzii asupra liniarizarii
• Liniarizarea este o proprietate neblocanta – nonblocking, adica
nu forteaza blocarea unui fir care contine o invocare in
asteptare a unei metode totale.
• A nu se confunda aceasta afirmatie cu posibilitatea aparitiei de
(inter-)blocaje in scopul implementarii liniarizabilitatii unui
anumit obiect.
• Blocarea poate sa apara in cazul unor specificatii secventiale
partiale: daca un fir trebuie sa invoce o metoda partiala pentru
un obiect intr-o stare in care metoda nu este definita, solutia
naturala este asteptarea (blocarea) pana cand obiectul ajunge
intr-o stare pentru care metoda este definita.
• Liniarizabilitatea este o proprietate de corectitudine
corespunzatoare pentru sisteme concurente in timp-real.
2017-2018
Liniarizabilitate vs consistenta secventiala
• O istorie ℋ este consistenta secvential dnd ea
poate fi transformata in istoria 𝒢 prin:
– Adaugarea a zero sau mai multe raspunsuri pentru
invocarile in asteptare
– Eliminarea celorlalte invocari in asteptare
astfel incat 𝒢 este echivalenta cu:
– Istoria secventiala legala 𝒮
– → 𝒢 ⊆ →𝒮
Diferenta fata de
liniarizabilitate
2017-2018
Consistenta secventiala
2017-2018
Exemplu
q.enq(x) q.deq(y)
q.enq(y)
time
2017-2018
Exemplu
q.enq(x) q.deq(y)
q.enq(y)
time
2017-2018
Exemplu
q.enq(x) q.deq(y)
q.enq(y)
time
2017-2018
Principiul fanionului
• DACA
– Alice scrie propria variabila si citeste variabila lui Bob
– Bob scrie propria variabila si citeste variabila lui Alice
• ATUNCI
– Cel putin unul dintre Alice si Bob va observa ca variabila
celuilalt a fost scrisa
x.write(1) y.read(0)
y.write(1) x.read(0)
time