SLIDE 1
s r rt r - - PowerPoint PPT Presentation
s r rt r - - PowerPoint PPT Presentation
s r rt r r r ss t s r
SLIDE 2
SLIDE 3
❚❤❡ ❇❛❦❡r② ❆♣♣r♦❛❝❤
❱❛r✐❛❜❧❡s s❤❛r❡❞ ❜② t❤r❡❛❞s 0..N−1
num[0]✱ · · · ✱ num[N − 1]✱ ✐♥✐t✐❛❧❧② 0
✴✴ num[i] > 0 ✐✛ i ♥♦t t❤✐♥❦✐♥❣ ▲♦❝❦ ❛❝q✉✐r❡✿ t❤r❡❛❞ i ❞♦❡s t✇♦ s❝❛♥s ♦❢ nums s✶✿ s❡t num[i] t♦ ❛ ✈❛❧✉❡ ❤✐❣❤❡r t❤❛♥ ♦t❤❡r nums s✷✿ ✇❛✐t ❛t ❡❛❝❤ j ✇❤✐❧❡
0 < num[j] < num[i]
▲♦❝❦ r❡❧❡❛s❡✿ t❤r❡❛❞ i ③❡r♦❡s num[i] ❘❡❢❡r t♦ t❤❡ ❛❜♦✈❡ ❛s s✐♠♣❧✐✜❡❞ ❜❛❦❡r② ✇♦r❦s ✐❢ s1 ✐s ❛t♦♠✐❝ ❜✉t ♥♦t ✇✐t❤ r❡❛❞✲✇r✐t❡ ❛t♦♠✐❝✐t② ❈❧❛ss✐❝❛❧ ❜❛❦❡r② ❤❛♥❞❧❡s r✴✇ ❛t♦♠✐❝✐t② ❜✉t nums ✉♥❜♦✉♥❞❡❞ ❇❧❛❝❦✲✇❤✐t❡ ❜❛❦❡r② ❤❛♥❞❧❡s r✴✇ ❛t♦♠✐❝✐t② ✇✐t❤ nums ❜♦✉♥❞❡❞
SLIDE 4
❖✉t❧✐♥❡
s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
❙✐♠♣❧✐✜❡❞ ❇❛❦❡r② ❈❧❛ss✐❝❛❧ ❇❛❦❡r② ❇❧❛❝❦✲✇❤✐t❡ ❇❛❦❡r②
SLIDE 5
Pr♦❣r❛♠ LockSimplifiedBakery(N)
s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
▼❛✐♥
num[0 .. N−1] ← 0 mysid.acq()✿ s1: • num[myid] ← max(num[0],· · · , num[N−1]) + 1 for (p in 0..N−1) s2: do •x ← num[p] while (0 < x < num[myid]) mysid.rel()✿ num[myid] ← 0 mysid.end()✿ num[myid] ← 0
❛t♦♠✐❝✐t② ❛ss✉♠♣t✐♦♥✿ t❤❡ ❵•✬s ♣r♦❣r❡ss ❛ss✉♠♣t✐♦♥✿ ✇❡❛❦ ❢❛✐r♥❡ss
SLIDE 6
❆♥❛❧②s✐s ✕ ✶
s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
- ♦❛❧✿ s❤♦✇ s✐♠♣❧✐✜❡❞ ❜❛❦❡r② ✐♠♣❧❡♠❡♥ts s✐♠♣❧❡ ❧♦❝❦ s❡r✈✐❝❡
❉❡✜♥❡ ❝❧♦s❡❞ ♣r♦❣r❛♠ ♦❢
LockSimplifiedBakery(N) s②st❡♠✱ lck✱ ❛♥❞ SimpleLockServiceInverse(N) s②st❡♠✱ lsi
❆ss❡rt✐♦♥s t♦ ❡st❛❜❧✐s❤ Y✶ : ■♥✈ ✭t❤r❞ ❛t doAcq(i).ic✮ ⇒ ✭♥♦ t❤r❞ ❡❛t✐♥❣✮ Y✷ : t❤r❞ i ✐♥ lck.rel r❡t✉r♥s Y✸ : t❤r❞ i ✐♥ lck.end r❡t✉r♥s Y✹ : ❡✈❡r② ❤✉♥❣r② t❤r❞ ❜❡❝♦♠❡s ❡❛t✐♥❣ ✐❢ ❡❛t✐♥❣ ✐s ❜♦✉♥❞❡❞ Y✷ ❛♥❞ Y✸ ❤♦❧❞ tr✐✈✐❛❧❧② ✴✴ lck.rel✱ lck.end ♥♦♥✲❜❧♦❝❦✐♥❣ Pr♦♦❢s ♦❢ Y✶ ❛♥❞ Y✹ ❢♦❧❧♦✇
SLIDE 7
❆♥❛❧②s✐s ✕ ✷
s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
■♥str✉❝t✐✈❡ t♦ ❞❡✜♥❡ ❛ ❤②♣♦t❤❡t✐❝❛❧ q✉❡✉❡ ♦❢ ❝♦♥t❡♥❞❡rs Q✿ s❡q✉❡♥❝❡ ♦❢ ✐❞s ♦❢ ♥♦♥✲t❤✐♥❦✐♥❣ t❤r❡❛❞s ✐♥ ✐♥❝r❡❛s✐♥❣ num ♦r❞❡r
i ❥♦✐♥s ✴ ❧❡❛✈❡s Q ✇❤❡♥ ✐t ❡①❡❝✉t❡s s✶ ✴ rel nums ✐♥ Q ❛r❡ ❞✐st✐♥❝t
✴✴ s✶ ✐s ❛t♦♠✐❝ ❛rr✐✈❛❧ ❥♦✐♥s ❛t t❛✐❧ ✴✴ ✧ ✧
i ❛❤❡❛❞✲♦❢ j✿ 0 < num[i] < num[j] i ♣❛ss❡❞ j✿ i ✐s ❡❛t✐♥❣ ♦r i ✐s ✐♥ s✷ ✇✐t❤ i.p > j
■❢ i ❛❤❡❛❞✲♦❢ j t❤❡♥ j ❝❛♥♥♦t ♣❛ss i s♦ ♦♥❧② t❤❡ t❤r❡❛❞ ❛t t❤❡ ❤❡❛❞ ♦❢ Q ❝❛♥ ❡❛t ✴✴ Y✶ ■❢ i ❛t ❤❡❛❞ ♦❢ Q t❤❡♥ i ♣❛ss❡s ❡✈❡r② j s♦ i ❡❛ts ❛♥❞ t❤❡♥ ❧❡❛✈❡s Q ❛t ✇❤✐❝❤ ♣♦✐♥t ❡✈❡r② j ✐♥ Q ❣❡ts ❝❧♦s❡r t♦ t❤❡ ❤❡❛❞ ✴✴ Y✹
SLIDE 8
❖✉t❧✐♥❡
r✴✇ ❛t♦♠✐❝✐t② s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
❙✐♠♣❧✐✜❡❞ ❇❛❦❡r②
❙✐♠♣❧✐✜❡❞ ❜❛❦❡r②✿ ❢❛✐❧s ✇✐t❤ ♦♥❧② r❡❛❞✲✇r✐t❡ ❛t♦♠✐❝✐t②
❈❧❛ss✐❝❛❧ ❇❛❦❡r② ❇❧❛❝❦✲✇❤✐t❡ ❇❛❦❡r②
SLIDE 9
❋❧❛✇s ✇✐t❤ r✴✇ ❛t♦♠✐❝✐t② ✕ ✶
r✴✇ ❛t♦♠✐❝✐t② s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
❙✐♠♣❧✐✜❡❞ ❜❛❦❡r② ❢❛✐❧s ✐❢ ♦♥❧② r❡❛❞s ❛♥❞ ✇r✐t❡s ❛r❡ ❛t♦♠✐❝ ♣r♦❜❧❡♠ ❛r✐s❡s ✇❤❡♥ t❤r❡❛❞s ❡①❡❝✉t❡ s1 s✐♠✉❧t❛♥❡♦✉s❧② ❋❧❛✇ ✶ t❤r❡❛❞s i ❛♥❞ j ♦✈❡r❧❛♣♣✐♥❣ ✐♥ s1 ❝❛♥ ❣❡t ❡q✉❛❧ ♥✉♠s ❡✳❣✳✱ ❡❛❝❤ r❡❛❞s t❤❡ ♦t❤❡r✬s num ❜❡❢♦r❡ ❡✐t❤❡r ✉♣❞❛t❡s ✐ts num ❡❛❝❤ t❤r❡❛❞ ♣❛ss❡s t❤❡ ♦t❤❡r✿ ❜♦t❤ ❛❝q✉✐r❡ t❤❡ ❧♦❝❦ ✴✴ ♦r ❡❛❝❤ t❤r❡❛❞ ✇❛✐ts ❢♦r t❤❡ ♦t❤❡r✿ ❞❡❛❞❧♦❝❦ ❋✐①✐♥❣ ✢❛✇ ✶ ✉s❡ t❤r❡❛❞ ✐❞s t♦ ❜r❡❛❦ t✐❡s ✐♥ s2 ❧❡t [num[i],i] < [num[j],j] ❞❡♥♦t❡
num[i] < num[j]
♦r
(num[i] = num[j] and i < j)
SLIDE 10
❋❧❛✇s ✇✐t❤ r✴✇ ❛t♦♠✐❝✐t② ✕ ✷
r✴✇ ❛t♦♠✐❝✐t② s✐♠♣❧✐✜❡❞ ❜❛❦❡r②
❋❧❛✇ ✷ t❤r❡❛❞s i ❛♥❞ j ♦✈❡r❧❛♣ ✐♥ s1
i ❧❡❛✈❡s s1 ❜❡❢♦r❡ j✱ ♣❛ss❡s j ✐♥ s2 ❜❡❝❛✉s❡ num[j] st✐❧❧ 0 j ❧❡❛✈❡s s1 ❧❛t❡r ✇✐t❤ num[j] < num[i]✱ s♦ j ♣❛ss❡s i ✐♥ s2 i ❛♥❞ j ❜♦t❤ ❛❝q✉✐r❡ t❤❡ ❧♦❝❦
❋✐①✐♥❣ ✢❛✇ ✷ ❜♦♦❧❡❛♥s choosing[0]✱ · · · ✱ choosing[N − 1]✱ ✐♥✐t✐❛❧❧② ❢❛❧s❡
i s❡ts choosing[i] ❜❡❢♦r❡ s1 ❛♥❞ r❡s❡ts ✐t ❛❢t❡r s1
✐♥ s✷✱ t❤r❞ i r❡❛❞s num[j] ♦♥❧② ❛❢t❡r ✜♥❞✐♥❣ choosing[j] ❢❛❧s❡ ❚❤✉s i r❡❛❞s ❛♥ ✏✉♥st❛❜❧❡✑ num[j] ♦♥❧② ✐❢
j st❛rt❡❞ ❝❤♦♦s✐♥❣ ❛❢t❡r i ✜♥✐s❤❡❞ ❝❤♦♦s✐♥❣
s♦ num[j] ✇✐❧❧ ❜❡ ❤✐❣❤❡r t❤❛♥ num[i] ❛♥❞ j ✇✐❧❧ ♥♦t ♣❛ss i
SLIDE 11
❖✉t❧✐♥❡
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
❙✐♠♣❧✐✜❡❞ ❇❛❦❡r② ❈❧❛ss✐❝❛❧ ❇❛❦❡r② ❇❧❛❝❦✲✇❤✐t❡ ❇❛❦❡r②
SLIDE 12
Pr♦❣r❛♠ LockBakery(N)
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
▼❛✐♥✿
choosing[ 0.. N−1] ← false num[0 .. N−1] ← 0 mysid.acq()✿ t1: choosing[myid] ← true t2: • num[myid] ← max( • num[0],· · · , • num[N−1]) + 1 t3: • choosing[myid] ← false for (p in 0..N−1) t4: while ( • choosing[p]) skip t5: do • x ← num[p] while (x = 0 and [x,p] < [num[myid], myid]) mysid.rel()✿ num[myid] ← 0 mysid.end() endSystem()
SLIDE 13
❆♥❛❧②s✐s✿ ♦✈❡r✈✐❡✇
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
- ♦❛❧✿ s❤♦✇ ❜❛❦❡r② ✐♠♣❧❡♠❡♥ts s✐♠♣❧❡ ❧♦❝❦ s❡r✈✐❝❡
Pr♦❝❡❡❞✐♥❣ ❛s ✉s✉❛❧ ❝❧♦s❡❞ ♣r♦❣r❛♠ ♦❢ ❧♦❝❦ ❛♥❞ s❡r✈✐❝❡ ✐♥✈❡rs❡ ❛ss❡rt✐♦♥s Y✶✕Y✹ t♦ ❡st❛❜❧✐s❤ Y✷✕Y✸ ❤♦❧❞ tr✐✈✐❛❧❧② ❊st❛❜❧✐s❤ Y✶✱ Y✹ ♥❡①t
SLIDE 14
❆♥❛❧②s✐s✿ ❛✉①✐❧✐❛r② q✉❛♥t✐t✐❡s
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
Pr♦♦❢ s✐♠✐❧❛r t♦ t❤❛t ♦❢ s✐♠♣❧✐✜❡❞ ❜❛❦❡r② Q✿ ❤②♣♦t❤❡t✐❝❛❧ q✉❡✉❡ ♦❢ ✐❞s ♦❢ ♥♦♥✲t❤✐♥❦✐♥❣ ♥♦♥✲❝❤♦♦s✐♥❣ t❤r❡❛❞s ✐♥ ✐♥❝r❡❛s✐♥❣ [num,id] ♦r❞❡r
i ❛❤❡❛❞✲♦❢ j✿ [0,·] < [num[i], i] < [num[j], j] passed(i,j)✿ i ✐s ❡❛t✐♥❣ ♦r i ✐s ✐♥ t✹✳✳t✺ ✇✐t❤ i.p > j j ✐s ❛ ♣❡❡r ♦❢ i ✐❢✿ i ❛♥❞ j ❛r❡ ♥♦♥✲t❤✐♥❦✐♥❣
t❤❡✐r ❝❤♦♦s✐♥❣ ✐♥t❡r✈❛❧s ♦✈❡r❧❛♣♣❡❞
j ✐s st✐❧❧ ❝❤♦♦s✐♥❣
✴✴ s♦ ♥♦t ❝♦♠♠✉t❛t✐✈❡
peers[i]✿ s❡t ♦❢ ♣❡❡rs ♦❢ i
✴✴ ❛✉①✐❧✐❛r② ✈❛r
SLIDE 15
❆♥❛❧②s✐s✿ s❛❢❡t② ♣r♦♦❢
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
C✵(i) : ((i on s2) and i.p = N − 1 and
(num[p] = 0 or [num[i.p],i.p] > [num[i],i]))
⇒
forall(j in 0..N − 1: not acqd[j])
C✶(i,j) : (i = j and passed(i,j)) ⇒
((not j in peers[i]) and (not acqd[j]
- r
(j on s1..t2)
- r
(num[j] > 0 and [num[j],j] > [num[i],i])))
C✷(i,j) : (i =j and (i on s2) and i.p =j and choosing[j]) ⇒
(j not in peers[i])
■♥✈ C✵(i) ❡q✉✐✈❛❧❡♥t t♦ Y✶ ❣✐✈❡♥ ❡✛❡❝t✐✈❡ ❛t♦♠✐❝✐t② C✷(i,j) s❛t✐s✜❡s ✐♥✈❛r✐❛♥❝❡ r✉❧❡ C✶(i,j) s❛t✐s✜❡s ✐♥✈❛r✐❛♥❝❡ r✉❧❡ ❛ss✉♠✐♥❣ ■♥✈ C✷(i,j) C✶(i,j) ❛♥❞ C✶(j,i) ✐♠♣❧② C✵
SLIDE 16
❆♥❛❧②s✐s✿ ♣r♦❣r❡ss ♣r♦♦❢
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
αi✿ ★ ❡♥tr✐❡s ❛❤❡❛❞✲♦❢ i βi✿
peers[i].size
D✶ : [βi, αi] = [k1, k2] > [0, 0] ✉♥❧❡ss
([βi, αi] < [k1, k2])
D✷ : βi = k1 > 0 ❧❡❛❞s✲t♦ βi < k1 ✴✴ ❝❤♦♦s✐♥❣ ❜♦✉♥❞❡❞ D✸ : [βi, αi] = [0, 0] ❧❡❛❞s✲t♦
acqd[i]
✴✴ i ♥❡✈❡r ❜❧♦❝❦❡❞ D✹ : [βi, αi] = [0, 0] ❧❡❛❞s✲t♦
not acqd[i]
✴✴ D✸✱ ❡❛t✐♥❣ ❡♥❞s D✺ : [βi, αi] = [k1, k2] > [0, 0] ❧❡❛❞s✲t♦
[βi, αi] < [k1, k2]
D✶ ❤♦❧❞s ❝♦③ β ♥♦♥✲✐♥❝r❡❛s✐♥❣✱ α ✐♥❝r❡❛s❡s ♦♥❧② ✐❢ β ❞❡❝r❡❛s❡s D✺✿ ❢r♦♠ D✷✱ D✶ ❢♦r k1 > 0❀ ❢r♦♠ D✹✳❤❡❛❞ ❢♦r k1 =0✱ k2 > 0 D✺ ❛♥❞ D✸ ✐♠♣❧② Y✹
SLIDE 17
❚❤❡ ❜❡❛✉t✐❢✉❧ ❛♥❞ t❤❡ ✉♥❞❡s✐r❛❜❧❡
❝❧❛ss✐❝❛❧ ❜❛❦❡r②
❇❡❛✉t✐❢✉❧✿ r✴✇ ❛t♦♠✐❝✐t② ♥♦t ♥❡❡❞❡❞ ♥♦ ♦✈❡r❧❛♣♣✐♥❣ ✇r✐t❡s t♦ t❤❡ s❛♠❡ ❧♦❝❛t✐♦♥ r❡❛❞ t❤❛t ♦✈❡r❧❛♣s ✇✐t❤ ❛ ✇r✐t❡ ❝❛♥ r❡t✉r♥ ❛♥② ✈❛❧✉❡
i r❡❛❞s ✉♥st❛❜❧❡ ✈❛r ♦❢ j ♦♥❧② ✐❢ j ✐s ❝❤♦♦s✐♥❣
s♦ num[j] ✇✐❧❧ ❡♥❞ ✉♣ ❤✐❣❤❡r t❤❛♥ num[i] s♦ i ✇✐❧❧ ♥❡✈❡r ♠❛❦❡ ❛ ✇r♦♥❣ ❞❡❝✐s✐♦♥ ❯♥❞❡s✐r❛❜❧❡✿ nums ❛r❡ ♥♦t ❜♦✉♥❞❡❞
SLIDE 18
❖✉t❧✐♥❡
❜❧❛❝❦✲✇❤✐t❡ ❜❛❦❡r②
❙✐♠♣❧✐✜❡❞ ❇❛❦❡r② ❈❧❛ss✐❝❛❧ ❇❛❦❡r② ❇❧❛❝❦✲✇❤✐t❡ ❇❛❦❡r②
SLIDE 19