■♠♣❧❡♠❡♥t✐♥❣ ✜❢♦ ♠s❣tr❛♥s❢❡r✷ ✉s✐♥❣ ❧♦ss② ♦r ▲❘❉ ♠s❣tr❛♥s❢❡r✷ ❙❤❛♥❦❛r ▼❛r❝❤ ✶✷✱ ✷✵✶✾
❉❛t❛ tr❛♥s❢❡r ♣r♦t♦❝♦❧✿ DtpDist send send recv recv a1 a2 fifo msgtransfer dtp a2 dtp a1 send send a1 a2 recv recv lossy/lrd msgtransfer ■♠♣❧❡♠❡♥ts ✜❢♦ ♠s❣tr❛♥s❢❡r✭❛✶✱❛✷✮ ✉s✐♥❣ ❧♦ss②⑤❧r❞ ♠s❣tr❛♥s❢❡r ❙❧✐❞✐♥❣ ✇✐♥❞♦✇ ♣r♦t♦❝♦❧ ✭❙✇♣✮ a1 → a2 ✜❢♦ tr❛♥s❢❡r ❞❡✜♥❡ ♣r♦❣r❛♠s ❛t ✏❛❧❣♦r✐t❤♠✲❧❡✈❡❧✑✿ ❛t♦♠✐❝ r✉❧❡s ♣r♦✈❡ ❝♦rr❡❝t♥❡ss ✇✐t❤ ♠♦❞✉❧♦✲◆ s❡q✉❡♥❝❡ ♥✉♠❜❡rs ❝♦rr❡❝t♥❡ss✲♣r❡s❡r✈✐♥❣ r❡✜♥❡♠❡♥t t♦ ❛✇❛✐t ♣r♦❣r❛♠ ❖❜t❛✐♥ dtp ✈✐❛ ❝♦rr❡❝t♥❡ss✲♣r❡s❡r✈✐♥❣ ♠❡r❣❡ ♦❢ t✇♦ Swp s
❖✉t❧✐♥❡ s✇♣ ❙❧✐❞✐♥❣ ❲✐♥❞♦✇ Pr♦t♦❝♦❧ ❆♥❛❧②s✐s ♦❢ ❙❧✐❞✐♥❣ ❲✐♥❞♦✇ Pr♦t♦❝♦❧ ❆✇❛✐t✲str✉❝t✉r❡❞ ❙♦✉r❝❡ ❛♥❞ ❙✐♥❦ Pr♦❣r❛♠s ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧ ❛♥❞ Pr♦♦❢ ●r❛❝❡❢✉❧✲❝❧♦s✐♥❣ ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧ ❆❜♦rt❛❜❧❡ ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧
❙❧✐❞✐♥❣ ✇✐♥❞♦✇ ♣r♦t♦❝♦❧✿ SwpDist s✇♣ send recv a1 a2 1-way fifo msgtransfer Sink Source send send a1 a2 recv recv lossy/lrd msgtransfer Swp(a1, a2) xa1, xa2 ← startSystem ( Lossy | LrdChannel (a1, a2) ) ya1 ← startSystem ( Source(a1, a2, xa1)) ya2 ← startSystem ( Sink(a2, a1, xa2)) return ya1, ya2
❙♦❧✉t✐♦♥ ✉s✐♥❣ s❡q✉❡♥❝❡ ♥✉♠❜❡rs s✇♣ d ✵ ✱ d ✶ ✱ · · · ✿ ❞❛t❛ ❜❧♦❝❦s s❡♥t ✐♥t♦ s♦✉r❝❡ ❜② ✐ts ✉s❡r ❙♦✉r❝❡ s❡♥❞ [ d k , k ] r❡♣❡❛t❡❞❧② ✉♥t✐❧ ❛❝❦❡❞ / k ✿ s❡q ★ / ❙✐♥❦ r❡s♣♦♥❞ ✇✐t❤ ❛✇❛✐t❡❞ s❡q ★ / ❝✉♠✉❧❛t✐✈❡ ❛❝❦ / ❤❛s 0 ... 4 ⊔ 6, ... 8 ✿ r❡❝✈ ✼ ✴ s❡♥❞ ✺❀ r❡❝✈ ✺ ✴ s❡♥❞ ✾ ♣❛ss❡s ❞❛t❛ ❜❧♦❝❦s t♦ ✐ts ✉s❡r ✐♥ ♦r❞❡r ❋♦r ❣♦♦❞ t❤r♦✉❣❤♣✉t > ✶ ♦✉tst❛♥❞✐♥❣ ❛t s♦✉r❝❡✱ ❜✉✛❡r ♦✉t✲♦❢✲s❡q✉❡♥❝❡ ❛t s✐♥❦ ❆❜♦✈❡ r❡q✉✐r❡s ✉♥❜♦✉♥❞❡❞ s❡q ★s ✭✉s♥✮ ♥♦t ❣♦♦❞ ❢♦r ❤✇ ✐♠♣❧❡♠❡♥t❛t✐♦♥ ■♥st❡❛❞ ✉s❡ ❝②❝❧✐❝ s❡q ★s ✭❝s♥✮
❯s✐♥❣ ♠♦❞✉❧♦✲ N ❝②❝❧✐❝ s❡q✉❡♥❝❡ ♥✉♠❜❡rs s✇♣ ❯s❡ ♠♦❞✲ N ❝s♥ ✐♥st❡❛❞ ♦❢ ✉s♥ ❙❡♥❞ ❝s♥ ♠♦❞✭ k ✱ N ✮ ✐♥st❡❛❞ ♦❢ ✉s♥ k ❘❡❝❡✐✈❡r ♦❢ csn ❤❛s t♦ ✐♥❢❡r t❤❡ ❝♦rr❡s♣♦♥❞✐♥❣ usn ♠❛✐♥t❛✐♥s ✇✐♥❞♦✇ ♦❢ ✏♣♦ss✐❜❧❡✑ ✉s♥ s❛② L · · · U ♠❛♣s r❝✈❞ csn t♦ usn ✇✐t❤ s❛♠❡ ❝②❝❧✐❝ ✈❛❧✉❡ usn ← L + ♠♦❞ ( csn − L , N ) ❀ ✐❢ usn > U ✐❣♥♦r❡ r❝✈❞ csn ❙❡q ★s ✐♥ tr❛♥s✐t ♠✉st r❡♠❛✐♥ ❝❧♦s❡ t♦ ✇✐♥❞♦✇
❙❧✐❞✐♥❣ ✇✐♥❞♦✇ ♣r♦t♦❝♦❧ ✇✐t❤ ♠♦❞✲◆ ❝s♥ s✇♣ ❙♦✉r❝❡ ng ✿ # ❜❧❦s ❢r♦♠ ✉s❡r ns ✿ # ❜❧❦s s❡♥t ❛t ❧❡❛st ♦♥❝❡ na ✿ # ❜❧❦s ❛❝❦❡❞ ♠❛♣ sbuff ✿ ❢♦r ❜❧❦s na · · · ng-1 s❡♥❞ ✇✐♥❞♦✇✿ na · · · ns ✰ SW-1 / / SW < N ♦✉tst❛♥❞✐♥❣ ✇✐♥❞♦✇✿ na · · · ns / ♦❦ ✐❢ ❧♦✇ ❡♥❞ ✐s na+1 / ❙✐♥❦ nd ✿ # ❜❧❦s t♦ ✉s❡r nr ✿ # ❝♦♥t✐❣✉♦✉s ❜❧❦s r❝✈❞ ♠❛♣ rbuff ✿ ❢♦r ❜❧❦s nd · · · nd + RW-1 / / RW < N r❡❝❡✐✈❡ ✇✐♥❞♦✇✿ nr · · · nd + RW-1 ❖✈❡r t✐♠❡✱ ✇✐♥❞♦✇s s❧✐❞❡ t♦ ✐♥❝r❡❛s✐♥❣ s❡q # s
❙❧✐❞✐♥❣ ✇✐♥❞♦✇s s✇♣ Source Sink vars vars ng : # blks nd 0 0 : # blks delivered from user to user 1 0 1 acked ns : # sent nr : blk next rbuff awaited na : # acked sbuff nd rbuff sbuff received na na � � � � send � � outstanding window nr nr (not received) � � � � � � � � receive � � � � possibly � � window � � ns received � � � � na+SW-1 � � � � not yet sent � � � � nd+RW-1 � � � � ng
❙✇♣ ♠♦❞✲◆✿ ❛❧❣♦r✐t❤♠✲❧❡✈❡❧ s✇♣ ❙♦✉r❝❡ ❙✐♥❦ na,ns,ng ← 0 ❀ sbuff ← [] nd,nr ← 0; rbuff ← [] db ❢r♦♠ ✉s❡r✿ nd < nr ✿ sbuffng ← db ❀ ng++ rbuffnd t♦ ✉s❡r❀ nd++ ns < min (na+SW, ng) ✿ r❡❝✈ [db,cn] ✿ s❡♥❞ [sbuffns, ns] ❀ ns++ j ← nr + cn-nr if nr ≤ j < nd+RW: k in na..ns-1 ✿ rbuffj ← db s❡♥❞ [sbuffk, k] ✇❤✐❧❡ nr in rbuff.keys: r❡❝✈ ❬ cn ❪✿ nr ← nr+1 j ← na + cn-na s❡♥❞ ❬ nr ❪ if na < j ≤ ns: sbuff.remove(na..j-1) na ← j k ✿ ♠♦❞✭ k ✱◆✮
❖✉t❧✐♥❡ s✇♣ ❛♥❛❧②s✐s ❙❧✐❞✐♥❣ ❲✐♥❞♦✇ Pr♦t♦❝♦❧ ❆♥❛❧②s✐s ♦❢ ❙❧✐❞✐♥❣ ❲✐♥❞♦✇ Pr♦t♦❝♦❧ ❆✇❛✐t✲str✉❝t✉r❡❞ ❙♦✉r❝❡ ❛♥❞ ❙✐♥❦ Pr♦❣r❛♠s ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧ ❛♥❞ Pr♦♦❢ ●r❛❝❡❢✉❧✲❝❧♦s✐♥❣ ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧ ❆❜♦rt❛❜❧❡ ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧
❉❡s✐r❡❞ ♣r♦♣❡rt✐❡s ♦❢ SwpDist s✇♣ ❛♥❛❧②s✐s dbh ✿ ❛✉①✐❧✐❛r② ✈❛r ✐♥❞✐❝❛t✐♥❣ s❡q ♦❢ ❜❧❦s s❡♥t ❜② ✉s❡r ❉❡s✐r❡❞ ♣r♦♣❡rt✐❡s X ✶ : ■♥✈ (nd < nr ⇒ rbuffnd = dbhnd) X ✷ : (nd = k < ng ❧❡❛❞s✲t♦ nd > k) ❛ss✉♠✐♥❣ ✇❢❛✐r s❡♥❞ sbuffns ✱ r❡s❡♥❞ sbuffna ✱ ❞❡❧✐✈❡r rbuffnd t♦ ✉s❡r✱ s♦✉r❝❡✴s✐♥❦ r❝✈ ♠s❣✱ ❝❤❛♥♥❡❧ ♣r♦❣r❡ss ■♥t❡r♠❡❞✐❛t❡ ❞❡s✐r❡❞ ■♥✈ A ✶ ✕ A ✸ A ✵ : nd · · · nr-1 ✐♥ rbuff.keys A ✶ : (k ✐♥ rbuff.keys) ⇒ rbuffk = dbhk / A ✵ , ✶ ⇒ X ✶ ✳♣r❡❞ / A ✷ : na ≤ nr ≤ ns ≤ na+SW ❛♥❞ ns ≤ ng
❈♦rr❡❝t ✐♥t❡r♣r❡t❛t✐♦♥ ❝♦♥❞✐t✐♦♥s s✇♣ ❛♥❛❧②s✐s ❆❞❞ ❛✉①✐❧✐❛r② usn ✜❡❧❞ t♦ ♠s❣s / ♥♦t r❡❛❞ / s♦✉r❝❡ s❡♥❞s [sbuffj, j, j] s✐♥❦ s❡♥❞s [nr, nr] ❙✐♥❦ ♠❛♣s r❝✈❞ [j, j] ✇rt r❝✈ ✇✐♥❞♦✇ nr · · · nr+RW-1 j ✐♥ ✇✐♥❞♦✇✿ ♠❛♣♣❡❞ ❝♦rr❡❝t❧② j < ✇✐♥❞♦✇✿ nr-1 � ✱ nr-2 � ✱ · · · � ✱ nr-N+RW-1 × j > ✇✐♥❞♦✇✿ nr+RW � ✱ nr+RW+1 � ✱ · · · � ✱ nr+N × ❞❡s✐r❡❞ ■♥✈ A ✸ A ✸ : ❞❛t❛ j r❝✈❛❜❧❡ ⇒ j ✐♥ nr-N+RW · · · nr+N-1 ❙♦✉r❝❡ ♠❛♣s r❝✈❞ [j, j] ✇rt ♦✉tst❛♥❞✐♥❣ ✇✐♥❞♦✇ na · · · ns ❞❡s✐r❡❞ ■♥✈ A ✸ A ✹ : ❛❝❦ j r❝✈❛❜❧❡ ⇒ j ✐♥ ns-N+1 · · · na+N
❘❡❝❛♣ s✇♣ ❛♥❛❧②s✐s ●♦❛❧ A ✵ : nd · · · nr-1 ✐♥ rbuff.keys A ✶ : (k ✐♥ rbuff.keys) ⇒ rbuffk = dbhk A ✷ : na ≤ nr ≤ ns ≤ na+SW ❈♦rr❡❝t ✐♥t❡r♣r❡t❛t✐♦♥ A ✸ : ❞❛t❛ j r❝✈❛❜❧❡ ⇒ j ✐♥ nr-N+RW · · · nr+N-1 A ✹ : ❛❝❦ j r❝✈❛❜❧❡ ⇒ j ✐♥ ns-N+1 · · · na+N ❋♦r ❡✈❡r② st❡♣ e ✿ { A ✵ ✕ A ✹ } e { A ✵ , A ✶ , A ✷ } ❤♦❧❞s ❙✉✣❝❡s t♦ ❡st❛❜❧✐s❤ { A ✷ , ✸ , ✹ } e { A ✸ } ❢♦r e ✿ s❡♥❞ ❞❛t❛❀ r❝✈ ❞❛t❛ ❛✛❡❝t✐♥❣ nr { A ✷ , ✸ , ✹ } e { A ✹ } ❢♦r e ✿ s❡♥❞ ❛❝❦❀ r❝✈ ❛❝❦ ❛✛❡❝t✐♥❣ ns
❖✉t❧✐♥❡ ❧♦ss② ❝❤❛♥♥❡❧ s✇♣ ❛♥❛❧②s✐s ❙❧✐❞✐♥❣ ❲✐♥❞♦✇ Pr♦t♦❝♦❧ ❆♥❛❧②s✐s ♦❢ ❙❧✐❞✐♥❣ ❲✐♥❞♦✇ Pr♦t♦❝♦❧ ■♥✈ A ✸ ✕ A ✹ ❢♦r ❧♦ss② ❝❤❛♥♥❡❧ ■♥✈ A ✸ ✕ A ✹ ❢♦r ▲❘❉ ❝❤❛♥♥❡❧ Pr♦❣r❡ss ❢♦r ❧♦ss②✴▲❘❉ ❝❤❛♥♥❡❧ ❆✇❛✐t✲str✉❝t✉r❡❞ ❙♦✉r❝❡ ❛♥❞ ❙✐♥❦ Pr♦❣r❛♠s ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧ ❛♥❞ Pr♦♦❢ ●r❛❝❡❢✉❧✲❝❧♦s✐♥❣ ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧ ❆❜♦rt❛❜❧❡ ❉❛t❛ tr❛♥s❢❡r Pr♦t♦❝♦❧
Recommend
More recommend