Languages and Finite Automata - rt-rk.uns.ac.rs · 2 Algoritam sa ceduljicama (Bakery Algorithm)...
Transcript of Languages and Finite Automata - rt-rk.uns.ac.rs · 2 Algoritam sa ceduljicama (Bakery Algorithm)...
1
Međusobno isključivanje
read/write promenljive
2
Algoritam sa ceduljicama(Bakery Algorithm)
Ovaj algoritam je sličan sa
read-modify-write algoritmom
Postoji red čekanja:
Proces na početku (glavi) reda je
u kritičnoj sekciji
Nov proces se ubacuje na kraj (rep)
3
Ulaz:
Skica algoritma
Izlaz:
t = tail;
tail = tail + 1;
Wait until t == head;
Kritična sekcija
head = head + 1;
(tail i head su deljene promenljive,
t je lokalna promenljiva)
4
Ulaz: t = tail;
tail = tail + 1;
Problem: ovaj deo koda se ne
ponaša korektno
//read tail
//write tail
5
0
tail
Dobar scenario
6
1
1p0
tail
Read 0
Write 1
(t=0)
Dobar scenario
7
2
1p0
2p1
tail
Read 1
Write 2
(t=1)
Dobar scenario
8
3
1p0
2p1 3p
2
tail
Read 2
Write 3
(t=2)Dobar scenario
9
0
1p0
tail
Read 0
Loš scenario
10
1
1p0
2p0
tail
Read 0
Write 1Write 1
(zakašnjen)
Loš scenario
11
2
1p0
2p0 3p
1
tail
Read 1
Write 2
Write 1
(zakašnjen)
Loš scenario
12
3
1p0
2p0 3p
1
tail
Read 2
Write 3
Write 1
(zakašnjen)4p
2
Loš scenario
13
1
1p0
2p0 3p
1
tail
Write 1 Read 2
Write 34p
2
Loša vrednost!!!
Loš scenario
14
1p0
Rešenje: distribuirano brojanje
V[1]=0
Treba nam niz deljenih promenljivih
v[1], v[2], …, v[n]
Proces ima vrednost v[i]ip
2p0
V[2]=0
3p0
V[3]=0
4p0
V[4]=0
15
1p0
V[1]=0
2p0
V[2]=0
3p0
V[3]=0
4p0
V[4]=0
U ulaznom kodu, proces
čita vrednosti svih drugih procesa.
Nova vrednost je maximum + 1
16
1p0
V[1]=0
2p1
V[2]=1
3p0
V[3]=0
4p0
V[4]=0
ulaz
Max = 0;
Max + 1 = 1;
17
1p0
V[1]=0
2p1
V[2]=1
3p0
V[3]=0
4p2
V[4]=2
ulaz ulaz
Max = 1;
Max + 1 = 2;
18
1p0
V[1]=0
2p1
V[2]=1
3p3
V[3]=3
4p2
V[4]=2
ulaz ulaz
Max = 2;
Max + 1 = 3;
ulaz
19
1p4
V[1]=4
2p1
V[2]=1
3p3
V[3]=3
4p2
V[4]=2
ulaz ulazulazulaz
Max = 3;
Max + 1 = 4;
Svaki proces dobija jedinstvenu vrednost
(jedinstvena pozicija u distribuiranom redu)
20
1p4
V[1]=4
2p1
V[2]=1
3p3
V[3]=3
4p2
V[4]=2
ulaz ulazulazulaz
Zatim procesi porede svoje vrednosti
sa svim drugim vrednostima.
Najmanja vrednost ulazi u kritičnu sekciju(različita od 0)
21
1p4
V[1]=4
2p1
V[2]=1
3p3
V[3]=3
4p2
V[4]=2
ulaz ulazulazkritična
sekcija
2p čita sve vrednosti
2p shvata da ima najmanju vrednost
22
1p4
V[1]=4
2p0
V[2]=0
3p3
V[3]=3
4p2
V[4]=2
ulaz ulazulazizlaz
2p postavlja svoju prom na 0
23
1p4
V[1]=4
2p0
V[2]=0
3p3
V[3]=3
4p2
V[4]=2
ulaz ulaz kritična
sekcija
24
1p4
V[1]=4
2p0
V[2]=0
3p3
V[3]=3
4p0
V[4]=0
ulaz ulaz izlaz
25
I tako dalje……
1p4
V[1]=4
2p0
V[2]=0
3p3
V[3]=3
4p0
V[4]=0
ulaz Kritična
sekcija
26
1p0
V[1]=0
2p0
V[2]=0
3p0
V[3]=0
4p0
V[4]=0
Problem: Kada dva procesa uđu
u istom trenutku,
oni mogu da izaberu istu vred.
ulaz ulaz
27
1p0
V[1]=0
2p1
V[2]=1
3p0
V[3]=0
4p1
V[4]=1
ulaz ulaz
Max vrednosti koje oni pročitaju su iste
28
1p0
V[1]=0
2p1, 2
V[2]=1
3p0
V[3]=0
4p1, 4
V[4]=1
ulazkritična
sekcija
Rešenje: koristiti ID za razbijanje simetrije
(najmanji ID pobeđuje)
29
1p0
V[1]=0
2p0
V[2]=0
3p0
V[3]=0
4pV[4]=1
ulazizlaz
1, 4
30
Ceo algoritam sa ceduljicama
V[i] = 0; choosing[i] = false;
choosing[i] = true;
V[i] = max(V[1], V[2], …, V[n])+1;
Proces i:
choosing[i] = false;
for (k = 1; k <= n; k++)
Wait until choosing[k] == false;Wait until V[k] == 0 or
(V[k],k) > (V[i],i)Kritična sekcija
V[i] = 0;
Ulaz:
Izlaz:
31
Prednosti algoritma sa ceduljicama:
•Koristi Read/Write promenljive
•Zadovoljava uslov da
nema trajnog zaključavanja
Nedostaci:
•Koristi n deljenih prom. za n procesa(u stvari, ne postoji rešenje sa manje prom.)
•Vrednosti mogu da rastu neograničeno
(voleli bi da nađemo neki algoritam
sa ograničenim vrednostima)
32
Međusobno isključivanje za 2 procesa
Want[0] = 1;
Wait until want[1]== 0;
Kritična sekcija
Want[0] = 0;
1: Want[1] = 0;
Wait until want[0] ==0;
Want[1] = 1;
if (want[0] == 1) goto 1;
Kritična sekcija
Want[1] = 0;
proces visokog priori. proces niskog priori.
Ulaz:
Izlaz:
Dobro: Koristi samo ograničene vred. prom.Problem: Proces niskog prio. može se traj.zak.
33
1: Want[0] = 0;
Wait until (want[1]== 0
or Priority == 0);
Want[0] = 1;
if priority == 1 then
if Want[1] == 1 then
goto Line 1
Else wait until Want[1]==0;
Critical section
Priority = 1;
Want[0] = 0;
Proces 0 Proces 1
Ulaz:
Izlaz:
Dobro: Koristi ograničene vred. prom.
Nema trajnog zaključ. (lockout)
Algoritam istog prioriteta
1: Want[1] = 0;
Wait until (want[0]== 0
or Priority == 1);
Want[1] = 1;
if priority == 0 then
if Want[0] == 1 then
goto Line 1
Else wait until Want[0]==0;
Critical section
Priority = 0;
Want[1] = 0;
34
Algoritam sa turnirom (Tournament)
Možemo realizovati algoritam turnira za
međusobno isključivanje, koristeći algorit.
jednakog prioriteta po parovima
1p 2p 3p 4p 5p 6p 7p 8p
35
1p 2p 3p 4p 5p 6p 7p 8p
Međusobno isključivanje za parove procesa
1p 4p 5p 8p
pobednik
36
1p 2p 3p 4p 5p 6p 7p 8p
1p 4p 5p 8p
4p 8p
37
1p 2p 3p 4p 5p 6p 7p 8p
1p 4p 5p 8p
4p 8p
4ppobednik
Kritična sekcija
38
Prednosti algoritma sa turnirom
•Ograničene vred. promenljivih
•O(n) promenljivih
•Nema trajnog zaključavanja
(pošto za međuso. isključivanje
para nema trajnog zaključavanja)
39
MCS algoritam međusobnog isključivanja
Lock=0
next nilLock=0
next
Lock=0
next
Lock=1
next
T
glava rep
Proces
u kritičnoj
sekciji
Proces
koji čeka da uđe u
kritičnu sekciju
40
Lock=0
next nilLock=0
next
Lock=0
next
Lock=1
next
T
glava rep
Globalna deljena mem.
Lokalne memorije (npr. keš)
Procesi
Kruže na svojim
memorijama
41
Lock=0
next nilLock=0
next
Lock=0
next
Lock=1
next
T
glava rep
Kritična
sekcija
42
Lock=0
next nilLock=0
next
Lock=1
next
Lock=1
next
T
glava rep
Kritična
sekcija
43
Lock=0
next nilLock=1
next
Lock=1
next
T
glava rep
Kritična
sekcija
44
Lock=1
next nilLock=1
next
T
glavarep
Kritična
sekcija
45
nil
T
46
Ulazni kod za procesor i:
Qi = pokaz. na nov queuenode; // Qi, *Qi je u lokalnoj mem.
Qi->Lock = 0;
Qi->Next = nil;
Ti = Swap(T, Qi); //Ti je u lokalnoj mem.
If Ti nil then
Ti -> next = Qi;
else
Qi->Lock =1; //on je na glavi reda
Wait until Qi->lock = 1;
47
Swap(T,Qi)
{ x = T; //čitaj T
T = Qi; // zameni T i Qi
return x; // vrati staru vred. od T
}
Atomska operacija
48
nil
T
Lock=0
next nil
Qi je napravljen
Qi
Prazan red
49
nil
T
Lock=0
next nil
Posle operacije zamene (swap)
Qi
Ti
50
T
Lock=1
next nil
Posle iskaza if
Qi
u kritičnoj sekciji
51
T
Lock=1
next nil
Stiže proces j
Qi
Lock=0
next nil
Qj
kritična
sekcija
52
T
Lock=1
next nil
Posle operacije zamene
Qi
Lock=0
next nil
Qj
Tj
kritična
sekcija
53
T
Lock=1
next
Posle operacije u iskazu if
Qi
Lock=0
next nil
Qj
kritična
sekcija
54
nil
T
Lock=0
next nil
Procesi i i j
stižu simultano Qi
Lock=0
next nil
Qj
Prazan red
55
nil
TiLock=0
next nil
Izvršenje operacije zamene dodeljuje redosled
Qi
Lock=0
next nil
Qj
Tj T
drugiprvi
56
Lock=1
next
Qi
Lock=0
next nil
Qj
T
kritična
sekcija
57
Izlazni kod za procesor i:
Ti = Compare&Swap(T, Qi, nil); //Ti je u lokalnoj mem.
If Ti Qi then
wait until (Qi->next nil)
Ti -> next->lock = 1;
Delete Qi and *Qi
58
Compare&Swap(T,Qi,nil)
{ x = T; //čitaj vrednost T
If T == Qi then
T = nil; //zameni T sa nil aku su T i Qi jednaki
return x; // vrati staru vrednost T
}
Atomska operacija
59
Lock=0
next nilLock=0
next
Lock=0
next
Lock=1
next
Tkritična
sekcija
Qi
pre compare&swap
60
Lock=0
next nilLock=0
next
Lock=1
next
Lock=1
next
T
Qi
posle compare&swap
kritična
sekcija
Ti
61
Lock=0
next nilLock=1
next
Lock=1
next
T
kritična
sekcija
62
Lock=1
next nilLock=1
next
T
kritična
sekcija
63
Lock=1
next nil
T
kritična
sekcija
Ekstremni slučaj
64
Lock=0
next nilLock=1
next nil
T
kritična
sekcija
Ekstremni slučaj
Nov čvor
će bit umetnut
će izvršiti
swapće izvršiti
compare&swap
65
Lock=0
next nilLock=1
next nil
T
Slučaj 1: swap se izvrši prvi
Čeka dok
next ne pokaže
na nešto
66
Lock=0
next nilLock=1
next
T
Slučaj 1: swap se izvrši prvi
67
Lock=1
next nilLock=1
next
T
kritična
sekcija
Slučaj 1: swap se izvrši prvi
68
Lock=0
next nilLock=1
next nil
T
Slučaj 2: compare&swap se izvrši prvi
nil
69
Lock=0
next nilLock=1
next nil
T
nil
Slučaj 2: compare&swap se izvrši prvi
70
Lock=1
next nil
T
kritična
sekcija
Slučaj 2: compare&swap se izvrši prvi