Hvad er Semaphore? Optælling, binære typer med eksempel

Hvad er Semaphore?

Semaphore er simpelthen en variabel, der er ikke-negativ og deles mellem tråde. En semafor er en signaleringsmekanisme, og en tråd, der venter på en semafor, kan signaleres af en anden tråd. Den bruger to atomoperationer, 1) Vent og 2) Signal til processynkronisering.

En semafor enten tillader eller nægter adgang til ressourcen, hvilket afhænger af, hvordan den er sat op.

Karakteristisk for Semaphore

Her er karakteristiske for en semafor:

  • Det er en mekanisme, der kan bruges til at give synkronisering af opgaver.
  • Det er en synkroniseringsmekanisme på lavt niveau.
  • Semaphore vil altid have en ikke-negativ heltalværdi.
  • Semaphore kan implementeres ved hjælp af testoperationer og interrupts, som skal udføres ved hjælp af filbeskrivelser.

Typer af Semaphores

De to almindelige slags semaforer er

  • Tælle semaforer
  • Binære semaforer.

Tælle Semaphores

Denne type Semaphore bruger en optælling, der hjælper opgaven med at blive erhvervet eller frigivet adskillige gange. Hvis det oprindelige antal = 0, skal tællesemaforen oprettes i den utilgængelige tilstand.

Tælle Semaphores
Tælle Semaphores

Men hvis antallet er > 0, oprettes semaforen i den tilgængelige tilstand, og antallet af tokens, den har, er lig med dets antal.

Binary Semaphores

De binære semaforer minder ret meget om at tælle semaforer, men deres værdi er begrænset til 0 og 1. I denne type semafor virker venteoperationen kun hvis semafor = 1, og signaloperationen lykkes når semafor = 0. Det er nemt at implementere end at tælle semaforer.

Binary Semaphores

Binary Semaphores

Eksempel Semaphore

Nedenstående program er en trinvis implementering, som involverer brug og erklæring af semafor.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Vent og Signal Operationer i Semaphores

Begge disse operationer bruges til at implementere processynkronisering. Målet med denne semaforoperation er at få gensidig udelukkelse.

Vent på Operation

Denne type semaforoperation hjælper dig med at kontrollere indtastningen af ​​en opgave i den kritiske sektion. Men hvis værdien af ​​wait er positiv, nedsættes værdien af ​​wait-argumentet X. I tilfælde af negativ eller nul værdi udføres ingen handling. Det kaldes også P(S) operation.

Efter at semaforværdien er reduceret, som bliver negativ, holdes kommandoen oppe, indtil de nødvendige betingelser er opfyldt.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal drift

Denne type Semaphore operation bruges til at styre udgangen af ​​en opgave fra en kritisk sektion. Det hjælper med at øge værdien af ​​argumentet med 1, som betegnes som V(S).

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

Tælle Semaphore vs. binær Semaphore

Her er nogle store forskelle mellem tælling og binær semafor:

Tælle Semaphore Binary Semaphore
Ingen gensidig udelukkelse Gensidig udelukkelse
Enhver heltalsværdi Værdi kun 0 og 1
Mere end én plads Kun én plads
Angiv et sæt processer Den har en gensidig udelukkelsesmekanisme.

Forskel mellem Semaphore vs. Mutex

parametre Semaphore mutex
Mechanism Det er en form for signaleringsmekanisme. Det er en låsemekanisme.
Datatype Semaphore er en heltalsvariabel. Mutex er bare et objekt.
Ændring Vente- og signaloperationerne kan ændre en semafor. Det ændres kun af den proces, der kan anmode om eller frigive en ressource.
Ressourcestyring Hvis ingen ressource er ledig, kræver processen en ressource, der skal udføre venteoperation. Det bør vente, indtil antallet af semaforen er større end 0. Hvis den er låst, må processen vente. Processen skal holdes i kø. Dette skal kun tilgås, når mutex'en er låst op.
Tråd Du kan have flere programtråde. Du kan have flere programtråde i mutex, men ikke samtidigt.
Ejerskab Værdien kan ændres ved enhver proces, der frigiver eller henter ressourcen. Objektlås frigives kun af processen, som har opnået låsen på den.
Typer Typer af Semaphore er tælle semafor og binær semafor og Mutex har ingen undertyper.
Produktion Semaphore værdien ændres ved hjælp af vente () og signal () operation. Mutex-objekt er låst eller ulåst.
Ressourcer Belægning Den er optaget, hvis alle ressourcer bliver brugt, og processen, der anmoder om ressource, udfører wait ()-operation og blokerer sig selv, indtil semafor-antallet bliver >1. Hvis objektet allerede er låst, venter processen, der anmoder om ressourcer, og sættes i kø af systemet, før låsen frigives.

Fordele ved Semaphores

Her er fordele/fordele ved at bruge Semaphore:

  • Det giver mere end én tråd adgang til den kritiske sektion
  • Semaphores er maskinuafhængige.
  • Semaphores er implementeret i mikrokernens maskinuafhængige kode.
  • De tillader ikke, at flere processer kommer ind i den kritiske sektion.
  • Da der er travlt med at vente i semaforen, er der aldrig spild af procestid og ressourcer.
  • De er maskinuafhængige, som skal køres i mikrokernens maskinuafhængige kode.
  • De giver mulighed for fleksibel styring af ressourcer.

Ulempen ved semaforer

Her er ulemper/ulemper ved semafor

  • En af de største begrænsninger ved en semafor er prioritetsinversion.
  • Operativsystemet skal holde styr på alle opkald for at vente og signalere semafor.
  • Deres brug håndhæves aldrig, men det er kun ved konvention.
  • For at undgå dødvande i semaforen, vente og Signal operationer skal udføres i den rigtige rækkefølge.
  • Semaphore programmering er kompliceret, så der er chancer for ikke at opnå gensidig udelukkelse.
  • Det er heller ikke en praktisk metode til brug i stor skala, da deres anvendelse fører til tab af modularitet.
  • Semaphore er mere tilbøjelig til programmørfejl.
  • Det kan forårsage dødvande eller overtrædelse af gensidig udelukkelse på grund af programmørfejl.

Resumé

  • Semaphore er defineret som en variabel, der er ikke-negativ og delt mellem tråde.
  • Det er en mekanisme, der kan bruges til at give synkronisering af opgaver.
  • Tælle semafor bruger en optælling, der hjælper opgaven med at blive erhvervet eller frigivet adskillige gange.
  • De binære semaforer minder ret meget om at tælle semaforer, men deres værdi er begrænset til 0 og 1.
  • Vent operation hjælper dig med at kontrollere indtastningen af ​​en opgave i den kritiske sektion
  • Signal semaforoperation bruges til at kontrollere udgangen af ​​en opgave fra en kritisk sektion
  • Tælle Semaphore har ingen gensidig udelukkelse, hvorimod Binær Semaphore har gensidig udelukkelse
  • Semaphore betyder en signalmekanisme, hvorimod Mutex er en låsemekanisme
  • Semaphore giver mere end én tråd adgang til det kritiske afsnit
  • En af de største begrænsninger ved en semafor er prioritetsinversion.