logo

Mutex vs Semaphore

I henhold til operativsystemterminologi er mutex og semaforer kjerneressurser som tilbyr synkroniseringstjenester, også kalt synkroniseringsprimitiver . Prosesssynkronisering spiller en viktig rolle for å opprettholde konsistensen til delte data. Både programvare- og maskinvareløsninger er til stede for å håndtere kritiske seksjonsproblemer. Men maskinvareløsninger for kritiske seksjonsproblemer er ganske vanskelige å implementere. Mutex og semafor tilbyr begge synkroniseringstjenester, men de er ikke de samme.

Hva er Mutex?

Mutex er et gjensidig ekskluderingsobjekt som synkroniserer tilgang til en ressurs. Den lages med et unikt navn ved starten av et program. Mutex-låsemekanismen sikrer at bare én tråd kan ta mutexen og gå inn i den kritiske delen. Denne tråden frigir kun mutex når den går ut i den kritiske delen.

Mutex vs Semaphore

Det er en spesiell type binær semafor som brukes for å kontrollere tilgang til den delte ressursen. Den inkluderer en prioritert arvemekanisme for å unngå problemer med utvidet prioritet inversjon. Den lar gjeldende oppgaver med høyere prioritet holdes i blokkert tilstand for kortest mulig tid. Prioritetsarv korrigerer imidlertid ikke prioritetsinversjon, men minimerer bare effekten.

Eksempel

Dette vises ved hjelp av følgende eksempel,

 wait (mutex); ..... Critical Section ..... signal (mutex); 

Bruk av Mutex

En mutex gir gjensidig ekskludering, enten produsent eller forbruker som kan ha nøkkelen (mutex) og fortsette med sitt arbeid. Så lenge produsenten fyller bufferen, må brukeren vente, og omvendt. I Mutex-lås kan hele tiden bare en enkelt tråd fungere med hele bufferen.

Når et program starter, ber det systemet om å lage et mutex-objekt for en gitt ressurs. Systemet oppretter mutex-objektet med et unikt navn eller ID. Når programtråden ønsker å bruke ressursen, opptar den lås på mutex-objekt, bruker ressursen og etter bruk frigjør den låsen på mutex-objekt. Deretter får neste prosess skaffe låsen på mutex-objektet.

I mellomtiden har en prosess skaffet seg låsen på mutex-objektet, og ingen annen tråd eller prosess kan få tilgang til den ressursen. Hvis mutex-objektet allerede er låst, må prosessen som ønsker å skaffe låsen på mutex-objektet vente og settes i kø av systemet til mutex-objektet er låst opp.

Fordeler med Mutex

Her er følgende fordeler med mutex, for eksempel:

  • Mutex er bare enkle låser oppnådd før du går inn i den kritiske delen og deretter slipper den.
  • Siden bare én tråd er i den kritiske delen til enhver tid, er det ingen løpsforhold, og data forblir alltid konsistente.

Ulemper med Mutex

Mutex har også noen ulemper, for eksempel:

  • Hvis en tråd får en lås og går i dvale eller blir forhåndsaktivert, kan det hende at den andre tråden ikke beveger seg fremover. Dette kan føre til sult.
  • Den kan ikke låses eller låses opp fra en annen kontekst enn den som kjøpte den.
  • Bare én tråd bør tillates i den kritiske delen om gangen.
  • Den normale implementeringen kan føre til en travel ventetilstand, noe som kaster bort CPU-tid.

Hva er semafor?

Semafor er ganske enkelt en variabel som er ikke-negativ og delt mellom tråder. En semafor er en signalmekanisme, og en annen tråd kan signalisere en tråd som venter på en semafor.

Mutex vs Semaphore

En semafor bruker to atomoperasjoner,

1. Vent: Venteoperasjonen reduserer verdien av argumentet S hvis det er positivt. Hvis S er negativ eller null, utføres ingen operasjon.

 wait(S) { while (S<=0); s--; } < pre> <p> <strong>2. Signal for the process synchronization:</strong> The signal operation increments the value of its argument S.</p> <pre> signal(S) { S++; } </pre> <p>A semaphore either allows or reject access to the resource, depending on how it is set up.</p> <h3>Use of Semaphore</h3> <p>In the case of a single buffer, we can separate the 4 KB buffer into four buffers of 1 KB. Semaphore can be associated with these four buffers, allowing users and producers to work on different buffers simultaneously.</p> <h3>Types of Semaphore</h3> <p>Semaphore is distinguished by the operating system in two categories <strong>Counting semaphore</strong> and <strong>Binary semaphore</strong> .</p> <p> <strong>1. Counting Semaphore:</strong> The semaphore S value is initialized to the <strong>number of resources</strong> present in the system. Whenever a process wants to access the resource, it performs <strong>the wait()</strong> operation on the semaphore and <strong>decrements</strong> the semaphore value by one. When it releases the resource, it performs <strong>the signal()</strong> operation on the semaphore and <strong>increments</strong> the semaphore value by one.</p> <p>When the semaphore count goes to 0, it means the processes occupy all resources. A process needs to use a resource when the semaphore count is 0. It executes the <strong>wait()</strong> operation and gets <strong>blocked</strong> until the semaphore value becomes greater than 0.</p> <img src="//techcodeview.com/img/operating-system/67/mutex-vs-semaphore-3.webp" alt="Mutex vs Semaphore"> <p> <strong>2. Binary semaphore:</strong> The value of a semaphore ranges between <strong>0</strong> and <strong>1</strong> . It is similar to mutex lock, but mutex is a locking mechanism, whereas the semaphore is a signaling mechanism. In binary semaphore, if a process wants to access the resource, it performs <strong>the wait()</strong> operation on the semaphore and decrements the value of the semaphore from 1 to 0. When it releases the resource, it performs a <strong>signal</strong> <strong>()</strong> operation on the semaphore and increments its value to 1. Suppose the value of the semaphore is 0 and a process wants to access the resource. In that case, it performs <strong>wait()</strong> operation and block itself till the current process utilizing the resources releases the resource.</p> <img src="//techcodeview.com/img/operating-system/67/mutex-vs-semaphore-4.webp" alt="Mutex vs Semaphore"> <h3>Advantages of Semaphore</h3> <p>Here are the following advantages of semaphore, such as:</p> <ul> <li>It allows more than one thread to access the critical section.</li> <li>Semaphores are machine-independent.</li> <li>Semaphores are implemented in the machine-independent code of the microkernel.</li> <li>They do not allow multiple processes to enter the critical section.</li> <li>As there is busy and waiting in semaphore, there is never wastage of process time and resources.</li> <li>They are machine-independent, which should be run in the machine-independent code of the microkernel.</li> <li>They allow flexible management of resources.</li> </ul> <h3>Disadvantage of Semaphores</h3> <p>Semaphores also have some disadvantages, such as:</p> <ul> <li>One of the biggest limitations of a semaphore is priority inversion.</li> <li>The operating system has to keep track of all calls to wait and signal semaphore.</li> <li>Their use is never enforced, but it is by convention only.</li> <li>The Wait and Signal operations require to be executed in the correct order to avoid deadlocks in semaphore.</li> <li>Semaphore programming is a complex method, so there are chances of not achieving mutual exclusion.</li> <li>It is also not a practical method for large scale use as their use leads to loss of modularity.</li> <li>Semaphore is more prone to programmer error</li> <li>, and it may cause deadlock or violation of mutual exclusion due to programmer error.</li> </ul> <h3>Difference between Mutex and Semaphore</h3> <p>The basic difference between semaphore and mutex is that semaphore is a signalling mechanism, i.e. processes perform wait() and signal() operation to indicate whether they are acquiring or releasing the resource. In contrast, a mutex is a locking mechanism, and the process has to acquire the lock on a mutex object if it wants to acquire the resource. Here are some more differences between semaphore and mutex, such as:</p> <img src="//techcodeview.com/img/operating-system/67/mutex-vs-semaphore-5.webp" alt="Mutex vs Semaphore"> <br> <table class="table"> <tr> <th>Terms</th> <th>Mutex</th> <th>Semaphore</th> </tr> <tr> <td>Definition</td> <td>The mutex is a locking mechanism, as to acquire a resource, a process needs to lock the mutex object, and while releasing a resource process has to unlock the mutex object.</td> <td>Semaphore is a signalling mechanism as wait() and signal() operations performed on the semaphore variable indicate whether a process is acquiring or releasing the resource.</td> </tr> <tr> <td>Existence</td> <td>A mutex is an object.</td> <td>Semaphore is an integer variable.</td> </tr> <tr> <td>Function</td> <td>Mutex allows multiple program threads to access a single resource but not simultaneously.</td> <td>Semaphore allows multiple program threads to access a finite instance of resources.</td> </tr> <tr> <td>Ownership</td> <td>Mutex object lock is released only by the process that has acquired the lock on the mutex object.</td> <td>Semaphore value can be changed by any process acquiring or releasing the resource by performing wait() and signal() operation.</td> </tr> <tr> <td>Categorize</td> <td>Mutex is not categorized further.</td> <td>The semaphore can be categorized into counting semaphore and binary semaphore.</td> </tr> <tr> <td>Operation</td> <td>The mutex object is locked or unlocked by the process of requesting or releasing the resource.</td> <td>Semaphore value is modified using wait() and signal() operation apart from initialization.</td> </tr> <tr> <td>Resources Occupied</td> <td>If a mutex object is already locked, then the process desiring to acquire resource waits and get queued by the system till the resource is released and the mutex object gets unlocked.</td> <td>Suppose the process acquires all the resources, and no resource is free. In that case, the process desiring to acquire resource performs wait() operation on semaphore variable and blocks itself till the count of semaphore become greater than 0.</td> </tr> </table> <hr></=0);>

En semafor enten tillater eller avviser tilgang til ressursen, avhengig av hvordan den er satt opp.

Bruk av semafor

Når det gjelder en enkelt buffer, kan vi separere 4 KB bufferen i fire buffere på 1 KB. Semafor kan assosieres med disse fire bufferne, slik at brukere og produsenter kan jobbe på forskjellige buffere samtidig.

Typer semafor

Semafor er kjennetegnet ved operativsystemet i to kategorier Telle semafor og Binær semafor .

1. Telle semafor: Semaforen S-verdien initialiseres til antall ressurser tilstede i systemet. Når en prosess ønsker å få tilgang til ressursen, utfører den ventetiden() operasjon på semaforen og reduseres semaforverdien med én. Når den frigjør ressursen, utfører den signalet() operasjon på semaforen og trinn semaforverdien med én.

Når semafortellingen går til 0, betyr det at prosessene opptar alle ressurser. En prosess må bruke en ressurs når semafortellingen er 0. Den utfører vente() operasjon og får blokkert til semaforverdien blir større enn 0.

Mutex vs Semaphore

2. Binær semafor: Verdien av en semafor varierer mellom 0 og 1 . Det ligner på mutex-lås, men mutex er en låsemekanisme, mens semaforen er en signalmekanisme. I binær semafor, hvis en prosess ønsker å få tilgang til ressursen, utfører den ventetiden() operasjon på semaforen og reduserer verdien av semaforen fra 1 til 0. Når den frigjør ressursen, utfører den en signal () operasjon på semaforen og øker dens verdi til 1. Anta at verdien til semaforen er 0 og en prosess ønsker å få tilgang til ressursen. I så fall presterer den vente() drift og blokker seg selv til den nåværende prosessen som bruker ressursene frigjør ressursen.

Mutex vs Semaphore

Fordeler med semafor

Her er følgende fordeler med semafor, for eksempel:

  • Den lar mer enn én tråd få tilgang til den kritiske delen.
  • Semaforer er maskinuavhengige.
  • Semaforer er implementert i den maskinuavhengige koden til mikrokjernen.
  • De tillater ikke flere prosesser å gå inn i den kritiske delen.
  • Siden det er travelt og venting i semafor, er det aldri sløsing med prosess tid og ressurser.
  • De er maskinuavhengige, som skal kjøres i den maskinuavhengige koden til mikrokjernen.
  • De tillater fleksibel forvaltning av ressurser.

Ulempen med semaforer

Semaforer har også noen ulemper, for eksempel:

  • En av de største begrensningene til en semafor er prioritert inversjon.
  • Operativsystemet må holde styr på alle anrop for å vente og signalisere semafor.
  • Bruken av dem blir aldri håndhevet, men det er kun ved konvensjon.
  • Vente- og signaloperasjonene må utføres i riktig rekkefølge for å unngå vranglås i semaforen.
  • Semaforprogrammering er en kompleks metode, så det er sjanser for ikke å oppnå gjensidig ekskludering.
  • Det er heller ikke en praktisk metode for bruk i stor skala da bruken fører til tap av modularitet.
  • Semafor er mer utsatt for programmeringsfeil
  • , og det kan forårsake dødlås eller brudd på gjensidig utestenging på grunn av programmeringsfeil.

Forskjellen mellom Mutex og Semafor

Den grunnleggende forskjellen mellom semafor og mutex er at semafor er en signaleringsmekanisme, det vil si at prosesser utfører wait() og signal() operasjoner for å indikere om de anskaffer eller frigir ressursen. I kontrast er en mutex en låsemekanisme, og prosessen må skaffe låsen på et mutex-objekt hvis den ønsker å skaffe ressursen. Her er noen flere forskjeller mellom semafor og mutex, for eksempel:

Mutex vs Semaphore
Vilkår Mutex Semafor
Definisjon Mutex er en låsemekanisme, ettersom for å skaffe en ressurs, må en prosess låse mutex-objektet, og mens en ressurs frigjøres, må den låse opp mutex-objektet. Semafor er en signalmekanisme ettersom wait() og signal() operasjoner utført på semaforvariabelen indikerer om en prosess anskaffer eller frigir ressursen.
Eksistens En mutex er et objekt. Semafor er en heltallsvariabel.
Funksjon Mutex lar flere programtråder få tilgang til en enkelt ressurs, men ikke samtidig. Semafor lar flere programtråder få tilgang til en begrenset forekomst av ressurser.
Eie Mutex-objektlåsen frigjøres kun av prosessen som har skaffet låsen på mutex-objektet. Semaforverdien kan endres ved en hvilken som helst prosess som anskaffer eller frigjør ressursen ved å utføre wait() og signal() operasjoner.
Kategoriser Mutex er ikke kategorisert ytterligere. Semaforen kan kategoriseres i tellende semafor og binær semafor.
Operasjon Mutex-objektet låses eller låses opp av prosessen med å be om eller frigi ressursen. Semaforverdien endres ved å bruke wait() og signal() operasjon bortsett fra initialisering.
Ressurser okkupert Hvis et mutex-objekt allerede er låst, venter prosessen som ønsker å skaffe ressurs og settes i kø av systemet til ressursen frigjøres og mutex-objektet låses opp. Anta at prosessen får alle ressursene, og ingen ressurs er gratis. I så fall utfører prosessen som ønsker å skaffe ressurs wait()-operasjon på semaforvariabel og blokkerer seg selv til antallet semaforer blir større enn 0.