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.