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.
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.
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.