Synchronizacja procesów: problem z sekcją krytyczną w systemie operacyjnym

Spisie treści:

Anonim

Co to jest synchronizacja procesów?

Synchronizacja procesów to zadanie polegające na koordynowaniu wykonywania procesów w taki sposób, aby żadne dwa procesy nie miały dostępu do tych samych współdzielonych danych i zasobów.

Jest to szczególnie potrzebne w systemie wieloprocesowym, gdy wiele procesów działa razem, a więcej niż jeden proces próbuje uzyskać dostęp do tego samego współdzielonego zasobu lub danych w tym samym czasie.

Może to prowadzić do niespójności udostępnianych danych. Zatem zmiana dokonana przez jeden proces niekoniecznie odzwierciedla się, gdy inne procesy uzyskują dostęp do tych samych udostępnionych danych. Aby uniknąć tego typu niespójności danych, procesy muszą być ze sobą zsynchronizowane.

W tym samouczku dotyczącym systemu operacyjnego dowiesz się:

  • Co to jest synchronizacja procesów?
  • Jak działa synchronizacja procesów?
  • Sekcje programu
  • Co to jest problem z sekcją krytyczną?
  • Reguły dla sekcji krytycznej
  • Rozwiązania dla sekcji krytycznej

Jak działa synchronizacja procesów?

Na przykład proces A zmienia dane w lokalizacji pamięci, podczas gdy inny proces B próbuje odczytać dane z tej samej lokalizacji pamięci. Istnieje duże prawdopodobieństwo, że dane odczytane przez drugi proces będą błędne.

Sekcje programu

Oto cztery podstawowe elementy sekcji krytycznej:

  • Sekcja wejścia: jest to część procesu, która decyduje o wejściu do określonego procesu.
  • Sekcja krytyczna: ta część umożliwia jednemu procesowi wprowadzanie i modyfikowanie wspólnej zmiennej.
  • Sekcja wyjścia: Sekcja wyjścia umożliwia innemu procesowi, który czeka w sekcji wejściowej, wejście do sekcji krytycznej. Sprawdza również, czy proces, który zakończył wykonywanie, powinien zostać usunięty za pośrednictwem tej sekcji.
  • Pozostała część: Wszystkie inne części Kodeksu, które nie znajdują się w Sekcji Krytycznej, Wejściowej i Wyjściowej, nazywane są Sekcją Pozostałą.

Co to jest problem z sekcją krytyczną?

Sekcja krytyczna to segment kodu, do którego można uzyskać dostęp za pomocą procesu sygnalizacyjnego w określonym momencie. Sekcja składa się ze współdzielonych zasobów danych, do których dostęp były wymagane przez inne procesy.

  • Wejście do sekcji krytycznej jest obsługiwane przez funkcję wait () i jest reprezentowane jako P ().
  • Wyjście z krytycznej sekcji jest kontrolowane przez funkcję signal (), oznaczoną jako V ().

W sekcji krytycznej można wykonać tylko jeden proces. Inne procesy, oczekujące na wykonanie swojej sekcji krytycznej, muszą poczekać, aż bieżący proces zakończy swoje wykonanie.

Reguły dla sekcji krytycznej

Sekcja krytyczna musi egzekwować wszystkie trzy zasady:

  • Wzajemne wykluczenie: Wzajemne wykluczenie to specjalny typ binarnego semafora, który służy do kontrolowania dostępu do współdzielonego zasobu. Zawiera mechanizm dziedziczenia priorytetów, aby uniknąć problemów z rozszerzoną inwersją priorytetów. Nie więcej niż jeden proces może być wykonywany w jego krytycznej sekcji naraz.
  • Postęp: To rozwiązanie jest używane, gdy nikogo nie ma w sekcji krytycznej, a ktoś chce. Następnie procesy, których nie ma w sekcji przypomnienia, powinny zdecydować, kto powinien wejść, w skończonym czasie.
  • Oczekiwanie związane: gdy proces żąda dostępu do sekcji krytycznej, istnieje określony limit liczby procesów, które mogą dostać się do sekcji krytycznej. Tak więc, gdy limit zostanie osiągnięty, system musi zezwolić na żądanie procesu, aby dostać się do jego krytycznej sekcji.

Rozwiązania dla sekcji krytycznej

W synchronizacji procesów główną rolę odgrywa sekcja krytyczna, która wymaga rozwiązania problemu.

Oto kilka powszechnie stosowanych metod rozwiązywania problemu z sekcjami krytycznymi.

Rozwiązanie Petersona

Rozwiązanie Petersona jest szeroko stosowanym rozwiązaniem problemów z przekrojami krytycznymi. Algorytm ten został opracowany przez informatyka Petersona, dlatego nazwano go rozwiązaniem Petersona.

W tym rozwiązaniu, gdy proces jest wykonywany w stanie krytycznym, drugi proces wykonuje tylko pozostałą część kodu i może się zdarzyć odwrotnie. Ta metoda pomaga również upewnić się, że tylko jeden proces jest uruchamiany w sekcji krytycznej w określonym czasie.

Przykład

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Załóżmy, że istnieje N procesów (P1, P2,… PN) i każdy proces w pewnym momencie wymaga wejścia do sekcji krytycznej
  • Utrzymywana jest tablica FLAG [] o rozmiarze N, która domyślnie ma wartość fałsz. Tak więc za każdym razem, gdy proces wymaga wejścia do sekcji krytycznej, musi ustawić swoją flagę jako true. Na przykład, jeśli Pi chce wejść, ustawi FLAG [i] = TRUE.
  • Inna zmienna o nazwie TURN wskazuje numer procesu, który aktualnie oczekuje na wejście do CS.
  • Proces, który wchodzi do sekcji krytycznej podczas wychodzenia, zmieni TURN na inny numer z listy gotowych procesów.
  • Przykład: tura wynosi 2, wtedy P2 wchodzi do sekcji krytycznej i wychodząc z tury = 3, a zatem P3 wyrywa się z pętli oczekiwania.

Sprzęt do synchronizacji

Czasami problemy sekcji krytycznej są również rozwiązywane sprzętowo. Niektóre systemy operacyjne oferują funkcję blokady, w której proces uzyskuje blokadę po wejściu do sekcji krytycznej i zwalnia blokadę po jej opuszczeniu.

Kiedy więc inny proces próbuje wejść do sekcji krytycznej, nie będzie mógł wejść, ponieważ jest zablokowany. Może to zrobić tylko wtedy, gdy jest wolny, uzyskując sam zamek.

Mutex Locks

Synchronizacja sprzętu nie jest prostą metodą do wdrożenia dla wszystkich, dlatego wprowadzono również ścisłą metodę oprogramowania znaną jako Mutex Locks.

W tym podejściu w sekcji wejściowej kodu uzyskuje się LOCK nad krytycznymi zasobami używanymi wewnątrz sekcji krytycznej. W sekcji wyjściowej ta blokada jest zwolniona.

Rozwiązanie semafora

Semafor to po prostu zmienna nieujemna i współdzielona między wątkami. Jest to kolejny algorytm lub rozwiązanie problemu z sekcją krytyczną. Jest to mechanizm sygnalizacyjny i wątek oczekujący na semafor, który może być sygnalizowany przez inny wątek.

Wykorzystuje dwie operacje atomowe, 1) czekaj i 2) sygnał do synchronizacji procesu.

Przykład

WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;

Podsumowanie:

  • Synchronizacja procesów to zadanie polegające na koordynowaniu wykonywania procesów w taki sposób, aby żadne dwa procesy nie miały dostępu do tych samych współdzielonych danych i zasobów.
  • Cztery elementy sekcji krytycznej to 1) sekcja wejściowa 2) sekcja krytyczna 3) sekcja wyjściowa 4) sekcja przypominająca
  • Sekcja krytyczna to segment kodu, do którego można uzyskać dostęp za pomocą procesu sygnalizacyjnego w określonym momencie.
  • Trzy zasady obowiązkowe, które muszą być egzekwowane przez sekcję krytyczną, to: 1) Wzajemne wykluczenie 2) Rozwiązanie procesowe 3) Oczekiwanie związane
  • Wzajemne wykluczanie to specjalny rodzaj semafora binarnego, który służy do kontrolowania dostępu do współdzielonych zasobów.
  • Rozwiązanie procesowe jest używane, gdy nikogo nie ma w sekcji krytycznej, a ktoś chce.
  • W rozwiązaniu związanym z oczekiwaniem po tym, jak proces zażąda dostępu do swojej sekcji krytycznej, istnieje limit liczby innych procesów, które mogą dostać się do sekcji krytycznej.
  • Rozwiązanie Petersona jest szeroko stosowanym rozwiązaniem problemów z przekrojami krytycznymi.
  • Problemy sekcji krytycznej są również rozwiązywane poprzez synchronizację sprzętu
  • Sprzęt do synchronizacji nie jest prostą metodą wdrożenia dla wszystkich, dlatego wprowadzono również ścisłą metodę oprogramowania znaną jako Mutex Locks.
  • Semafor to kolejny algorytm lub rozwiązanie problemu sekcji krytycznej.