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

⚡ Smart opsummering

Semaphore I et operativsystem er en ikke-negativ heltalsvariabel, der deles mellem tråde, og som koordinerer adgang til delte ressourcer gennem to atomare operationer, wait og signal, hvilket forhindrer kapløbsbetingelser under processynkronisering.

  • 🔢 Definition: En semafor er en ikke-negativ heltalsvariabel, der signalerer, om en delt ressource er tilgængelig for konkurrerende tråde.
  • 🇧🇷 to Operationer: Venteoperationen (P) anmoder om en ressource og reducerer antallet, mens signaloperationen (V) frigiver den og øger antallet.
  • 🔁 Optællingstype: En tællende semafor tillader et bestemt antal tråde at bruge identiske ressourcer på samme tid.
  • 🔒 Binær type: En binær semafor er begrænset til værdierne 0 og 1, så den opfører sig som en simpel lås til gensidig udelukkelse.
  • ⚠️ Afvejninger: Semaphores er maskinuafhængige og fleksible, men de risikerer prioritetsinversion og dødvande, når de bruges forkert.
  • 🤖 AI Assist: Maskinlærings- og AI-kodningsassistenter kan modellere samtidighed og generere korrekte vente- og signalsekvenser.

Semaphore in Operating System

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.

Karakteristik af Semaphore

Her er karakteristikaene 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 typer semaforer er:

  • Tælle semaforer
  • Binære semaforer

Tælle Semaphores

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

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 meget om at tælle semaforer, men deres værdi er begrænset til 0 og 1. I denne type semafor fungerer venteoperationen kun, hvis semaforen = 1, og signaloperationen lykkes, når semaforen = 0. Den er lettere at implementere end at tælle semaforer.

Binary Semaphores

Eksempel Semaphore

Nedenstående program er en trin-for-trin implementering, som involverer brugen og deklarationen af ​​en 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.

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

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

Tabellen nedenfor sammenligner en semafor med en mutex på tværs af flere parametre:

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

Ulemper ved Semaphores

Her er ulemper/ulemper ved semafor:

  • En af de største begrænsninger ved en semafor er prioritetsinversion.
  • Operativsystemet skal holde track af alle kald til vente- og signalsemafor.
  • 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.

Ofte Stillede Spørgsmål

Edsger Dijkstra introducerede semaforer i 1965. Vente- og signaloperationerne kaldes også P og V, fra de hollandske ord probeeren (test) og verhogen (inkrement).

En ren tællende semafor forbliver ikke-negativ, men mange implementeringer lader værdien blive negativ. Dens størrelse er derefter lig med antallet af processer, der venter i semaforkøen.

Semaphores koordinerer klassiske samtidighedsproblemer såsom producent-forbruger (afgrænset buffer) og læser-skriver. De giver adgang til en begrænset pulje af identiske ressourcer og beskytter delte data.

En mutex har ejerskab, så kun den låsende tråd kan låse den op. En binær semafor har ingen ejer, så enhver tråd kan signalere den. De er ikke identiske.

Prioritetsinversion sker, når en tråd med lav prioritet indeholder en semafor, som en tråd med høj prioritet har brug for, hvilket tvinger den presserende tråd til at vente. Prioritetsarvsprotokoller reducerer den.

De fleste moderne platforme leverer semaforer: POSIX sem_t i C, Semaphore klasse i Java, og gevindskæring.Semaphore in PythonUdviklere bygger sjældent en fra bunden.

Maskinlæring kan analysere udførelse traces til at forudsige konkurrence, justere hvor mange tilladelser en tællesemafor har, og markere sandsynlige fastlåste positioner, helping Ingeniører designer sikrere samtidighed.

Ja. AI-assistenter som GitHub Copilot kan generere vente- og signalstandarder, foreslå låserækkefølge og forklare kapløbsbetingelser. RevSe outputtet omhyggeligt, da subtile fastlåste situationer let skjules.

Opsummer dette indlæg med: