Sunteți pe pagina 1din 78

Liniarizabilitate

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.

• Principiul II. Invocarile de metode separate de un interval


pasiv trebuie sa apara ca fiind executate conform ordinii lor
reale de executie. Obs. Trebuie respectata ordinea temporala
reala a executiei instructiunilor, in ceea ce priveste intervalele
de pasivitate.

• Principiul III. Invocarile de metode trebuie sa para ca fiind


executate conform ordinii programului lor. Obs. Trebuie
respectata ordinea de scriere a instructiunilor in program (in
cadrul fiecarui fir).
2017-2018
Principiul IV
• Principiul IV. Fiecare invocare de metoda trebuie sa
para ca are un efect instantaneu la un moment intre
invocare si raspuns numit punct de liniarizare.

• Conform acestui principiu, ordinea reala a invocarilor


trebuie pastrata. Practic, ordonarea se refera la punctele
de liniarizare.

• Se inocuieste principiul IV defineste o consstrangere


mai puternica asupra pordinii executiei instructiunilor
decat principiul III.
2017-2018
Liniarizabilitate
• Proprietate de corectitudine care cere respectarea principiilor I
si IV se numeste linearizabilitate (engl.linearizability).

• Orice executie linearizabila este secvential consistenta, insa


reciproca nu este adevarata !

• Liniarizabilitatea este o proprietate referitoare la executiile uni


obiect concurent.

• Obiect liniarizabil = obiect ale carui executii sunt toate


liniarizabile.

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(0) read(1) write(2)

write(1) read(0)

time

2017-2018
Registru R/W 1

write(0) read(1) write(2)

write(1) read(0)
write(1) a avut
loc deja

2017-2018
Registru R/W 1

write(0) read(1) write(2)

write(1) read(0)
write(1) a avut
loc deja

2017-2018
Registru R/W 2

write(0) read(1) write(2)

write(1) read(1)
write(1) a avut
loc deja

2017-2018
Registru R/W 2

write(0) read(1) write(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

• Punctul de liniarizare nu poate fi intodeauna specificat


fara a avea in vedere o anumita executie a unei metode.

• In anumite situatii punctul de liniarizare depinde


(difera) in functie de o anumita executie a metodei.

2017-2018
Eveniment de invocare de metoda

• Un eveniment de invocare (de metoda) se


noteaza prin:
𝐴 𝑥. 𝑚(𝑎∗ )
unde:
– 𝐴 este firul in care are loc invocarea
– 𝑥 este obiectul asupra caruia are loc invocarea
– 𝑚 este metoda invocata
– 𝑎∗ reprezinta argumentele invocarii

2017-2018
Exemplu

A q.enq(x)

fir metoda

obiect argumente
2017-2018
Eveniment raspuns

• Un eveniment raspuns se noteaza prin



𝐴 𝑥 ∶ 𝑟 sau 𝐴 𝑥 ∶ 𝑡()
unde:
– 𝐴 este firul in care are loc raspunsul
– 𝑥 este obiectul din care s-a generat raspunsul
– 𝑡 este un nume de exceptie
– 𝑟 ∗ reprezinta rezultatul raspunsului.

• Observatie: metoda care a generat raspunsul


rezulta implicit din context
2017-2018
Exemplu

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.

Acelasi fir Acelasi obiect

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

• 𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑒(ℋ) reprezinta subistoria lui ℋ formata din


invocarile si raspunsurile care se identifica.

• O invocare este in asteptare (engl. pending) dnd ea nu


este urmata de un raspuns cu care se identifica.

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 ℋ│𝐴 = ℋ ′ │𝐴.

Firele 𝐴 si 𝐵 observa acelasi H|A = G|A


lucru in istoriile 𝐻 si 𝐺 H|B = G|B

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).

• O specificatie secventiala a unui obiect este o metoda de a


descrie daca o historie secventiala a unui obiect (ce implica un
singur fir) este legala.

• Pentru aceasta se pot folosi diverse metode:


– Pre- si post-conditii
– Alte metode: automate, expresii regualte, etc.

2017-2018
Istorii legale

• O istorie secventiala (multi-obiect) ℋ este


legala dnd:
– pentru orice obiect 𝑥
– subistoria ℋ│𝑥 este legala conform
specificatiei secventiale a obiectului 𝑥.

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.

• O extensie a unei istorii ℋ se obtine adaugand raspunsuri la


eventualele (zero sau mai multe) invocari in astepare din ℋ.

• Definitie. O istorie ℋ se numeste liniarizabila dnd ea are o


extensie ℋ′ pentru care exista o istorie secventiala legala 𝒮 a.i.:
– 𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑒(ℋ′) este echivalenta cu 𝒮 (unele invocari au produs efect
fara raspuns)
– If 𝑚0 →ℋ 𝑚1 atunci 𝑚0 →𝒮 𝑚1
2017-2018
Intuitia liniarizarii

• O istorie ℋ este liniarizabila 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 𝒮
– → 𝒢 ⊆ →𝒮

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)

B.q.enq(4) B.q.deq(4) B. q.enq(6)

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)

B.q.enq(4) B.q.deq(4) B. q.enq(6)

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)

B.q.enq(4) B.q.deq(4) B. q.enq(6)

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)

B.q.enq(4) B.q.deq(4) B. q.enq(6)

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)

B.q.enq(4) B.q.deq(4) B. q.enq(6)

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

Istorie secventiala echivalenta


A q.enq(3) B q.enq(4)
B q.enq(4) B q:void
B q:void A q.enq(3)
B q.deq() A q:void
B q:4 B q.deq()
A q:void B q:4

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.

• Acest rezultat ne permite sa construim sisteme concurente


complexe in maniera modulara din obiecte liniarizabile. Aceste
obiecte pot fi construite si verificate separat, asigurand prin
compunerea lor un sistem concurent corect.

• Daca sistemul concurent s-ar baza pe o proprietate de


corectitudine necompozitionala, atunci trebuie satisfacute niste
constrangeri suplimentare asupra obiectelor componente pentru
a ne asigura ca sistemul este corect.

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

• Nu se pastreaza ordinea de timp real:


– Nu se reorderdoneaza operatiile realizate de acelasi fir
– Se pot reodona operatiile nesuprapuse realizate de fire
diferite

• Este folosita adesea pentru a descrie arhitecturile


memoriei sistemelor multiprocessor

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

• Acest principiu reprezinta sablonul de baza pentru


majoritatea algoritmilor de excludere mutuala
– Bakery
– Peterson
– Etc.
2017-2018
Principiul fanionului

x.write(1) y.read(0)

y.write(1) x.read(0)

time

• Vederea (proiectia) fiecarui fir a istoriei este secvential


consistenta.
• Intreaga istorie nu este secvential consistenta.
2017-2018
Discutie
• Majoritatea arhitectilor hardware considera ca
implementarea consistentei secventiale este prea
costisitoare pentru hardware-ul modern. Astfel ca:
– Se incalca implicit principiul fanionului
– Exceptand situatiile cand se cere explicit respectarea sa
• Explicatie:
– In sistemele multiprocesor moderne procesoarele nu citesc si
scriu direct din memorie
– Accesele la memroe sunt mult mai lente comparativ cu
viteza procesorului
– Astfel ca citirile si scrierile din/in memorie au loc prin
intemediul cache-ului.
2017-2018

S-ar putea să vă placă și