Mutex vs semafore

volgens de terminologie van het besturingssysteem zijn mutex en semaforen kernelbronnen die synchronisatiediensten leveren, ook synchronisatieprimitieven genoemd. Procesynchronisatie speelt een belangrijke rol bij het handhaven van de consistentie van gedeelde gegevens. Zowel de software als de hardware oplossingen zijn aanwezig voor het omgaan met kritieke sectie problemen. Maar hardware oplossingen voor kritieke sectie problemen zijn vrij moeilijk te implementeren. Mutex en semaphore bieden beide synchronisatiediensten, maar ze zijn niet hetzelfde.

Wat is Mutex?

Mutex is een object voor wederzijdse uitsluiting dat toegang tot een bron synchroniseert. Het is gemaakt met een unieke naam aan het begin van een programma. Het vergrendelingsmechanisme van mutex zorgt ervoor dat slechts één draad de mutex kan verwerven en de kritieke sectie kan betreden. Deze thread geeft de mutex alleen vrij wanneer deze in de kritieke sectie wordt afgesloten.

Mutex vs semafoor

het is een speciaal type binaire semafoor dat wordt gebruikt voor het beheren van toegang tot de gedeelde bron. Het omvat een Priority inheritance mechanisme om uitgebreide priority inversion problemen te voorkomen. Hiermee kunnen huidige taken met een hogere prioriteit zo kort mogelijk in de geblokkeerde toestand worden gehouden. Echter, priority inheritance corrigeert prioriteitsinversie niet, maar minimaliseert alleen het effect ervan.

voorbeeld

dit wordt getoond aan de hand van het volgende voorbeeld,

gebruik van Mutex

een mutex biedt wederzijdse uitsluiting, hetzij producent of consument die de sleutel (mutex) kan hebben en doorgaan met hun werk. Zolang de producent de buffer vult, moet de gebruiker wachten, en vice versa. In Mutex lock, de hele tijd, slechts een enkele thread kan werken met de gehele buffer.

wanneer een programma start, wordt het systeem verzocht een mutex-object aan te maken voor een bepaalde bron. Het systeem maakt het mutex object aan met een unieke naam of ID. Wanneer het programma thread wil de bron te gebruiken, het bezet lock op mutex object, maakt gebruik van de bron en na gebruik, geeft het lock op mutex object. Dan is het volgende proces is toegestaan om de lock te verwerven op het mutex object.

ondertussen heeft een proces de vergrendeling op het mutex-object verworven, en geen andere thread of proces kan toegang krijgen tot die bron. Als het mutex object Al vergrendeld is, moet het proces dat de vergrendeling op het mutex object wenst te verkrijgen wachten en wordt door het systeem in de wachtrij geplaatst totdat het mutex object ontgrendeld is.

voordelen van Mutex

hier zijn de volgende voordelen van mutex, zoals:

  • Mutex is gewoon eenvoudige sloten verkregen voor het invoeren van de kritische sectie en vervolgens het vrijgeven van het.
  • omdat er op een bepaald moment slechts één thread in zijn kritieke sectie is, zijn er geen racecondities en blijven de gegevens altijd consistent.

nadelen van Mutex

Mutex heeft ook enkele nadelen, zoals:

  • als een draad een slot verkrijgt en gaat slapen of wordt voorkomen, dan kan de andere draad niet vooruit bewegen. Dit kan leiden tot hongerdood.
  • het kan niet worden vergrendeld of ontgrendeld vanuit een andere context dan degene die het heeft verworven.
  • slechts één thread mag in het kritische gedeelte per keer worden toegestaan.
  • de normale implementatie kan leiden tot een drukke Wachttoestand, die CPU-tijd verspilt.

Wat is semafoor?

semafoor is gewoon een variabele die niet-negatief is en gedeeld wordt tussen threads. Een semafoor is een signaleringsmechanisme, en een andere thread kan een thread signaleren die op een semafoor wacht.

Mutex vs semafoor

een semafoor gebruikt twee atomaire bewerkingen,

1. Wacht: de wacht operatie verlaagt de waarde van zijn argument S als het positief is. Als s negatief of nul is, wordt geen bewerking uitgevoerd.

2. Signaal voor de proces synchronisatie: de signaalbewerking verhoogt de waarde van het argument S.

een semafoor staat of weigert toegang tot de bron, afhankelijk van hoe het is ingesteld.

gebruik van semafoor

in het geval van een enkele buffer, kunnen we de 4 KB buffer scheiden in vier buffers van 1 KB. Semafoor kan geassocieerd worden met deze vier buffers, waardoor gebruikers en producenten tegelijkertijd aan verschillende buffers kunnen werken.

typen semafoor

semafoor wordt door het besturingssysteem onderscheiden in twee categorieën die semafoor en binaire semafoor tellen.

1. Semafoor tellen: de waarde van de semafoor wordt geïnitialiseerd naar het aantal bronnen dat aanwezig is in het systeem. Wanneer een proces toegang wil krijgen tot de bron, voert het de wait()operatie uit op de semafoor en verlaagt de semafoor waarde met één. Wanneer het de bron loslaat, voert het de signal() operatie uit op de semafoor en verhoogt de semafoor waarde met één.

wanneer het aantal semaforen naar 0 gaat, betekent dit dat de processen alle bronnen bezetten. Een proces moet een bron gebruiken als het aantal semaforen 0 is. Het voert de wait () operatie uit en wordt geblokkeerd totdat de semafoor waarde groter wordt dan 0.

Mutex vs semafoor

2. Binaire semafoor: de waarde van een semafoor varieert tussen 0 en 1. Het is vergelijkbaar met mutex lock, maar mutex is een vergrendelingsmechanisme, terwijl de semafoor een signaleringsmechanisme is. In binaire semafoor, als een proces toegang wil krijgen tot de bron, voert het de wait() operatie uit op de semafoor en verlaagt de waarde van de semafoor van 1 naar 0. Wanneer het de bron loslaat, voert het een signal() operatie uit op de semafoor en verhoogt de waarde tot 1. Stel dat de waarde van de semafoor 0 is en een proces de bron wil benaderen. In dat geval voert het wait () – operatie uit en blokkeert het zichzelf tot het huidige proces waarbij de resources worden gebruikt, de resource loslaat.

Mutex vs semafoor

voordelen van semafoor

hier zijn de volgende voordelen van semafoor, zoals:

  • het laat meer dan één thread toe om toegang te krijgen tot de kritieke sectie.Semaforen zijn onafhankelijk van de machine.
  • semaforen worden geïmplementeerd in de machine-onafhankelijke code van de microkernel.
  • ze staan niet toe dat meerdere processen de kritische sectie binnenkomen.
  • omdat er druk is en wacht in de semafoor, is er nooit verspilling van procestijd en resources.
  • ze zijn machineonafhankelijk, wat moet worden uitgevoerd in de machineonafhankelijke code van de microkernel.
  • zij maken een flexibel beheer van middelen mogelijk.

nadeel van semaforen

semaforen hebben ook enkele nadelen, zoals:

  • een van de grootste beperkingen van een semafoor is prioriteitsinversie.
  • het besturingssysteem moet alle oproepen om te wachten en signaal semafoor bijhouden.
  • het gebruik ervan wordt nooit afgedwongen, maar alleen bij overeenkomst.
  • de wacht-en Signaalbewerkingen MOETEN in de juiste volgorde worden uitgevoerd om vastlopen in de semafoor te voorkomen.Semafoorprogrammering is een complexe methode, dus er is kans dat er geen sprake is van wederzijdse uitsluiting.
  • het is ook geen praktische methode voor grootschalig gebruik, aangezien het gebruik ervan leidt tot verlies van modulariteit.
  • semafoor is meer vatbaar voor programmeerfouten
  • , en het kan leiden tot een impasse of schending van wederzijdse uitsluiting als gevolg van programmeerfouten.

verschil tussen Mutex en semafoor

het basisverschil tussen semafoor en mutex is dat semafoor een signaalmechanisme is, dat wil zeggen dat processen wachten() en signaal() uitvoeren om aan te geven of ze de bron verwerven of vrijgeven. In tegenstelling, een mutex is een vergrendelingsmechanisme, en het proces moet het slot op een mutex object te verwerven als het wil de bron te verwerven. Hier zijn wat meer verschillen tussen semafoor en mutex, zoals:

Mutex vs semafoor

termen Mutex semafoor
definitie de mutex is een vergrendelingsmechanisme, om een bron te verkrijgen, moet een proces het mutex-object vergrendelen, en terwijl het vrijgeven van een bron-proces het mutex-object moet ontgrendelen. semafoor is een signaleringsmechanisme aangezien wacht () – en signaalbewerkingen die worden uitgevoerd op de semafoorvariabele aangeven of een proces de bron verwerft of loslaat.
bestaan een mutex is een object. semafoor is een integer variabele.
functie Mutex staat meerdere programma threads toe om toegang te krijgen tot een enkele bron, maar niet tegelijkertijd. semafoor staat meerdere programma threads toe om toegang te krijgen tot een eindige instantie van bronnen.
eigendom Mutex object lock wordt alleen vrijgegeven door het proces dat de lock op het mutex object heeft verworven. Semafoorwaarde kan worden gewijzigd door elk proces dat de bron verwerft of loslaat door de bewerking wait() en signal() uit te voeren.
categoriseren Mutex wordt niet verder gecategoriseerd. de semafoor kan worden gecategoriseerd in het tellen van de semafoor en de binaire semafoor.
operatie het mutex-object wordt vergrendeld of ontgrendeld door het proces van het aanvragen of vrijgeven van de bron. de Semafoorwaarde wordt gewijzigd met wait() En signal () behalve met initialisatie.
hulpbronnen bezet als een mutex-object Al vergrendeld is, dan wacht het proces dat Bron wil verwerven en wordt in de wachtrij geplaatst door het systeem totdat de bron wordt vrijgegeven en het mutex-object wordt ontgrendeld. stel dat het proces alle bronnen verwerft en geen bron vrij is. In dat geval, voert het proces dat resource wenst te verwerven wait() operatie uit op de semafoor variabele en blokkeert zichzelf tot de telling van de semafoor groter wordt dan 0.

Leave a Reply