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

⚡ Smart oppsummering

Semaphore i et operativsystem er en ikke-negativ heltallsvariabel som deles mellom tråder som koordinerer tilgang til delte ressurser gjennom to atomoperasjoner, wait og signal, og forhindrer kappløpsbetingelser under prosesssynkronisering.

  • 🔢 Definisjon: En semafor er en ikke-negativ heltallsvariabel som signaliserer om en delt ressurs er tilgjengelig for konkurrerende tråder.
  • ⚙️ To Operatjoner: Venteoperasjonen (P) ber om en ressurs og reduserer antallet, mens signaloperasjonen (V) frigir den og øker antallet.
  • 🔁 Telletype: En tellende semafor lar et gitt antall tråder bruke identiske ressurser samtidig.
  • 🔒 Binær type: En binær semafor er begrenset til verdiene 0 og 1, så den oppfører seg som en enkel lås for gjensidig utelukkelse.
  • ⚠️ Avveininger: Semaphoreer maskinuavhengige og fleksible, men de risikerer prioritetsinversjon og vranglås når de brukes feil.
  • 🤖 AI Assist: Maskinlærings- og AI-kodingsassistenter kan modellere samtidighet og generere riktige vente- og signalsekvenser.

Semaphore in Operating System

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.

Kjennetegn på Semaphore

Her er egenskapene til 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 en oppgave med å bli anskaffet eller frigitt flere ganger. Hvis den opprinnelige tellingen = 0, bør tellesemaforen opprettes i utilgjengelig tilstand.

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 telling av semaforer, men verdien deres er begrenset til 0 og 1. I denne typen semafor fungerer venteoperasjonen bare hvis semaforen = 1, og signaloperasjonen lykkes når semaforen = 0. Den er enklere å implementere enn å telle semaforer.

Binary Semaphores

Eksempel Semaphore

Programmet nedenfor er en trinnvis implementering, som involverer bruk og deklarasjon av en 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.

P(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).

P(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

Tabellen nedenfor sammenligner en semafor med en mutex på tvers av flere parametere:

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

  • Det tillater 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.

Ulemper med Semaphores

Her er ulemper/ulemper med semafor:

  • En av de største begrensningene til en semafor er prioritert inversjon.
  • Operativsystemet må holde track av alle anrop til vente- og signalsemafor.
  • 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 eksklusjon.
  • 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.

Spørsmål og svar

Edsger Dijkstra introduserte semaforer i 1965. Vente- og signaloperasjonene kalles også P og V, fra de nederlandske ordene proberen (test) og verhogen (inkrement).

En ren tellende semafor forblir ikke-negativ, men mange implementeringer lar verdien bli negativ. Størrelsen er da lik antall prosesser som venter i semaforkøen.

Semaphores koordinerer klassiske samtidighetsproblemer som produsent-forbruker (avgrenset buffer) og leser-skriver. De gir tilgang til et begrenset utvalg av identiske ressurser, og beskytter delte data.

En mutex har eierskap, så bare låsetråden kan låse den opp. En binær semafor har ingen eier, så enhver tråd kan signalisere den. De er ikke identiske.

Prioritetsinversjon skjer når en tråd med lav prioritet inneholder en semafor som en tråd med høy prioritet trenger, noe som tvinger den hastende tråden til å vente. Prioritetsarvprotokoller reduserer den.

De fleste moderne plattformer sender semaforer: POSIX sem_t i C, Semaphore klasse i Java, og gjenging.Semaphore in PythonUtviklere bygger sjelden en fra bunnen av.

Maskinlæring kan analysere utførelse tracfor å forutsi kamp, ​​justere hvor mange tillatelser en tellesemafor har, og flagge sannsynlige vranglåser, hjelpping ingeniører designer tryggere samtidighet.

Ja. AI-assistenter som GitHub Copilot kan generere vente- og signalstandarder, foreslå låserekkefølge og forklare kappløpsforhold. RevSe utdataene nøye, siden subtile vranglåser lett skjules.

Oppsummer dette innlegget med: