Czym jest Semaphore? Liczenie, typy binarne z przykładem

Czym jest Semaphore?

Semaphore jest po prostu zmienną, która jest nieujemna i współdzielona między wątkami. Semafor jest mechanizmem sygnalizacyjnym, a wątek, który czeka na semafor, może być sygnalizowany przez inny wątek. Używa dwóch operacji atomowych: 1) Wait i 2) Signal do synchronizacji procesów.

Semafor umożliwia lub uniemożliwia dostęp do zasobu, w zależności od jego konfiguracji.

Charakterystyka Semaphore

Oto charakterystyka semafora:

  • Jest to mechanizm, który można wykorzystać w celu zapewnienia synchronizacji zadań.
  • Jest to mechanizm synchronizacji niskiego poziomu.
  • Semaphore zawsze będzie zawierać nieujemną wartość całkowitą.
  • Semaphore można zaimplementować za pomocą operacji testowych i przerwań, które należy wykonać za pomocą deskryptorów plików.

Rodzaje Semaphores

Istnieją dwa popularne rodzaje semaforów

  • Liczenie semaforów
  • Semafory binarne.

Liczenie Semaphores

Ten typ Semaphore używa licznika, który pomaga w wielokrotnym nabyciu lub zwolnieniu zadania. Jeśli początkowy licznik = 0, semafor zliczający powinien zostać utworzony w stanie niedostępnym.

Liczenie Semaphores
Liczenie Semaphores

Jeśli jednak liczba wynosi > 0, semafor jest tworzony w stanie dostępnym, a liczba posiadanych przez niego tokenów jest równa jego liczbie.

Binarna Semaphores

Semafory binarne są dość podobne do semaforów zliczających, ale ich wartość jest ograniczona do 0 i 1. W tym typie semafora operacja oczekiwania działa tylko wtedy, gdy semafor = 1, a operacja sygnału kończy się powodzeniem, gdy semafor = 0. Jest to łatwiejsze do zaimplementowania niż semafory zliczające.

Binarna Semaphores

Binarna Semaphores

Przykład Semaphore

Poniższy program jest implementacją krok po kroku polegającą na użyciu i deklaracji semafora.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Poczekaj i Signal Operaw Semaphores

Obie te operacje służą do realizacji synchronizacja procesówCelem tej operacji semaforowej jest uzyskanie wzajemnego wykluczenia.

Poczekaj na Operacja

Ten typ operacji semaforowej pomaga kontrolować wprowadzanie zadania do sekcji krytycznej. Jednakże, jeśli wartość wait jest dodatnia, wówczas wartość argumentu wait X jest zmniejszana. W przypadku wartości ujemnej lub zerowej, żadna operacja nie jest wykonywana. Jest to również nazywane operacją P(S).

Po zmniejszeniu wartości semafora, która staje się ujemna, polecenie jest wstrzymywane do czasu spełnienia wymaganych warunków.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal działanie

Ten typ Semaphore operacja służy do kontrolowania wyjścia zadania z sekcji krytycznej. Pomaga zwiększyć wartość argumentu o 1, co jest oznaczane jako V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Liczenie Semaphore kontra Binarny Semaphore

Oto kilka głównych różnic między zliczaniem a semaforem binarnym:

Liczenie Semaphore Binarna Semaphore
Żadnego wzajemnego wykluczania Wzajemne wykluczenie
Dowolna wartość całkowita Wartość tylko 0 i 1
Więcej niż jedno gniazdo Tylko jedno gniazdo
Podaj zestaw procesów Posiada mechanizm wzajemnego wykluczania.

Różnica pomiędzy Semaphore kontra Mutex

Parametry Semaphore Mutex
Mechanizm Jest to rodzaj mechanizmu sygnalizacyjnego. Jest to mechanizm blokujący.
DataType Semaphore jest zmienną całkowitą. Mutex to tylko obiekt.
Modyfikacja Operacje oczekiwania i sygnału mogą modyfikować semafor. Jest modyfikowany tylko przez proces, który może zażądać lub zwolnić zasób.
Zarządzanie zasobami Jeśli żaden zasób nie jest wolny, proces wymaga zasobu, który powinien wykonać operację wait. Powinien czekać, aż liczba semaforów będzie większa niż 0. Jeśli jest zablokowany, proces musi poczekać. Proces powinien być umieszczony w kolejce. Dostęp do tego należy uzyskać tylko wtedy, gdy muteks jest odblokowany.
Wątek Możesz mieć wiele wątków programu. W mutexie można mieć wiele wątków programu, ale nie jednocześnie.
Własność Wartość można zmienić w dowolnym procesie zwalniającym lub uzyskującym zasób. Blokadę obiektu zwalnia tylko proces, który uzyskał na nim blokadę.
rodzaje Rodzaje Semaphore zliczają semafory i semafory binarne i Mutex nie ma podtypów.
Operacja Semaphore wartość jest modyfikowana za pomocą operacji wait() i signal(). Obiekt Mutex jest zablokowany lub odblokowany.
Zajętość zasobów Jest zajęty, jeżeli wszystkie zasoby są wykorzystywane, a proces żądający zasobu wykonuje operację wait() i blokuje się do momentu, aż liczba semaforów stanie się >1. W przypadku, gdy obiekt jest już zablokowany, proces żądający zasobów czeka i zostaje umieszczony w kolejce systemu przed zwolnieniem blokady.

Zalety Semaphores

Oto zalety/korzyści korzystania Semaphore:

  • Umożliwia więcej niż jednemu wątkowi dostęp do sekcji krytycznej
  • Semaphoresą niezależne od maszyny.
  • Semaphores są zaimplementowane w niezależnym od maszyny kodzie mikrojądra.
  • Nie pozwalają wielu procesom wejść do sekcji krytycznej.
  • Ponieważ w semaforze jest zajęte oczekiwanie, nigdy nie dochodzi do marnowania czasu i zasobów procesu.
  • Są niezależne od maszyny i powinny być uruchamiane w niezależnym od maszyny kodzie mikrojądra.
  • Umożliwiają elastyczne zarządzanie zasobami.

Wady semaforów

Oto wady/wady semafora

  • Jednym z największych ograniczeń semafora jest inwersja priorytetów.
  • System operacyjny musi śledzić wszystkie wywołania semafora oczekującego i sygnalizującego.
  • Ich użycie nigdy nie jest egzekwowane, ale jest to wyłącznie konwencja.
  • Aby uniknąć blokad w semaforze, polecenia Wait i Signal operacje muszą być wykonywane w odpowiedniej kolejności.
  • Semaphore programowanie jest skomplikowane, więc są szanse, że nie dojdzie do wzajemnego wykluczenia.
  • Nie jest to również praktyczna metoda do stosowania na dużą skalę, ponieważ ich użycie prowadzi do utraty modułowości.
  • Semaphore jest bardziej podatny na błędy programisty.
  • Może to spowodować impas lub naruszenie wzajemnego wykluczenia z powodu błędu programisty.

Podsumowanie

  • Semaphore jest definiowana jako zmienna, która nie jest ujemna i jest współdzielona pomiędzy wątkami.
  • Jest to mechanizm, który można wykorzystać w celu zapewnienia synchronizacji zadań.
  • Semafor zliczający wykorzystuje licznik, który pomaga wielokrotnie wykonać lub zwolnić zadanie.
  • Semafory binarne są bardzo podobne do semaforów zliczających, ale ich wartość jest ograniczona do 0 i 1.
  • Operacja oczekiwania pomaga kontrolować wprowadzanie zadania do sekcji krytycznej
  • Signal operacja semafora służy do kontrolowania wyjścia zadania z sekcji krytycznej
  • Liczenie Semaphore nie ma wzajemnego wykluczenia, podczas gdy Binarny Semaphore ma wzajemne wykluczenie
  • Semaphore oznacza mechanizm sygnalizacyjny, podczas gdy Mutex jest mechanizmem blokującym
  • Semaphore umożliwia więcej niż jednemu wątkowi dostęp do sekcji krytycznej
  • Jednym z największych ograniczeń semafora jest inwersja priorytetów.