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.
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.
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.
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.
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:
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