Co to jest semafor? Binarne, typy liczenia z przykładem

Spisie treści:

Anonim

Co to jest semafor?

Semafor to po prostu zmienna nieujemna i współdzielona między wątkami. Semafor jest mechanizmem sygnalizacyjnym, a wątek oczekujący na semafor może być sygnalizowany przez inny wątek. Wykorzystuje dwie operacje atomowe, 1) czekaj i 2) sygnał do synchronizacji procesu.

Semafor zezwala lub nie zezwala na dostęp do zasobu, w zależności od konfiguracji.

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

  • Charakterystyka Semafora
  • Co to jest semafor?
  • Rodzaje semaforów
  • Przykład semafora
  • Operacje oczekiwania i sygnalizacji w semaforach
  • Semafor liczący a semafor binarny
  • Różnica między Semaphore a Mutex
  • Zalety semaforów
  • Wada semaforów

Charakterystyka Semafora

Tutaj są charakterystyczne dla semafora:

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

Rodzaje semaforów

Są to dwa popularne rodzaje semaforów

  • Liczenie semaforów
  • Semafory binarne.

Liczenie semaforów

Ten typ semafora używa licznika, który pomaga wielokrotnie zdobyć lub zwolnić zadanie. Jeśli początkowa liczba = 0, semafor zliczający powinien zostać utworzony w stanie niedostępnym.

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

Semafory binarne

Semafory binarne są dość podobne do semaforów zliczających, ale ich wartość jest ograniczona do 0 i 1. W tego typu semaforze operacja oczekiwania działa tylko wtedy, gdy semafor = 1, a operacja na sygnale kończy się pomyślnie, gdy semafor = 0. implementować niż liczenie semaforów.

Przykład semafora

Poniższy program to implementacja krok po kroku, polegająca na użyciu i deklaracji semafora.

Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;

Operacje oczekiwania i sygnalizacji w semaforach

Obie te operacje służą do realizacji synchronizacji procesów. Celem tej operacji semafora jest uzyskanie wzajemnego wykluczenia.

Poczekaj na operację

Ten typ operacji semafora pomaga kontrolować wprowadzanie zadania do sekcji krytycznej. Jeśli jednak wartość wait jest dodatnia, to wartość argumentu wait X jest zmniejszana. W przypadku wartości ujemnej lub zerowej żadna operacja nie jest wykonywana. Nazywa się to również 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--;}

Działanie sygnału

Ten typ operacji semafora 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++;}

Semafor liczący a semafor binarny

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

Liczenie semaforów Semafor binarny
Brak wzajemnego wykluczenia Wzajemne wykluczenie
Dowolna wartość całkowita Wartość tylko 0 i 1
Więcej niż jeden slot Tylko jeden slot
Podaj zestaw procesów Posiada mechanizm wzajemnego wykluczania.

Różnica między Semaphore a Mutex

Parametry Semafor Mutex
Mechanizm Jest to rodzaj mechanizmu sygnalizacyjnego. Jest to mechanizm blokujący.
Typ danych Semafor to zmienna całkowita. Mutex to tylko przedmiot.
Modyfikacja Operacje oczekiwania i sygnału mogą modyfikować semafor. Jest modyfikowany tylko przez proces, który może zażądać zasobu lub go zwolnić.
Zarządzanie zasobami Jeśli żaden zasób nie jest wolny, proces wymaga zasobu, który powinien wykonać operację oczekiwania. Powinien poczekać, aż liczba semaforów będzie większa niż 0. Jeśli jest zablokowany, proces musi czekać. Proces powinien znajdować się w kolejce. Dostęp do tego należy uzyskać tylko wtedy, gdy mutex jest odblokowany.
Wątek Możesz mieć wiele wątków programu. Możesz mieć wiele wątków programu w muteksie, ale nie jednocześnie.
Własność Wartość można zmienić poprzez zwolnienie lub uzyskanie zasobu w dowolnym procesie. Blokada obiektu jest zwalniana tylko przez proces, który uzyskał na nim blokadę.
Rodzaje Typy semaforów to semafor liczący i semafor binarny oraz Mutex nie ma podtypów.
Operacja Wartość semafora jest modyfikowana za pomocą operacji wait () i signal (). Obiekt mutex jest zablokowany lub odblokowany.
Zajęcie zasobów Jest zajęty, jeśli wszystkie zasoby są używane, a proces żądający zasobu wykonuje operację wait () i blokuje się, aż liczba semaforów osiągnie wartość> 1. W przypadku, gdy obiekt jest już zablokowany, proces żądający zasobów czeka i jest umieszczany w kolejce przez system przed zwolnieniem blokady.

Zalety semaforów

Oto zalety / zalety korzystania z Semaphore:

  • Umożliwia dostęp do sekcji krytycznej więcej niż jednemu wątkowi
  • Semafory są niezależne od komputera.
  • Semafory są implementowane w niezależnym od maszyny kodzie mikrojądra.
  • Nie pozwalają na wejście wielu procesów do sekcji krytycznej.
  • Ponieważ jest zajęty czekaniem w semaforze, nigdy nie dochodzi do marnotrawstwa czasu i zasobów procesu.
  • Są niezależne od komputera i powinny być uruchamiane w niezależnym od maszyny kodzie mikrojądra.
  • Pozwalają na elastyczne zarządzanie zasobami.

Wada semaforów

Oto wady / wady semafora

  • Jednym z największych ograniczeń semafora jest inwersja priorytetu.
  • System operacyjny musi śledzić wszystkie wywołania, aby czekać i sygnalizować semafor.
  • Ich użycie nigdy nie jest egzekwowane, ale jest to tylko konwencją.
  • Aby uniknąć zakleszczeń w semaforze, operacje Wait i Signal wymagają wykonania we właściwej kolejności.
  • Programowanie semaforów jest skomplikowane, więc są szanse, że nie dojdzie do wzajemnego wykluczenia.
  • Nie jest to również praktyczna metoda do zastosowań na dużą skalę, ponieważ ich stosowanie prowadzi do utraty modułowości.
  • Semafor jest bardziej podatny na błąd programisty.
  • Może to spowodować zakleszczenie lub naruszenie zasady wzajemnego wykluczania z powodu błędu programisty.

Podsumowanie:

  • Semafor jest definiowany jako zmienna nieujemna i współdzielona między wątkami.
  • Jest to mechanizm, który można wykorzystać do zapewnienia synchronizacji zadań.
  • Semafor liczący korzysta z licznika, który pomaga wielokrotnie pozyskiwać lub zwalniać zadanie.
  • Semafory binarne są dość podobne do semaforów liczących, ale ich wartość jest ograniczona do 0 i 1.
  • Operacja oczekiwania pomaga kontrolować wprowadzanie zadania do sekcji krytycznej
  • Operacja semafora sygnałowego służy do kontrolowania wyjścia zadania z krytycznej sekcji
  • Semafor liczący nie ma wzajemnego wykluczenia, podczas gdy Semafor binarny ma wzajemne wykluczenie
  • Semafor to mechanizm sygnalizacyjny, podczas gdy Mutex to mechanizm blokujący
  • Semafor umożliwia dostęp do sekcji krytycznej więcej niż jednemu wątkowi
  • Jednym z największych ograniczeń semafora jest inwersja priorytetu.