Hva er Semaphore? Telling, binære typer med eksempel

Hva er Semaphore?

Semaphore er ganske enkelt en variabel som er ikke-negativ og delt mellom tråder. En semafor er en signalmekanisme, og en tråd som venter på en semafor kan signaliseres av en annen tråd. Den bruker to atomoperasjoner, 1) Vent og 2) Signal for prosesssynkronisering.

En semafor enten tillater eller nekter tilgang til ressursen, noe som avhenger av hvordan den er satt opp.

Karakteristisk for Semaphore

Her er karakteristiske for en semafor:

  • Det er en mekanisme som kan brukes til å gi synkronisering av oppgaver.
  • Det er en synkroniseringsmekanisme på lavt nivå.
  • Semaphore vil alltid ha en ikke-negativ heltallsverdi.
  • Semaphore kan implementeres ved hjelp av testoperasjoner og avbrudd, som bør utføres ved hjelp av filbeskrivelser.

Typer av Semaphores

De to vanlige typene semaforer er

  • Å telle semaforer
  • Binære semaforer.

Telle Semaphores

Denne typen Semaphore bruker en telling som hjelper oppgaven å bli anskaffet eller frigitt flere ganger. Hvis starttellingen = 0, bør tellesemaforen opprettes i utilgjengelig tilstand.

Telle Semaphores
Telle Semaphores

Imidlertid, hvis antallet er > 0, opprettes semaforen i tilgjengelig tilstand, og antall tokens den har er lik antallet.

Binary Semaphores

De binære semaforene er ganske like å telle semaforene, men verdien er begrenset til 0 og 1. I denne typen semaforer fungerer venteoperasjonen bare hvis semaforen = 1, og signaloperasjonen lykkes når semaforen = 0. Det er lett å implementere enn å telle semaforer.

Binary Semaphores

Binary Semaphores

Eksempel Semaphore

Det nedenfor gitte programmet er en trinnvis implementering, som involverer bruk og erklæring av semafor.

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

Vent og Signal Operasjoner i Semaphores

Begge disse operasjonene brukes til å implementere prosesssynkronisering. Målet med denne semaforoperasjonen er å få gjensidig ekskludering.

Vent for Operasjon

Denne typen semaforoperasjoner hjelper deg med å kontrollere oppføringen av en oppgave i den kritiske delen. Imidlertid, hvis verdien av vente er positiv, reduseres verdien av wait-argumentet X. Ved negativ eller null verdi utføres ingen operasjon. Det kalles også P(S)-operasjon.

Etter at semaforverdien er redusert, som blir negativ, holdes kommandoen oppe til de nødvendige betingelsene er oppfylt.

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

Signal drift

Denne typen Semaphore operasjon brukes til å kontrollere utgangen av en oppgave fra en kritisk seksjon. Det hjelper å øke verdien av argumentet med 1, som er betegnet som V(S).

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

Telle Semaphore vs. binær Semaphore

Her er noen store forskjeller mellom telling og binær semafor:

Telle Semaphore Binary Semaphore
Ingen gjensidig utestenging Gjensidig utelukkelse
Enhver heltallsverdi Verdi kun 0 og 1
Mer enn ett spor Bare ett spor
Gi et sett med prosesser Den har en gjensidig eksklusjonsmekanisme.

Forskjell mellom Semaphore vs. Mutex

parametere Semaphore mutex
Mekanisme Det er en type signalmekanisme. Det er en låsemekanisme.
Data-type Semaphore er en heltallsvariabel. Mutex er bare et objekt.
modifisering Vente- og signaloperasjonene kan endre en semafor. Den endres kun av prosessen som kan be om eller frigi en ressurs.
Ressursforvaltning Hvis ingen ressurs er ledig, krever prosessen en ressurs som skal utføre venteoperasjon. Den bør vente til tellingen av semaforen er større enn 0. Hvis den er låst, må prosessen vente. Prosessen bør holdes i kø. Dette må kun åpnes når mutexen er låst opp.
Tråd Du kan ha flere programtråder. Du kan ha flere programtråder i mutex, men ikke samtidig.
Eierskap Verdien kan endres ved en hvilken som helst prosess som frigir eller henter ressursen. Objektlås frigjøres bare av prosessen som har fått låsen på den.
Typer Typer av Semaphore er tellende semafor og binær semafor og Mutex har ingen undertyper.
Operasjon Semaphore verdien endres ved å bruke vente () og signal () operasjon. Mutex-objektet er låst eller ulåst.
Ressursbelegg Den er opptatt hvis alle ressursene blir brukt og prosessen som ber om ressurs utfører vent () operasjon og blokkerer seg selv til semafortellingen blir >1. Hvis objektet allerede er låst, venter prosessen som ber om ressurser og settes i kø av systemet før låsen frigjøres.

fordeler med Semaphores

Her er fordeler/fordeler med å bruke Semaphore:

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

Ulempen med semaforer

Her er ulemper/ulemper med semafor

  • 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.
  • For å unngå vranglås i semaforen, venter og Signal operasjoner må utføres i riktig rekkefølge.
  • Semaphore programmering er komplisert, 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.
  • Semaphore er mer utsatt for programmeringsfeil.
  • Det kan forårsake vranglås eller brudd på gjensidig utestenging på grunn av programmeringsfeil.

Oppsummering

  • Semaphore er definert som en variabel som er ikke-negativ og delt mellom tråder.
  • Det er en mekanisme som kan brukes til å gi synkronisering av oppgaver.
  • Telle semafor bruker en telling som hjelper oppgave å bli anskaffet eller utgitt flere ganger.
  • De binære semaforene er ganske like å telle semaforene, men verdien er begrenset til 0 og 1.
  • Venteoperasjon hjelper deg med å kontrollere oppføringen av en oppgave i den kritiske delen
  • Signal semaforoperasjon brukes til å kontrollere utgangen av en oppgave fra en kritisk seksjon
  • Telle Semaphore har ingen gjensidig utestenging mens Binær Semaphore har gjensidig utestenging
  • Semaphore betyr en signalmekanisme mens Mutex er en låsemekanisme
  • Semaphore lar mer enn én tråd få tilgang til den kritiske delen
  • En av de største begrensningene til en semafor er prioritert inversjon.