OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
OdpornoÅÄ na bÅÄdy bizantyjskie w systemach peer-to-peer - Instytut ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
74 Rozdział 4. Tolerowanie bizantyjskich uszkodzeń<br />
• Potwierdzenie zebrane od f +1 replik wystarcza, by zatwierdzić<br />
zlecenie i wysłać odpowiedź klien<strong>to</strong>wi 11 , jed<strong>na</strong>k dopiero 2f +1potwierdzeń<br />
jest dowodem tego, że stan replik jest spójny i może zostać<br />
zatwierdzony.<br />
• Przetwarzanie odbywa się tak długo, jak w wek<strong>to</strong>rze R g pozostają<br />
zlecenia do wyko<strong>na</strong>nia.<br />
Pro<strong>to</strong>kół opisany w tym paragrafie będzie dalej oz<strong>na</strong>czany symbolem BF2.<br />
Wzajemne wykluczanie. Ponieważ wszystkie repliki w grupie wykonują zlecenia<br />
uporządkowane według kolejności w R g , zatem istnieje potencjal<strong>na</strong> możliwość<br />
łatwego poszerzenia algorytmu o wzajemne wykluczanie. W tym celu<br />
klient c wysyła <strong>na</strong> początku specjalne zlecenie zajęcia usługi (ang. lock) . Repliki<br />
<strong>na</strong>potykając zlecenie lock wwek<strong>to</strong>rzeR g sprawdzają czy wśród reszty<br />
zleceń od tego samego klienta, który zamówił obiekt jest zlecenie zwolnienia<br />
(ang. release). Jeżeli zlecenie release z<strong>na</strong>jduje się w R g <strong>to</strong> repliki nie robią nic.<br />
Jeżeli <strong>na</strong><strong>to</strong>miast zlecenie <strong>to</strong> nie występuje, <strong>to</strong> resztę zleceń ustawiają w kolejce<br />
typu FIFO oz<strong>na</strong>czonej np. Q Rg , wykonują zlecenia klienta c i przechodzą do<br />
<strong>na</strong>stępnej rundy. Zlecenia zebrane w kolejnej rundzie są ustawiane <strong>na</strong> koniec kolejki<br />
Q Rg jeżeli pochodzą od innych klientów, aż do momentu <strong>na</strong>potkania relase<br />
od klienta c. Wtedy w kolejnej rundzie wykonuje się zlecenia zebrane w Q Rg .<br />
Należy zagwaran<strong>to</strong>wać, by podczas wyko<strong>na</strong>nia nie wystąpiło przywłaszczenie<br />
usługi, tzn. że tylko jeden klient ciągle będzie zajmował obiekt. W tym celu<br />
moż<strong>na</strong> użyć <strong>na</strong>stępującego algorytmu:<br />
Załóżmy, że z<strong>na</strong>my identyfika<strong>to</strong>ry wszystkich klientów 12 . Z każdym identyfika<strong>to</strong>rem<br />
kojarzymy licznik początkowo równy zero. Gdy klient otrzyma wyłączny<br />
dostęp do obiektu, <strong>to</strong> jego licznik zostaje pomniejszony o jeden, a liczniki<br />
wszystkich innych klientów zostają powiększone o jeden. War<strong>to</strong>ść wskazania<br />
licznika nie może być mniejsza od zera, czyli gdy licznik osiągnie zero <strong>to</strong> odjęcie<br />
od tej war<strong>to</strong>ści jedności nie zmienia wskazania. W momencie pojawienia się<br />
kolejnego zlecenia zamówienia obiektu dla kilku różnych klientów, sprawdzany<br />
jest stan licznika i ten klient dostanie wyłączny dostęp, dla którego licznik ma<br />
większą war<strong>to</strong>ść. Procedura po przyz<strong>na</strong>niu wyłącznego dostępu odejmuje jeden<br />
od licznika klienta, <strong>na</strong><strong>to</strong>miast pozostałym dodaje jeden. Algorytm jest odporny<br />
<strong>na</strong> zagładzanie, jednocześnie gwarantuje, że jeżeli tylko jeden z klientów będzie<br />
nieustannie żądał dostępu, <strong>to</strong> będzie on mu przyz<strong>na</strong>wany. Ilustrację działania<br />
11 Zalecane jest użycie schematu przyros<strong>to</strong>wych podpisów cyfrowych, który pozwala zapamiętać<br />
szereg podpisów stanu, jako jeden spójny podpis, który moż<strong>na</strong> <strong>na</strong>stępnie łatwo weryfikować.<br />
W innym przypadku odpowiedź <strong>na</strong> zlecenie r s c jest wysyła<strong>na</strong> przez wszystkie repliki.<br />
12 Takie założenie jest bardzo mocne, ale jest wprowadzone tylko dlatego, żeby łatwiej wyjaśnić<br />
sposób działania algorytmu. Warunek ten zostanie później osłabiony.