Wat is Semaphore? Tellen, binaire typen met voorbeeld
Wat is Semaphore?
Semaphore is gewoon een variabele die niet-negatief is en gedeeld wordt tussen threads. Een semafoor is een signaleringsmechanisme, en een thread die wacht op een semafoor kan gesignaleerd worden door een andere thread. Het gebruikt twee atomaire bewerkingen, 1) Wait, en 2) Signal voor de processynchronisatie.
Een semafoor staat toegang tot de bron wel of niet toe, afhankelijk van hoe deze is ingesteld.
Een karaktereigenschap van Semaphore
Hier zijn kenmerkend voor een semafoor:
- Het is een mechanisme dat gebruikt kan worden om taken te synchroniseren.
- Het is een synchronisatiemechanisme op laag niveau.
- Semaphore zal altijd een niet-negatieve gehele waarde bevatten.
- Semaphore kan worden geïmplementeerd met behulp van testbewerkingen en interrupts, die moeten worden uitgevoerd met behulp van bestandsdescriptoren.
Types van Semaphores
De twee meest voorkomende soorten semaforen zijn
- Semaforen tellen
- Binaire semaforen.
Telling Semaphores
Dit soort Semaphore gebruikt een telling die helpt om de taak meerdere keren te verwerven of vrij te geven. Als de initiële telling = 0, moet de tellingsemafoor worden gemaakt in de onbeschikbare staat.
Als het aantal echter > 0 is, wordt de semafoor gemaakt in de beschikbare staat en is het aantal tokens gelijk aan het aantal.
binair Semaphores
De binaire semaforen lijken veel op tel-semaforen, maar hun waarde is beperkt tot 0 en 1. Bij dit type semafoor werkt de wachtbewerking alleen als semafoor = 1, en de signaalbewerking slaagt als semafoor = 0. Het is eenvoudiger te implementeren dan tel-semaforen.
Voorbeeld Semaphore
Het hieronder gegeven programma is een stapsgewijze implementatie, waarbij gebruik en declaratie van semafoor betrokken is.
Shared var mutex: semaphore = 1; Process i begin . . P(mutex); execute CS; V(mutex); . . End;
Wacht en Signal Operain Semaphores
Beide bewerkingen worden gebruikt om te implementeren proces synchronisatieHet doel van deze semafooroperatie is om wederzijdse uitsluiting te verkrijgen.
Wachten op Operatie
Dit type semafoorbewerking helpt u de invoer van een taak in de kritieke sectie te regelen. Als de waarde van wait echter positief is, wordt de waarde van het wait-argument X verlaagd. In het geval van een negatieve of nulwaarde wordt er geen bewerking uitgevoerd. Het wordt ook wel P(S)-bewerking genoemd.
Nadat de semafoorwaarde is verlaagd, die negatief wordt, wordt het commando uitgesteld totdat aan de vereiste voorwaarden is voldaan.
Copy CodeP(S) { while (S<=0); S--; }
Signal operatie
Dit soort Semaphore bewerking wordt gebruikt om de exit van een taak uit een kritieke sectie te regelen. Het helpt om de waarde van het argument met 1 te verhogen, wat wordt aangeduid als V(S).
Copy CodeP(S) { while (S>=0); S++; }
Telling Semaphore versus binair Semaphore
Hier zijn enkele belangrijke verschillen tussen tellen en binaire semafoor:
Telling Semaphore | binair Semaphore |
---|---|
Geen wederzijdse uitsluiting | Wederzijdse uitsluiting |
Elke gehele waarde | Waarde alleen 0 en 1 |
Meer dan één slot | Slechts één slot |
Zorg voor een reeks processen | Het heeft een mechanisme van wederzijdse uitsluiting. |
Verschil tussen Semaphore versus Mutex
Kenmerken | Semaphore | mutex |
---|---|---|
Mechanisme | Het is een soort signaalmechanisme. | Het is een vergrendelingsmechanisme. |
Data type | Semaphore is een geheeltallige variabele. | Mutex is slechts een object. |
Wijziging | De wacht- en signaalbewerkingen kunnen een semafoor wijzigen. | Het wordt alleen gewijzigd door het proces dat een hulpbron kan aanvragen of vrijgeven. |
resource management | Als er geen resource vrij is, dan vereist het proces een resource die de wait-bewerking moet uitvoeren. Het moet wachten tot de telling van de semafoor groter is dan 0. | Als het vergrendeld is, moet het proces wachten. Het proces moet in een wachtrij worden gehouden. Dit is alleen toegankelijk als de mutex ontgrendeld is. |
Draad | U kunt meerdere programmathreads hebben. | U kunt meerdere programmathreads in mutex hebben, maar niet tegelijkertijd. |
Eigendom | De waarde kan worden gewijzigd door elk proces dat de hulpbron vrijgeeft of verkrijgt. | Objectvergrendeling wordt alleen vrijgegeven door het proces dat de vergrendeling ervan heeft verkregen. |
Types | Types van Semaphore tellen semafoor en binaire semafoor en | Mutex heeft geen subtypen. |
Werking | Semaphore waarde wordt gewijzigd met behulp van de wait() en signal() bewerking. | Mutex-object is vergrendeld of ontgrendeld. |
Bezetting van hulpbronnen | Deze is bezet als alle bronnen worden gebruikt en het proces dat de bron aanvraagt de wait()-bewerking uitvoert en zichzelf blokkeert totdat het aantal semaforen >1 is. | Als het object al is vergrendeld, wacht het proces dat om bronnen vraagt, en wordt het door het systeem in de wachtrij geplaatst voordat de vergrendeling wordt opgeheven. |
Voordelen Semaphores
Hier zijn de voor- en voordelen van het gebruik Semaphore:
- Hierdoor heeft meer dan één thread toegang tot de kritieke sectie
- Semaphores zijn machine-onafhankelijk.
- Semaphores worden geïmplementeerd in de machine-onafhankelijke code van de microkernel.
- Ze staan niet toe dat meerdere processen de kritieke sectie binnendringen.
- Omdat er druk wordt gewacht op de seinpaal, is er nooit sprake van verspilling van procestijd en middelen.
- Ze zijn machine-onafhankelijk, wat moet worden uitgevoerd in de machine-onafhankelijke code van de microkernel.
- Ze maken een flexibel beheer van middelen mogelijk.
Nadeel van semaforen
Hier zijn de nadelen/nadelen van semafoor
- Een van de grootste beperkingen van een semafoor is prioriteitsomkering.
- Het besturingssysteem moet alle oproepen voor wacht- en signaalsemafoor bijhouden.
- Het gebruik ervan wordt nooit afgedwongen, maar alleen volgens afspraak.
- Om patstellingen in de semafoor te voorkomen, zijn de wacht- en Signal Bewerkingen moeten in de juiste volgorde worden uitgevoerd.
- Semaphore Programmeren is ingewikkeld, dus er bestaat een kans dat wederzijdse uitsluiting niet wordt bereikt.
- Het is ook geen praktische methode voor grootschalig gebruik, aangezien het gebruik ervan leidt tot verlies aan modulariteit.
- Semaphore is gevoeliger voor programmeerfouten.
- Het kan veroorzaken: impasse of schending van wederzijdse uitsluiting als gevolg van een programmeerfout.
Samenvatting
- Semaphore wordt gedefinieerd als een variabele die niet-negatief is en wordt gedeeld tussen threads.
- Het is een mechanisme dat gebruikt kan worden om taken te synchroniseren.
- Het tellen van de semafoor maakt gebruik van een telling waarmee taken meerdere keren kunnen worden verworven of vrijgegeven.
- De binaire semaforen lijken veel op het tellen van semaforen, maar hun waarde is beperkt tot 0 en 1.
- Met de wachtbewerking kunt u de invoer van een taak in de kritieke sectie controleren
- Signal Semafoorbewerking wordt gebruikt om de uitgang van een taak uit een kritieke sectie te regelen
- Telling Semaphore kent geen wederzijdse uitsluiting terwijl Binary Semaphore kent wederzijdse uitsluiting
- Semaphore betekent een signaleringsmechanisme, terwijl Mutex een vergrendelingsmechanisme is
- Semaphore staat meer dan één thread toe om toegang te krijgen tot de kritieke sectie
- Een van de grootste beperkingen van een semafoor is prioriteitsomkering.