Wat is Semafoor? Tellen, binaire typen met voorbeeld

Wat is semafoor?

seinpaal is eenvoudigweg een variabele die niet-negatief is en wordt gedeeld tussen threads. Een semafoor is een signaleringsmechanisme, en een draad die op een semafoor wacht, kan door een andere draad worden gesignaleerd. Er worden er twee gebruikt atomic-bewerkingen, 1) Wachten en 2) Signaal voor het proces synckroning.

Een semafoor staat toegang tot de bron wel of niet toe, afhankelijk van hoe deze is ingesteld.

Kenmerkend voor Semafoor

Hier zijn kenmerkend voor een semafoor:

  • Het is een mechanisme dat kan worden gebruikt om te voorzien synchonisatie van taken.
  • Het is een laag niveau syncronisatie mechanisme.
  • Semafoor zal altijd een niet-negatieve gehele waarde bevatten.
  • Semafoor kan worden geïmplementeerd met behulp van testbewerkingen en interrupts, die moeten worden uitgevoerd met behulp van bestandsdescriptors.

Soorten semaforen

De twee meest voorkomende soorten semaforen zijn

  • Semaforen tellen
  • Binaire semaforen.

Semaforen tellen

Dit type semafoor maakt gebruik van een telling waarmee taken meerdere keren kunnen worden verworven of vrijgegeven. Als de initiële telling = 0, moet de tel-semafoor worden aangemaakt in de niet-beschikbare status.

Semaforen tellen
Semaforen tellen

Als het aantal echter > 0 is, wordt de semafoor gemaakt in de beschikbare staat en is het aantal tokens gelijk aan het aantal.

Binaire semaforen

De binaire semaforen lijken veel op het tellen van semaforen, maar hun waarde is beperkt tot 0 en 1. Bij dit type semafoor werkt de wachtoperatie alleen als semafoor = 1, en de signaaloperatie slaagt als semafoor = 0. Het is gemakkelijk om implementeren dan het tellen van semaforen.

Binaire semaforen

Binaire semaforen

Voorbeeld van Semafoor

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 signaalbewerkingen in semaforen

Beide bewerkingen worden gebruikt om te implementeren synckroning. Het doel van deze seinpaaloperatie is het bewerkstelligen van wederzijdse uitsluiting.

Wacht op operatie

Dit type seinpaalbewerking helpt u de invoer van een taak in de kritieke sectie te controleren. Als de waarde van wait echter positief is, wordt de waarde van het wait-argument X verlaagd. Bij een negatieve of nulwaarde wordt er geen bewerking uitgevoerd. Dit 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--;
}

Signaalbediening:

Dit type Semaphore-bewerking wordt gebruikt om het verlaten van een taak uit een kritieke sectie te regelen. Het helpt om de waarde van het argument met 1 te verhogen, wat wordt aangegeven als V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Seinpaal tellen versus binaire semafoor

Hier zijn enkele belangrijke verschillen tussen tellen en binaire semafoor:

Seinpaal tellen Binaire seinpaal
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 Semafoor en Mutex

parameters seinpaal mutex
Mechanisme Het is een soort signaalmechanisme. Het is een vergrendelingsmechanisme.
Data type Semafoor is een geheel getalvariabele. 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 bron vrij is, heeft het proces een bron nodig die de wachtbewerking moet uitvoeren. Er moet worden gewacht totdat 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 gelijktijdigneonormaal.
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 Soorten semafoor zijn het tellen van semafoor en binaire semafoor en Mutex heeft geen subtypen.
Werking De semafoorwaarde wordt gewijzigd met behulp van de bewerking wait () en signal (). Mutex-object is vergrendeld of ontgrendeld.
Bezetting van hulpbronnen Het is bezet als alle bronnen worden gebruikt en het proces dat om bronnen vraagt, de wait ()-bewerking uitvoert en zichzelf blokkeert totdat het aantal semafoor >1 wordt. 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 van seinpalen

Hier zijn de voor- en voordelen van het gebruik van Semaphore:

  • Hierdoor heeft meer dan één thread toegang tot de kritieke sectie
  • Semaforen zijn machine-onafhankelijk.
  • Semaforen 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 wachtoproepen bijhouden en de semafoor signaleren.
  • Het gebruik ervan wordt nooit afgedwongen, maar alleen volgens afspraak.
  • Om te voorkomen dat dadlockIn semafoor moeten de wacht- en signaalbewerkingen in de juiste volgorde worden uitgevoerd.
  • Semafoorprogrammering is ingewikkeld, dus er bestaat een kans dat er geen wederzijdse uitsluiting wordt bereikt.
  • Het is ook geen praktische methode voor grootschalig gebruik, aangezien het gebruik ervan leidt tot verlies aan modulariteit.
  • Semafoor is gevoeliger voor programmeerfouten.
  • Het kan veroorzaken: deadlock of schending van wederzijdse uitsluiting als gevolg van een programmeerfout.

Samengevat

  • Semafoor wordt gedefinieerd als een variabele die niet-negatief is en wordt gedeeld tussen threads.
  • Het is een mechanisme dat kan worden gebruikt om te voorzien synchonisatie van taken.
  • 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.
  • Wachtbediening helpt u de invoer van een taak in de kritieke sectie te controleren
  • Signaal-semafoorbewerking wordt gebruikt om het verlaten van een taak uit een kritieke sectie te regelen
  • Tellende semafoor heeft geen wederzijdse uitsluiting, terwijl binaire semafoor wederzijdse uitsluiting heeft
  • Semafoor betekent een signaleringsmechanisme, terwijl Mutex een vergrendelingsmechanisme is
  • Met Semafoor heeft meer dan één thread toegang tot de kritieke sectie
  • Een van de grootste beperkingen van een semafoor is prioriteitsomkering.