12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

dowód poprawności tej wersji. Tam też znajdzie czytelnik algorytm będący uogólnieniemalgorytmu Dekkera na wiele procesów. Okazuje się, że do synchronizacji N procesówpotrzeba 2N-1 zmiennych, co oznacza, że liczba N musi być znana z góry, a przy każdej jejzmianie trzeba na nowo przepisywać odpowiednie fragmenty procesów. Poza tym algorytmwymaga od procesów aktywnego czekania. Z tych względów algorytm Dekkera okazał sięniezbyt praktycznym narzędziem do realizacji wzajemnego wykluczania.2.7.3 Instrukcje specjalneTypowym przykładem instrukcji umożliwiającej odczytanie i zapisanie zawartościkomórki pamięci podczas jednego dostępu jest instrukcja maszynowa Test&Set(X,R).Powoduje ona przepisanie zawartości komórki X do lokalnego rejestru R z jednoczesnym jejwy zerowaniem. Instrukcję tę można stosować do wzajemnego wykluczania dowolnej liczbyprocesów w następujący sposób. Na początku należy ustawić wartość wspólnie używanejzmiennej X na 1. Jedynka będzie oznaczać, że proces może wejść do swojej sekcji krytycznej.Przed wejściem do niej proces będzie wykonywał instrukcję:R := 0; while R = O do Test&Set(X,R),a po wyjściu będzie ponownie ustawiał wartość X na 1. Ponieważ tylko jeden proces będziemógł stwierdzić, że ma w swoim rejestrze R wartość l, tylko jeden z nich będzie mógł wejść doswojej sekcji krytycznej.Rozwiązane to ma jednak dwie wady. Po pierwsze, nie jest żywotne — żadnemuprocesowi nie możemy zagwarantować, że w skończonym czasie uzyska prawo wejścia dosekcji krytycznej5. Po drugie, wymaga aktywnego czekania — proces czekający na wejście doswojej sekcji krytycznej jest nadal wykonywany zabierając cenny czas procesora. Mimo tychwad należy tu zauważyć, że właśnie za pomocą instrukcji typu Test&Set realizuje sięwzajemne wykluczanie operacji semaforowych w systemach wieloprocesorowych ze wspólnąpamięcią (por. [IsMa82, r. 10]).Innymi instrukcjami maszynowymi tego typu są n p. SWAP(X,R), zamieniająca ze sobązawartość X i R, oraz TSB(X,L), [Shaw78] równoważna wykonaniu instrukcjiif X then goto L else X := true.Aktywne czekanie jest zjawiskiem, którego w programowaniu współbieżnym należyunikać. Wszystkie omawiane w następnych rozdziałach mechanizmy synchronizacji ikomunikacji pozwalają go uniknąć udostępniając narzędzia do wstrzymywania procesów.2.8 Mechanizmy wysokopoziomowe2.8.1 Mechanizmy synchronizacjiOmawiane w poprzednim punkcie sprzętowe mechanizmy umożliwiające realizacjęwzajemnego wykluczania mają dość istotne wady. Algorytm Dekkera jest zależny od liczbysynchronizowanych procesów, programowanie przerwań jest ingerencją w system operacyjnyi, podobnie jak korzystanie z instrukcji specjalnych, wymaga programowania na niskimpoziomie w języku asemblera.24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!