Mutex vs Semafor

zgodnie z terminologią systemu operacyjnego, mutex i semafory są zasobami jądra, które zapewniają usługi synchronizacji, zwane również prymitywami synchronizacji. Synchronizacja procesów odgrywa ważną rolę w utrzymaniu spójności udostępnianych danych. Zarówno oprogramowanie, jak i rozwiązania sprzętowe są dostępne do obsługi krytycznych problemów z sekcjami. Ale rozwiązania sprzętowe dla krytycznych problemów sekcji są dość trudne do wdrożenia. Mutex i Semafor zapewniają usługi synchronizacji, ale nie są one takie same.

Co To jest Mutex?

Mutex jest obiektem wzajemnego wykluczenia, który synchronizuje dostęp do zasobu. Jest tworzony z unikalną nazwą na początku programu. Mechanizm blokujący mutex zapewnia, że tylko jeden wątek może uzyskać mutex i wejść do sekcji krytycznej. Ten wątek uwalnia mutex tylko wtedy, gdy wychodzi z sekcji krytycznej.

Mutex vs Semafor

jest to specjalny typ binarnego semafora używanego do kontrolowania dostępu do udostępnionego zasobu. Zawiera mechanizm dziedziczenia priorytetów, aby uniknąć rozszerzonych problemów z inwersją priorytetów. Pozwala to na utrzymanie bieżących zadań o wyższym priorytecie w stanie zablokowanym przez jak najkrótszy czas. Jednak dziedziczenie priorytetów nie koryguje inwersji priorytetów, a jedynie minimalizuje jej efekt.

przykład

jest to pokazane za pomocą poniższego przykładu,

użycie Mutex

mutex zapewnia wzajemne wykluczenie, zarówno producenta, jak i konsumenta, który może mieć klucz (mutex) i kontynuować swoją pracę. Dopóki producent wypełnia bufor, użytkownik musi czekać i vice versa. W Mutex lock cały czas tylko jeden wątek może pracować z całym buforem.

podczas uruchamiania programu żąda on od systemu utworzenia obiektu mutex dla danego zasobu. System wytworzy obiekt mutex o unikalnej nazwie lub ID. Ilekroć wątek programu chce użyć zasobu, zajmuje blokadę na obiekcie mutex, wykorzystuje zasób i po użyciu zwalnia blokadę na obiekcie mutex. NastÄ ™ pny proces moĹźe uzyskaÄ ‡ blokadÄ ™ obiektu mutex.

w międzyczasie proces uzyskał blokadę obiektu mutex i żaden inny wątek ani proces nie może uzyskać dostępu do tego zasobu. Jeśli obiekt mutex jest już zablokowany, proces chcący uzyskać blokadę obiektu mutex musi czekać i jest kolejkowany przez system, aż obiekt mutex zostanie odblokowany.

zalety Mutex

oto następujące zalety mutex, takie jak:

  • Mutex to po prostu proste zamki uzyskiwane przed wejściem do jego sekcji krytycznej, a następnie jej zwolnieniem.
  • ponieważ tylko jeden wątek znajduje się w sekcji krytycznej w danym momencie, nie ma warunków wyścigu, a dane zawsze pozostają spójne.

wady Mutexu

Mutex ma również pewne wady, takie jak:

  • jeśli wątek uzyska blokadę i przejdzie w stan uśpienia lub zostanie wycofany, drugi wątek może nie iść do przodu. Może to prowadzić do głodu.
  • nie można go zablokować ani Odblokować z innego kontekstu niż ten, który go nabył.
  • tylko jeden wątek powinien być dozwolony w sekcji krytycznej naraz.
  • normalna implementacja może prowadzić do stanu zajętego oczekiwania, co marnuje czas procesora.

Co To jest Semafor?

Semafor jest po prostu zmienną, która jest nieujemna i współdzielona między wątkami. SEMAFOR jest mechanizmem sygnalizacyjnym, a inny wątek może sygnalizować wątek, który czeka na semaforze.

Mutex vs Semafor

SEMAFOR wykorzystuje dwie operacje atomowe,

1. Wait: operacja wait zmniejsza wartość argumentu s, jeśli jest dodatnia. Jeśli S jest ujemne lub zerowe, wtedy nie jest wykonywana żadna operacja.

2. Sygnał do synchronizacji procesu: operacja sygnału zwiększa wartość jego argumentu S.

SEMAFOR pozwala lub odrzuca dostęp do zasobu, w zależności od tego, jak jest skonfigurowany.

zastosowanie semafora

w przypadku pojedynczego bufora możemy rozdzielić bufor 4 KB na cztery bufory po 1 KB. SEMAFOR może być powiązany z tymi czterema buforami, umożliwiając użytkownikom i producentom jednoczesną pracę nad różnymi buforami.

typy semaforów

semafory wyróżnia system operacyjny w dwóch kategoriach licząc semafory i semafory binarne.

1. Liczenie semafora: wartość s semafora jest inicjalizowana na ilość zasobów obecnych w systemie. Za każdym razem, gdy proces chce uzyskać dostęp do zasobu, wykonuje operację wait()na semaforze i zmniejsza wartość semafora o jeden. Kiedy uwalnia zasób, wykonuje operację signal () na semaforze i zwiększa wartość semafora o jeden.

gdy liczba semaforów wynosi 0, oznacza to, że procesy zajmują wszystkie zasoby. Proces musi użyć zasobu, gdy liczba semaforów wynosi 0. Wykonuje operację wait () I zostaje zablokowana, dopóki wartość semafora nie stanie się większa niż 0.

 Mutex vs Semafor

2. SEMAFOR binarny: wartość semafora mieści się w zakresie od 0 do 1. Jest podobny do zamka mutex, ale mutex jest mechanizmem blokującym, podczas gdy SEMAFOR jest mechanizmem sygnalizacyjnym. W Semaforze binarnym, jeśli proces chce uzyskać dostęp do zasobu, wykonuje operację wait () na semaforze i zmniejsza wartość semafora z 1 do 0. Kiedy zwalnia zasób, wykonuje operację signal () na semaforze i zwiększa jego wartość do 1. Załóżmy, że SEMAFOR ma wartość 0, a proces chce uzyskać dostęp do zasobu. W takim przypadku wykonuje operację wait () i blokuje się, dopóki bieżący proces wykorzystujący zasoby nie zwolni zasobu.

Mutex vs Semafor

zalety semafora

oto następujące zalety semafora, takie jak:

  • umożliwia dostęp do sekcji krytycznej więcej niż jednemu wątkowi.
  • semafory są niezależne od maszyny.
  • semafory są zaimplementowane w niezależnym od maszyny kodzie mikrokernela.
  • nie pozwalają wielu procesom wejść do sekcji krytycznej.
  • ponieważ SEMAFOR jest zajęty i czeka, nigdy nie marnuje czasu i zasobów procesu.
  • są one niezależne od maszyny, które powinny być uruchamiane w kodzie mikrokernela niezależnym od maszyny.
  • umożliwiają elastyczne zarządzanie zasobami.

wady semaforów

semafory mają również pewne wady, takie jak:

  • jednym z największych ograniczeń semafora jest inwersja priorytetów.
  • system operacyjny musi śledzić wszystkie połączenia do oczekiwania i semafora sygnałowego.
  • ich użycie nigdy nie jest egzekwowane, ale jest tylko konwencją.
  • operacje Wait i Signal wymagają wykonania w odpowiedniej kolejności, aby uniknąć impasów w Semaforze.
  • programowanie semaforów jest metodą złożoną, więc są szanse na nieosiągnięcie wzajemnego wykluczenia.
  • nie jest to również praktyczna metoda stosowania na dużą skalę, ponieważ ich użycie prowadzi do utraty modułowości.
  • Semafor jest bardziej podatny na błąd programisty
  • i może spowodować impas lub naruszenie wzajemnego wykluczenia z powodu błędu programisty.

różnica między semaforem a Mutexem

podstawowa różnica między semaforem a mutexem polega na tym, że SEMAFOR jest mechanizmem sygnalizacyjnym, tzn. procesy wykonują operacje wait() I signal (), aby wskazać, czy pobierają, czy zwalniają zasób. W przeciwieństwie do tego, mutex jest mechanizmem blokującym, a proces musi uzyskać blokadę na obiekcie mutex, jeśli chce zdobyć zasób. Oto kilka innych różnic między semaforem a muteksem, takich jak:

 Mutex vs Semafor

terminy Mutex Semafor
definicja mutex jest mechanizmem blokującym, ponieważ aby uzyskać zasób, proces musi zablokować obiekt mutex, a podczas zwalniania procesu zasobów musi odblokować obiekt mutex. Semafor jest mechanizmem sygnalizacyjnym, ponieważ operacje wait() I signal() wykonywane na zmiennej SEMAFOR wskazują, czy proces pobiera lub zwalnia zasób.
istnienie mutex jest obiektem. Semafor jest zmienną całkowitą.
funkcja Mutex pozwala wielu wątkom programu na dostęp do jednego zasobu, ale nie jednocześnie. Semafor pozwala wielu wątkom programu na dostęp do skończonej instancji zasobów.
własność Blokada obiektu Mutex jest zwalniana tylko przez proces, który nabył blokadę obiektu mutex. wartość semafora może zostać zmieniona przez dowolny proces przejmujący lub zwalniający zasób, wykonując operacje wait() I signal ().
Skategoryzuj Mutex nie jest dalej skategoryzowany. SEMAFOR można podzielić na semafory liczące i binarne.
operacja obiekt mutex jest blokowany lub odblokowywany przez proces żądania lub zwalniania zasobu. wartość semafora jest modyfikowana za pomocą operacji wait() I signal() poza inicjalizacją.
zajęte zasoby jeśli obiekt mutex jest już zablokowany, to proces chcący pozyskać zasób czeka i zostanie zaszeregowany przez system do momentu zwolnienia zasobu i odblokowania obiektu mutex. przypuśćmy, że proces przejmuje wszystkie zasoby, a żaden zasób nie jest wolny. W takim przypadku proces chcący pozyskać zasób wykonuje operację wait () na zmiennej SEMAFOR i blokuje się, dopóki liczba semaforów nie stanie się większa niż 0.

Leave a Reply