Semafor kontra Mutex

wprowadzenie

proces systemu operacyjnego (OS) współdziała z innymi procesami działającymi w tym samym systemie, aby wykonać wspólne zadanie. Procesy, które współdziałają z innymi procesami, nazywane są procesami kooperacyjnymi.

w oparciu o strategie komunikacji międzyprocesowej (IPC) wdrażane przez proces, może on udostępniać swoją przestrzeń adresową innym procesom lub komunikować się poprzez wymianę wiadomości. W pierwszej technice kluczowe znaczenie ma Kontrola komunikacji, ponieważ oba procesy mają wspólną przestrzeń adresową.

to sterowanie komunikacją procesową jest znane jako synchronizacja. Bez odpowiedniej synchronizacji procesy mogą odczytywać przestarzałe dane lub nadpisywać inne dane procesowe.

Semafor i mutex to dwa mechanizmy, dzięki którym możemy zaimplementować synchronizację i zarządzać koordynacją procesów. W tym artykule przyjrzymy się tym dwóm narzędziom do synchronizacji i porównamy różne cechy.

zrozumienie sekcji krytycznej

zanim omówimy SEMAFOR i mutex, zrozumiemy problem sekcji krytycznej.

Załóżmy, że mamy system zawierający n procesów. Każdy z tych procesów ma segment kodu, w którym proces może przeprowadzić wspólną aktualizację zmiennej, aktualizację tabeli lub zapisać do pliku. Ten segment kodu jest określany jako krytyczna część procesu.

2.1. Charakterystyka problemu z sekcją krytyczną

podstawową cechą sekcji krytycznej jest to, że gdy proces rozpocznie wykonywanie swojej sekcji krytycznej, żaden inny proces nie może wykonać jej sekcji krytycznej. Oznacza to, że żadne dwa procesy nie mogą wykonywać swojej sekcji krytycznej jednocześnie. Ten krytyczny problem sekcji polega na zaprojektowaniu protokołu tak, aby procesy mogły korzystać ze współpracy.

każdy proces musi uzyskać pozwolenie na wejście do swojej sekcji krytycznej. Fragment kodu, który implementuje uprawnienia, jest znany jako sekcja wejścia. Podobnie, fragment kodu, który implementuje wyjście sekcji krytycznej, jest znany jako sekcja wyjścia.

2.2. Criteria of a critical-Section Problem

rozwiązanie problemu critical-section musi spełniać następujące kryteria:

  • wzajemne wykluczenie: jeśli proces wykonuje swoją sekcję krytyczną, to żaden inny proces nie może wykonać swojej sekcji krytycznej
  • postęp: jeśli żaden proces nie wykonuje swojej sekcji krytycznej, to inne procesy mogą zdecydować o wykonaniu swojej sekcji krytycznej. Na podstawie rozwiązania i wdrożenia wybierany jest proces, który może wykonać jego sekcję krytyczną. Warto zauważyć, że procesy mają możliwość przejścia do procesu selekcji w celu wykonania sekcji krytycznej
  • ograniczone oczekiwanie: powinno być ograniczone oczekiwanie na proces, gdy zażądał on sekcji wejścia sekcji krytycznej i ile razy inny proces wykonuje swoją sekcję krytyczną

blokady Mutex

istnieje kilka narzędzi do rozwiązania problemu sekcji krytycznej w systemie operacyjnym. Blokada mutex (mutex) lub mutex jest najprostszym rozwiązaniem. Używamy zamków mutex, aby chronić odcinek krytyczny i zapobiegać Warunkom wyścigu. Proces musi zdobyć blokadę, zanim uzyska dostęp do sekcji krytycznej, i zwalnia blokadę po zakończeniu wykonywania sekcji krytycznej.

3.1. Jak działa blokada Mutex?

te dwie funkcje do przejmowania i zwalniania blokad są reprezentowane przez dwie funkcje – acquire() i release(). Funkcja acquire przejmuje zamek, a zwolnienie zwalnia zamek. Blokada mutex ma zmienną logiczną, która decyduje, czy blokada jest dostępna, czy nie. Jeśli blokada jest dostępna, to metoda acquire () powiedzie się, a blokada jest uważana za niedostępną. Każdy proces próbujący uzyskać dostęp do niedostępnej blokady jest blokowany do momentu zwolnienia blokady.

poniższy pseudo-kod pokazuje metodę acquire ():

 Rendered by QuickLaTeX.com

poniższy pseudo-kod pokazuje metodę release ():

 Rendered by QuickLaTeX.com

3.2. Wady Mutexów

główną wadą blokady mutex jest to, że pozwala na spinlock wątku, jeśli blokada nie jest dostępna.

podczas gdy jeden wątek nabył blokadę i znajduje się w sekcji krytycznej, wszystkie inne wątki próbujące zdobyć blokadę są w pętli, w której wątek okresowo sprawdza, czy blokada jest dostępna. W ten sposób obraca się dla blokady i marnuje cykle procesora, które mogły być użyte przez inne wątki produktywnie.

jest to poważny problem w jednej maszynie CPU. Spinlock jest również znany jako zajęty czekanie, ponieważ wątek jest „zajęty” czekając na blokadę.

3.3. Zalety Muteksów

chociaż blokady mutex cierpią z powodu problemu spinlock, mają one przewagę. Jako proces spinlocks W CPU, eliminuje potrzebę przełączania kontekstu procesu, który w przeciwnym razie byłby wymagany.

przełączanie kontekstu procesu jest operacją czasochłonną, ponieważ wymaga zapisania statystyk procesu w bloku kontroli procesu (PCB) i przeładowania innego procesu do procesora. Istnieją procesory wieloprocesorowe, w których jeden proces może obracać się w jednym rdzeniu procesora, a drugi może wykonać ich krytyczną sekcję. Tak więc, spinlock o krótkim czasie trwania w niektórych scenariuszach jest bardziej użyteczny niż przełącznik kontekstu procesu.

Semafor

SEMAFOR to kolejne narzędzie, które zapewnia również funkcje synchronizacji podobne do blokad mutex, ale jest bardziej solidne i wyrafinowane.

SEMAFOR jest zmienną całkowitą, do której oprócz inicjalizacji dostęp mają dwie standardowe operacje atomowe-wait () I signal (). Operacja wait () jest określana jako P, a operacja signal () jest określana jako V.

przyjrzyjmy się operacji wait ():

 Rendered by QuickLaTeX.com

na koniec przyjrzyjmy się operacji signal() :

Rendered by QuickLaTeX.com

!

wszystkie operacje na wartość całkowitą semafora w wait () I signal () wykonywane atomicznie. Oznacza to, że gdy jeden proces modyfikuje wartość semafora, żaden inny proces nie może jednocześnie modyfikować tej samej wartości semafora.

na podstawie wartości semafora s dzieli się go na dwie kategorie – SEMAFOR liczący i Semafor binarny. Wartość semafora zliczającego może wynosić od 0 do skończonej wartości. Natomiast wartość semafora binarnego może wynosić od 0 do 1.

4.1. Liczenie semaforów

liczenie semaforów może kontrolować n liczbę instancji danego zasobu. Wyjaśnijmy SEMAFOR liczenia analogią.

Załóżmy, że istnieje Biblioteka z trzema salami do nauki i jest bibliotekarz, który ma dziesięć kluczy, każdy do innego pokoju. Gdy czytelnik wymaga dostępu do pokoju, musi uzyskać klucz do korzystania z pokoju. Po zakończeniu ich użytkowania czytelnik zwraca bibliotekarzowi klucz do pokoju. Gdy wszystkie pokoje są w użyciu, Nowy czytelnik musi poczekać, aż pokój zostanie opuszczony przez istniejącego czytelnika.

w powyższym przykładzie zasobem jest pokój i jest go dziesięć instancji. Instancje te są zarządzane za pomocą semafora zliczającego, który jest inicjowany za pomocą dziesięciu. Ta wartość semafora jest kontrolowana za pomocą metod wait() I signal () semafora. Poniższy diagram ilustruje to:

4.2. Semafory binarne

SEMAFOR binarny ma dwie możliwe wartości, 0 i 1. Jeżeli zasób zarządzany przez SEMAFOR jest dostępny, wtedy wartość semafora wynosi 1. W przeciwnym razie jest ustawiony na 0, co oznacza, że zasób nie jest dostępny.

SEMAFOR binarny ma taką samą funkcjonalność jak blokada mutex. Systemy, które nie obsługują blokad mutex, mogą wykorzystywać semafory binarne, aby osiągnąć tę samą funkcjonalność.

poniższy diagram ilustruje SEMAFOR binarny:

Semafor kontra Mutex

poniższa tabela podsumowuje ważne cechy semaforów i zamków mutex:

Rendered by QuickLaTeX.com

podsumowanie

w tym artykule omówiliśmy różne aspekty muteksów i semaforów.

najpierw omówiliśmy sekcję krytyczną i potrzebę mutex lub semafora do kontrolowania wykonywania sekcji krytycznej. Następnie rozmawialiśmy o mutexie i semaforze.

na koniec przedstawiliśmy porównanie semaforów i mutexów.

jeśli masz kilkuletnie doświadczenie w informatyce lub badaniach i jesteś zainteresowany dzieleniem się tym doświadczeniem ze społecznością, zapoznaj się z naszymi wytycznymi dotyczącymi wkładu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.