distribuirani algoritmi poglavlje 7: modeli i satovi takvi mehanizmi zovu se logički satovi. razne...

63
P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 1 DISTRIBUIRANI ALGORITMI Poglavlje 7: Modeli i satovi prof. dr. sc. Robert Manger, doc. dr. sc. Goranka Nogo PMF-Matematički odjel, Zagreb, poslijediplomski studij, 2007/08. Manje promjene: L. Grubišić, diplomski studij 2009/10

Upload: others

Post on 01-Feb-2020

8 views

Category:

Documents


1 download

TRANSCRIPT

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 1

DISTRIBUIRANI ALGORITMIPoglavlje 7: Modeli i satovi

prof. dr. sc. Robert Manger, doc. dr. sc. Goranka NogoPMF-Matematički odjel, Zagreb, poslijediplomski studij, 2007/08.Manje promjene: L. Grubišić, diplomski studij 2009/10

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 2

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 3

Vrste modela i satova� Distribuirani softver zahtijeva drukčije alate i tehnike od

onih koje se koriste za tradicionalni sekvencijalni softver.� U ovom poglavlju proučit ćemo dvije vrste takvih alata i

tehnika. To su:� Modeli distribuiranog računanja,� Logički satovi.

� Radit ćemo dva modela distribuiranog računanja:� Prepletajući model (interleaving)� Model desilo-se-prije (happened-before)

� Proučit ćemo četiri vrste logičkih satova:� Jednostavni (Lamportov) sat� Vektorski sat� Sat neprekidne ovisnosti� Matrični sat

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 4

Čemu služi model računanja� Model distribuiranog računanja služi za opisivanje i

istraživanje načina na koji se neki distribuirani program može izvršavati.

� Izvršavanje programa opisuje se kao skup dogañaja ili stanja.

� Dogañaji su na primjer izvrednjavanje funkcije, slanje ili primanje poruke.

� Dogañaj prevodi proces iz jednog stanja u drugo.

� Uvodi se “ureñaj” meñu dogañajima ili stanjima, koji intuitivno odgovara vremenima njihovog izvršavanja odnosno uspostavljanja.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 5

Razlika izmeñu modela računanja

� Prepletajući model zasnovan je na pretpostavci da postoji globalni (dijeljeni) fizički sat, da su svi dogañaji trenutačni, te da se ni jedna dva dogañaja ne dešavaju istovremeno. Dogañaji su ureñeni na osnovu stvarnih trenutaka njihovog izvršavanja. Ureñaj je potpun.

� Model desilo-se-prije polazi od realističnije pretpostavke da nema globalnog fizičkog sata. U takvoj situaciji mi jošuvijek možemo potpuno urediti dogañaje unutar istog procesa, no samo parcijalno dogañaje iz različitih procesa. Ureñaj za dogañaje iz različitih procesa temelji se na toku podataka iz jednog procesa u drugi.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 6

Čemu služe satovi� Satovi su mehanizmi koji omogućuju praćenje

redoslijeda dogañaja. Idealno bi bilo kad bi mogli zabilježiti redoslijed koji se stvarno desio u skladu s prepletajućim modelom. No za tako nešto bi morali imati globalni fizički sat.

� Budući da se totalni ureñaj u skladu sa stvarnim vremenom ne može zabilježiti, zadovoljavamo se mehanizmom koji generira totalni ureñaj koji se mogao desiti. Takvi mehanizmi zovu se logički satovi.

� Razne vrste logičkih satova razlikuju se po svojoj složenosti i preciznosti bilježenja redoslijeda dogañaja. Svi oni su u bliskoj vezi s parcijalnim ureñajem kojeg nam daje model desilo-se-prije.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 7

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 8

Svojstva distribuiranog sustava� Nepostojanje globalnog (dijeljenog) sata. Nemoguće je

sinkronizirati satove različitih procesora zbog nepredvidivih kašnjenja u komunikaciji.

� Nepostojanje dijeljene memorije. Ni jedan proces ne može znati globalno stanje sustava. Teško je utvrditi bilo koje globalno svojstvo sustava.

� Nepostojanje pouzdanog mehanizma za otkrivanje

kvarova. Imamo posla s asinkronim distribuiranim sustavom, gdje ne postoji gornja granica za vrijeme kašnjenja poruke. Nije moguće razlikovati spori procesor od pokvarenog procesora.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 9

Naš model sustava (1)� Distribuirani sustav modeliramo kao asinkroni sustav u

kojem procesi meñusobno šalju poruke, te u kojem nema ni dijeljene memorije ni globalnog sata.

� Distribuirani program sastoji se od skupa od N procesa, označenog s {P1, P2, … PN}, i skupa jednosmjernih komunikacijskih kanala.

� Konfiguracija (topologija) distribuiranog programa može se prikazati usmjerenim grafom – vrhovi predstavljaju procese a lukovi kanale - slika 7.1.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 10

Naš model sustava (2)� Pretpostavljamo da kanal ima neograničeni buffer

i da prenaša poruke bez greške. Ništa ne pretpostavljamo o redoslijedu poruka. Bilo koja poruka isporučuje se s proizvoljno velikim ali konačnim kašnjenjem. Stanje kanala u bilo kojem trenutku definira se kao skup poruka koje su poslane po tom kanalu ali nisu primljene.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 11

Naš model sustava (3)� Proces se opisuje skupom stanja, polaznim

stanjem i skupom dogañaja. Pojedini dogañaj može promijeniti stanje jednog procesa i stanje najviše jednog kanala incidentnog tom procesu. Ponašanje procesa ovisno o dogañajima može se opisati dijagramom promjene stanja (konačnim automatom) – vidi sliku 7.2.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 12

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 13

Prepletajući model� Distribuirano izvršavanje ili hod (run) je globalni niz

dogañaja. Dogañaji unutar hoda su vremenski isprepleteni.� Na primjer, promatramo sustav od dva procesa: bankovni

klijent P1 i bankovni poslužitelj P2. Klijent traži od poslužitelja da mu dojavi stanje na dva računa. Nakon što dobije odgovore, klijent zbraja ta stanja da bi dobio ukupno stanje. U prepletajućem modelu, hod može izgledati ovako:� P1 šalje poruku “koje je moje stanje na tekućem računu”.� P1 šalje poruku “koje je moje stanje na štednom računu”.� P2 prima poruku “koje je moje stanje na tekućem računu”.� P1 postavlja zbroj na 0.� P2 prima poruku “koje je moje stanje na štednom računu”.� P2 šalje poruku “stanje na tekućem računu je 40”.� P1 prima poruku “stanje na tekućem računu je 40”.� P1 povećava zbroj na 40.� P2 šalje poruku “stanje na štednom računu je 70”.� P1 prima poruku “stanje na štednom računu je 70”.� P1 povećava zbroj na 110.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 14

Model desilo-se-prije (1)� Opet promatramo jedno izvršavanje

distribuiranog programa. Svaki proces Pi generira niz dogañaja.

� Za dogañaje e i f unutar istog procesa jasno je koji je njihov meñusobni redoslijed.

� Za dogañaje e i f iz različitih procesa jedino što sigurno možemo reći je sljedeće: ako e šalje poruku a f prima tu istu poruku, tada se e desio prije f.

� Kombinacijom ovih ideja dolazimo do sljedeće definicije.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 15

Model desilo-se-prije (2)� Definicija 7.1 (Relacija desilo-se-prije).

Relacija desilo-se-prije, u oznaci → , je najmanja relacija sa svojstvima:

1. Ako se e desio prije f unutar istog procesa, tada e→f.

2. Ako je e dogañaj slanja poruke a f dogañaj primanja te iste poruke, tada e→f.

3. Ako postoji dogañaj g takav da e→g i g→f, tada e→f.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 16

Model desilo-se-prije (3)� Hod (run) ili računanje u modelu desilo-se-prije zadaje

se parom (E,→), gdje je E skup svih dogañaja, a → je odgovarajuća relacija desilo-se-prije.

� Hod se ilustrira tzv proces-vrijeme dijagramom – Slika 7.3. U takvom dijagramu vrijedi: e→f ako i samo ako postoji usmjereni put od e do f.

� Intuitivno, → bilježi redoslijed izmeñu dogañaja koji se može utvrditi.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 17

Model desilo-se-prije (3)� Relacija → daje samo parcijalni ureñaj meñu

dogañajima. � Kažemo da su e i f konkurentni, oznakom eơ f, ako ne

vrijedi ni e→f ni f→e.� Intuitivno, konkurentni dogañaji su oni čiji meñusobni

redoslijed se ne može utvrditi.� Umjesto preko skupa dogañaja E, distribuirano

računanje može se opisati preko skupa stanja svih procesa S.

� Moguće je definirati relaciju desilo-se-prije na S na sličan način kao što smo je definirali na E.

� Na proces-vrijeme dijagramu, stanja su ilustrirana vodoravnim spojnicama izmeñu susjednih dogañaja unutar istog procesa.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 18

Model desilo-se-prije (4)� Pojam je uveo Leslie Lamport 1977—1978.

� Njegova neformalna definicija relacije desilo se prije je� “Another way of viewing the definition is to say

that a � b means that it is possible for event a

to causally affect event b. Two events are concurrent if neither can causally affect the other.”

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 19

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 20

Svrha i definicija logičkog sata (1)� Svrha logičkog sata je da odredi redoslijed

dogañaja. � Svakom dogañaju logički sat pridružuje

nekakav broj koji samo donekle odgovara fizičkom vremenu.

� Pridruživanje broja zasniva se na činjenici da u distribuiranom sustavu postoje samo dvije informacije o redoslijedu:� Redoslijed dogañaja unutar istog procesa,

� Redoslijed dogañaja slanja i primanja iste poruke.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 21

Svrha i definicija logičkog sata (2)� Definicija 7.2 (Logički sat) Logički sat C je

preslikavanje iz skupa dogañaja E u skup cijelih brojeva N koje zadovoljava sljedeći uvjet: � za svaki e,f iz E: ako e → f onda C(e) < C(f).

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 22

Svrha i definicija logičkog sata (3)� Koji put je zgodnije udarati vremenske žigove

stanjima procesa, a ne dogañajima. Logički sat stoga takoñer zadovljava uvjet:

za svaki s,t iz S: ako s → t onda C(s) < C(t).

� Slika 7.4 prikazuje jednu implementaciju logičkog sata.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 23

Implementacija logičkog sata - slika 7.4public class LamportClock {

int c; public LamportClock() {

c = 1;} public int getValue() {

return c;}public void tick() { // on internal events

c = c + 1;} public void sendAction() {

// include c in messagec = c + 1;

}public void receiveAction(int src, int sentValue) {

c = Util.max(c, sentValue) + 1;}

}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 24

Objašnjenje slike 7.4� U implementaciji sa slike 7.4 ne traži se da poruke stižu

u ispravnom redoslijedu.

� Varijabla c predstavlja vrijednost logičkog sata.

� Algoritam je opisan polaznim uvjetima i akcijama koje se poduzimaju za svaku vrstu dogañaja.� U slučaju slanja poruke, proces vrijednost svog sata šalje

zajedno s porukom i zatim inkrementira tu vrijednost.

� U slučaju primanja poruke, proces uzima maksimum od vlastite vrijednosti sata i vrijednosti primljene s porukom. Izračunati maksimum se inkrementira i postaje nova vrijednost sata tog procesa.

� U slučaju internog dogañaja, proces samo inkrementira svoju vrijednost sata.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 25

Odnos logičkog sata i ureñaja (1)� Uzmimo da s.c predstavlja vrijednost logičkog

sata u stanju s. Takoñer, neka s.p označava proces kojem stanje s pripada.

1. Lako provjeriti da vrijedi:

� za svaki s,t iz S: ako s → t onda s.c < t.c.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 26

Odnos logičkog sata i ureñaja (2)� U nekim aplikacijama traži se da svi dogañaji ili

stanja u sustavu moraju biti potpuno ureñeni. To se lagano može postići tako da vrijednosti logičkog sata proširimo identifikatorima procesa i zatim ih usporeñujemo u leksikografskom smislu.

1. Dakle, ako “žigošemo” svako stanje parom (s.c, s.p), potpuni ureñaj < za stanja dobiva se ovako:

(s.c, s.p) < (t.c, t.p) ako: (s.c < t.c) ili ((s.c = t.c) i (s.p < t.p)) .

� Slično se dobiva potpuni ureñaj < za dogañaje.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 27

Odnos logičkog sata i ureñaja (3)� Lamportovo objašnjenje principa pomoću kojega

se uvodi totalni ureñaj je:� “We can use a system of clocks satisfying the

Clock Condition to place a total ordering on the set of all system events. We simply order the events by the times at which they occur. To break ties, we use any arbitrary total ordering < of the processes.”

� “Given any total ordering relation < which extends� there is a system of clocks satisfying theClock Condition which yields that relation. It is only the partial ordering � which is uniquelydetermined by the system of events.”

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 28

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 29

Svrha i definicija vektorskog sata (1)� Vidjeli smo da logički sat ima sljedeće svojstvo:

za svaki s,t iz S: ako s → t onda s.c < t.c. No obrat nije istinit: s.c < t.c ne garantira da je s → t .

� Razlog zašto ne vrijedi obrat je to što logički sat stanjima pridružuje brojeve, a brojevi se uvijek mogu usporediti. Na taj način dva neusporediva stanja izgledat će usporediva.

� Dakle, logički sat ne daje sasvim točnu informaciju o →.

� U nastavku opisujemo mehanizam koji dozvoljava da u potpunosti reproduciramo relaciju →

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 30

Svrha i definicija vektorskog sata (2)� Definicija 7.3 (vektorski sat). Vektorski

sat v je 1. preslikavanje iz S u Nk (skup vektora

prirodnih brojeva duljine k) 2. koje zadovoljava sljedeći uvjet: za

svaki s,t iz S: s → t ako-i-samo-ako s.v < t.v.

Ovdje je s.v vektor pridružen stanju s.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 31

Usporeñivanje vektora� Definicija 7.2a Dva vektora x i y duljine N

usporeñuju se ovako:x < y ako ( za svaki k: 1 ≤ k ≤ N : x[k] ≤ y[k]) i

( postoji j: 1 ≤ j ≤ N : x[ j ] < y[ j ])x ≤ y ako (x < y) ili (x = y) .

Ovaj ureñaj zaista postaje parcijalan za N veće od 1. Na primjer (2,3,0) i (0,4,1) su neusporedivi.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 32

Usporeñivanje vektora� Ideja vektorskog sata je sljedeća. Budući da je

→ parcijalni ureñaj, mehanizam vremenskog žigosanja takoñer mora rezultirati parcijalnim ureñajem.

� Dakle područje vrijednosti sata ne smiju biti prirodni brojevi (koji su uvijek usporedivi) nego vektori prirodnih brojeva (koji mogu biti neusporedivi).

� U našoj implementaciji vektorskih satova duljina vektora N je ustvari broj procesa. Detalji se vide na slici 7.5.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 33

Implementacija vektorskog sata –slika 7.5 (1)public class VectorClock {

public int[] v;

int myId;

int N;

public VectorClock(int numProc, int id) {

myId = id;

N = numProc;

v = new int[numProc];

for (int i = 0; i < N; i++) v[i] = 0;

v[myId] = 1;

}

public void tick() {

v[myId]++;

}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 34

Implementacija vektorskog sata –slika 7.5 (2)public void sendAction() {

//include the vector in the messagev[myId]++;

}public void receiveAction(int[] sentValue) {

for (int i = 0; i < N; i++)v[i] = Util.max(v[i], sentValue[i]);

v[myId]++;}public int getValue(int i) {

return v[i];}public String toString() {

return Util.writeArray(v);}

}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 35

Objašnjenje slike 7.5� U implementaciji sa slike 7.5 opet se ne traži se da

poruke stižu u ispravnom redoslijedu.� Polje v predstavlja vrijednost vektorskog sata.� Algoritam vektorskog sata opisan polaznim uvjetima i

akcijama koje se poduzimaju za svaku vrstu dogañaja.� Nakon svakog dogañaja proces inkrementira “svoju” komponentu

vektorskog sata.� Kod svakog slanja poruke, proces šalje kopiju svog vektorskog

sata zajedno s porukom.� Kod primanja poruke, proces ažurira svoj vektorski sat uzimajući

maksimume po komponentama s vektorskim satom koji je stigao s porukom.

� Klasa VCLinker na slici 7.6 proširuje klasu Linker iz Poglavlja 6 (vidi web stranicu kursa) za potrebe algoritama koji trebaju vektorski sat. Slika 7.7 sadrži primjer rada vektorskog sata.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 36

Proširena klasa za povezivanje –slika 7.6 (1)

public class VCLinker extends Linker {

public VectorClock vc;

int receiveTag[] = null;

public VCLinker(String basename, int id, int N) throws Exception {

super(basename, id, N);

vc = new VectorClock(N, id);

receiveTag = new int[N];

}

public void sendMsg(int destId, String tag, String msg) {

super.sendMsg(destId, "vector", vc.toString());

super.sendMsg(destId, tag, msg);

vc.sendAction();

}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 37

Proširena klasa za povezivanje –slika 7.6 (2)

public void simpleSendMsg(int destId, String tag, String msg) {

super.sendMsg(destId, tag, msg);

}

public Msg receiveMsg(int fromId) throws java.io.IOException {

Msg m1 = super.receiveMsg(fromId);

if (m1.getTag().equals("vector")) {

Util.readArray(m1.getMessage(), receiveTag);

vc.receiveAction(receiveTag);

Msg m = super.receiveMsg(fromId); //app message

return m;

}

else return m1;

}

}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 38

Objašnjenje slike 7.6� Kod slanja poruke po potrebi se uključuje vektorski sat.

� Metoda sendMSG stavlja pred aplikacijsku poruku kao prefiks riječ “vektor” i zatim vektorski sat.

� Metoda simpleSendMsg se koristi za aplikacijske poruke koje ne trebaju vektorske satove.

� Kod svakog primanja poruke po potrebi se obrañuje vektorski sat.

� Metoda receiveMsg odreñuje da li aplikacijska poruka ima ispred sebe vektorski sat. Ako ima tada receiveMsg uklanja vektorski sat, poziva receiveActioni vraća aplikacijsku poruku.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 39

Primjer rada vektorskog sata

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 40

Analiza svojstava vektorskog sata (1)� U nastavku ćemo pokazati da vektorski sat

zaista u potpunosti opisuje relaciju → .� Teorem 7.1: Vektorski sat v ima svojstvo:

� za svaki s,t iz S: s → t ako-i-samo-ako s.v < t.v .

� Dokaz se svodi na dokazivanje sljedećih dviju tvrdnji:� Ako (s≠ t) i (s → t) onda t.v[s.p] < s.v[s.p]� Ako s → t onda s.v < t.v .

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 41

Analiza svojstava vektorskog sata (1a)� Najprije dokazujemo:

ako (s≠ t) i (s → t) onda t.v[s.p] < s.v[s.p].� Zaista, ako je t.p = s.p (oba stanja pripadaju

istom procesu) tada se t dešava prije s. � Budući da se lokalna komponenta vektorskog sata

povećava nakon svakog dogañaja, očito je t.v[s.p] < s.v[s.p].

� Zato pretpostavimo da s.p ≠ t.p. budući da je s.v[s.p] lokalni sat procesa Ps.p a Pt.p nije mogao vidjeti tu vrijednost jer s→t, slijedi t.v[s.p] < s.v[s.p], što je trebalo pokazati.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 42

Analiza svojstava vektorskog sata (2)� Dalje dokazujemo:

� ako s → t onda s.v < t.v .

� Tvrdnja je očita ukoliko s.p = t.p.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 43

Analiza svojstava vektorskog sata (2)� Zato gledamo samo slučaj različitih procesa. 1. Budući da je s → t, mora postojati put poruka od

s do t. 2. Budući da svaki proces ažurira svoj vektor kod

primanja poruke i budući da se ažuriranje radi kao maksimum po komponentama, � mi znamo da vrijedi: za svaki k : s.v[k] ≤ t.v[k] .

� Štoviše, budući da t → s, iz formule s prethodnog slajda znamo da je s.v[t.p] < t.v[t.p]. To baš znači da zaista vrijedi tvrdnja koju dokazujemo.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 44

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 45

Svrha i definicija sata nep ovisnosti (1)

� Mana vektorskog sata je da on zahtijeva slanje O(N) cijelih brojeva uz svaku poruku. To predstavlja prilično veliki komunikacijski teret.

� Za manje aplikacije dovoljna je i slabija verzija vektorskog sata, koja zahtijeva da:

� procesi i dalje čuvaju vektore,

� ali da se poruka produlji samo jednim cijelim brojem.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 46

Svrha i definicija sata nep ovisnosti (2)

� Takva slabija verzija naziva se sat neposredne

ovisnosti.

� Implementacija sata neposredne ovisnosti prikazana je na slici 7.8.

� Primjer distribuiranog računanja i pripadnog sata neposredne ovisnosti vidi se na slici 7.9.

� Ako zadržimo i-tu komponentu vektora u i-tom procesu, tada algoritam sata neposredne ovisnosti postaje identičan algoritmu jednostavnog logičkog sata.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 47

Implementacija sata nep ovisnosti –slika 7.8public class DirectClock {

public int[] clock; int myId; public DirectClock(int numProc, int id) {

myId = id; clock = new int[numProc]; for (int i = 0; i < numProc; i++) clock[i] = 0; clock[myId] = 1;

} public int getValue(int i) {

return clock[i]; } public void tick() {

clock[myId]++;} public void sendAction() {

// sentValue = clock[myId]; tick();

} public void receiveAction(int sender, int sentValue) {

clock[sender] = Util.max(clock[sender], sentValue);clock[myId] = Util.max(clock[myId], sentValue) + 1;

}}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 48

Objašnjenje slike 7.8� U implementaciji sa slike 7.8, opet se ne traži se da

poruke stižu u ispravnom redoslijedu.

� Algoritam sata neposredne ovisnosti opet je opisan polaznim uvjetima i akcijama koje se poduzimaju za svaku vrstu dogañaja.

� Sličnosti i razlike u odnosu na vektorski sat su sljedeće.� Kod slanja poruke, proces umeće u poruku samo “svoju”

komponentu lokalnog vektora. Ta komponenta se inkrementira kao kod vektorskog sata.

� Akcija za interne dogañaje je ista kao kod vektorskog sata.

� Kod primanja poruke, proces ažurira samo dvije komponente: jednu za sebe i jednu za proces od kojeg je stigla poruka. Način ažuriranja je sličan kao kod vektorskog sata.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 49

Primjer rada sata neposred ovisnosti

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 50

Svojstva i primjene sata nep ovisnosti (1)

� Da bi vidjeli kakva svojstva ima sat neposredne ovisnosti, definirat ćemo još jednu relaciju ureñaja.

� Definicija 7.3 Relacija neposredno-prethodi, u oznaci →d , je podskup relacije → . Pritom s →d t

ako-i-samo-ako u proces-vrijeme dijagramu postoji put od s do t koji koristi najviše jednuporuku.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 51

Svojstva i primjene sata nep ovisnosti (2)

� Za satove neposredne ovisnosti vrijedi sljedeće svojstvo. Za svaki s,t iz S, s.p ≠ t.p:

s →d t ako-i-samo-ako s.v[s.p] ≤ t.v[s.p] .

Dokaz se ostavlja za domaću zadaću.

� Satovi neposredne ovisnosti primjenjuju se u Lamportovom algoritmu za meñusobno isključivanje kojeg ćemo proučiti u Poglavlju 8.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 52

Sadržaj Poglavlja 7

7.1 Uvod

7.2 Model distribuiranog sustava

7.3 Modeli distribuiranog računanja

7.4 Jednostavni logički satovi

7.5 Vektorski satovi

7.6 Satovi neposredne ovisnosti

7.7 Matrični satovi

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 53

Svrha i definicija matričnog sata� Vektorski sat može se interpretirati kao “vektor znanja”.

Po toj interpretaciji, s.v[i ] bilježi što proces s.p u svom stanju s zna o procesu i.

� U nekim aplikacijama potrebno je da procesi imaju jošveći stupanj znanja. Umjesto vektora, proces pamti matricu. Vrijednost s.v[i ][ j ] bilježi što proces s.p u stanju s zna o tome što proces i zna o procesu j.

� Na primjer, ako s.v[i ][s.p] > k za sve i, tada proces s.pmože zaključiti da svi procesi već znaju da je njegovo stanje veće od k.

� Implementacija matričnog sata prikazana je na slici 7.10. Služimo se N×N matricom za sustav od N procesa.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 54

Implementacija matričnog sata –slika 7.10 (1)public class MatrixClock {

int[][] M; int myId; int N; public MatrixClock(int numProc, int id) {

myId = id; N = numProc; M = new int[N][N]; for (int i = 0; i < N; i++)

for (int j = 0; j < N; j++) M[i][j] = 0;

M[myId][myId] = 1; } public void tick() {

M[myId][myId]++; }

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 55

Implementacija matričnog sata –slika 7.10 (2)public void sendAction() {

//include the matrix in the messageM[myId][myId]++;

}public void receiveAction(int[][] W, int srcId) {

// component-wise maximum of matricesfor (int i = 0; i < N; i++)

if (i != myId) { for (int j = 0; j < N; j++)

M[i][j] = Util.max(M[i][j], W[i][j]);}

// update the vector for this processfor (int j = 0; j < N; j++)

M[myId][j] = Util.max(M[myId][j], W[srcId][j]); M[myId][myId]++;

} public int getValue(int i, int j) {

return M[i][j];}

}

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 56

Objašnjenje slike 7.10� Ako se usredotočimo samo na redak myId, za proces

PmyId, tada se algoritam matričnog sata reducira na algoritam vektorskog sata.

� U skladu s našim znanjem o vektorskim satovima vrijedi:za svaki s,t iz S, s.p ≠ t.p:

s → t ako-i-samo-ako s.M[s.p][* ] < t.M[t.p][*] .

� Ostali reci matrice M čuvaju vektorske satove ostalih procesa.� Na početku M sadrži nul-vektore za ostale procese.

� Nakon što unutar poruke primi matricu W nekog drugog procesa, naš proces ažurira svoju informaciju o vektorskim satovima svih ostalih procesa tako da uzme maksimume po odgovarajućim komponentama.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 57

Primjena matričnog sata� Kao prvu primjenu, spominjemo skupljanje smeća

(garbage collection). Druga primjena opisuje se u Pogl 12.

� Zamislimo da je proces Pi generirao neku informaciju u trenutku kad je njegova vrijednost M[i ][i ] bila jednaka k. Pi

šalje tu informaciju (neposredno ili posredno) svim procesima i želi je obrisati kad ona postane poznata svima.

� Tvrdimo da Pi smije obrisati informaciju čim sljedeći uvjet postane istinit za Pi-ovu matricu M:

za svaki j: M[ j ][ i ] ≥ k.

� Ovaj uvjet osigurava da vektorski satovi svih drugih procesa j imaju i-tu komponentu barem k. Dakle, ako se informacija širila porukama, Pi zna da su svi drugi procesi primili informaciju koju je Pi imao onda kad je M[i ][i ] bilo k.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 58

Primjer korištenja matričnog sata (Haifeng YU)

user1 (process1)

order D1 = (1,0,0)

user2 (process2)

order D2 = (0,1,0)

user3 (process3)

order D3 = (0,0,1)

(1,0,0)(0,0,0)(0,0,0)

(0,0,0)(0,1,0)(0,0,0)

(0,0,0)(0,0,0)(0,0,1)

(2,0,0)(0,0,0)(0,0,0)

(3,0,0)(0,0,0)(0,0,0)

(0,0,0)(0,0,0)(0,0,2)

(0,0,0)(0,2,2)(0,0,2)

(2,0,0)(2,3,2)(0,0,2)

(2,0,0)(2,3,2)(2,3,3)

D1

D3D1, D2, D3

user3 now knows that all 3 users have seen D1

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 59

Zaključak� Poglavlje “Modeli i Satovi”

� Cilj: Definirati “vrijeme” u distribuiranom sustavu

� Logički sat� “desilo se prije” ⇒ manja vrijednost sata

� Vektorski sat� “desilo se prije” ⇔ manja vrijednost sata

� Matrični sat� Daje informaciju svakom procesu o tome što znaju

drugi procesi.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 60

Bibliografske bilješke� Ideja logičkih satova potječe od Lamporta i bila je

objavljena 1978. godine. � Ideja vektorskih satova eksplicitno se pojavljuje u

radovima od Fidge-a i Mattern-a iz 1989. godine, makar se donekle može prepoznati i u nekim ranijim radovima drugih autora.

� Satovi neposredne ovisnosti prvi put su bili korišteni u Lamportovom algoritmu za meñusobno isključivanje, takoñer objavljenom 1978. godine.

� Satovi neposredne ovisnosti kasnije se primjenjuju za otkrivanje globalnih svojstava odnosno za oporavak u distribuiranim sustavima.

� Matrični satovi pojavili su se u radovima o skupljanju smeća – Sarin i Lynch 1987, te u radovima o otkrivanju globalnih predikata – Tomlison i Garg 1993.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 61

Literatura� Obavezna:

� Garg V.K. Concurrent and Distributed Computing in Java. Wiley – IEEE Press, New Yersey, 2004. ISBN: 0-471-43230-X.

� http://www.ece.utexas.edu/~garg

� Dopunska:� Garg V.K. Elements of Distributed Computing. Wiley – IEEE Press, New

York, 2002. ISBN: 0-471-03600-5.� Tel G. Introduction to Distributed Algorithms. Cambridge University

Press, 2001. ISBN: 0-521-79483-8.� Lynch N.A. Distributed Algorithms. Morgan Kaufmann, San Francisco

CA, 1997. ISBN: 1-55860-348-4.� Attiya H., Welch J. Distributed Computing: Fundamentals, Simulations,

and Advanced Topics. Second Edition. Wiley-Interscience, New York, 2004. ISBN: 0-471-45324-2.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 62

Literatura (2)� Dopunska (nastavak):

� Reisig W. Elements of Distributed Algorithms: Modeling and Analysiswith Petri Nets. Springer, Berlin, 2001. ISBN: 3-540-62752-9.

� Raynal M., Distributed Algorithms and Protocols. John Wiley and Sons, Chichester UK, 1988. ISBN: 0-471-91754-0.

� Tannenbaum A.S., van Steen M. Distributed Systems: Principles and Paradigms. Prentice-Hall, Englewood Cliffs NJ, 2002, ISBN: 0-130-88893-1.

P-07 (07/08) P-05 (09/10) DA (06/07) DP (09/10) 63

Literatura (3)� Ovi slideovi su napravljeni korištenjem popratnog materijala

uz knjigu Garg V.K. Concurrent and Distributed Computing in Java, koji su slobodno dostupni u ppt formatu na adresi

� http://users.ece.utexas.edu/~garg/dist/jbk-slides/� Korišteni su citati iz članka

� Time, Clocks and the Ordering of Events in a Distributed SystemCommunications of the ACM 21, 7 (July 1978), 558-565. Reprinted in several collections, including DistributedComputing: Concepts and Implementations, McEntire et al., ed. IEEE Press, 1984.

� Dostupan na http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf