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

Hvad er semafor?

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 atomic operationer, 1) Vent og 2) Signal for processen synchronisering.

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

Karakteristisk for Semafor

Her er karakteristiske for en semafor:

  • Det er en mekanisme, der kan bruges til at give synchronisering af opgaver.
  • Det er et lavt niveau synchroniseringsmekanisme.
  • Semafor vil altid have en ikke-negativ heltalværdi.
  • Semafor kan implementeres ved hjælp af test operationer og interrupts, som skal udføres ved hjælp af fildeskriptorer.

Typer af semaforer

De to almindelige slags semaforer er

  • Tælle semaforer
  • Binære semaforer.

Tæller semaforer

Denne type semafor 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æller semaforer
Tæller semaforer

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

Binære semaforer

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 er ventetiden operation virker kun hvis semafor = 1, og signalet operationen lykkes, når semafor= 0. Det er let at implementere end at tælle semaforer.

Binære semaforer

Binære semaforer

Eksempel på semafor

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 signaler Operationer i Semaforerne

Begge disse operationer bruges til at implementere behandle synchronisering. Målet med denne semafor operation er at få gensidig udelukkelse.

Vent på Operation

Denne type semafor operation 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, nej operation udføres. 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 operation

Denne type semafor operation bruges til at kontrollere 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++;
}

At tælle semafor vs. binær semafor

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

Tæller semafor Binær semafor
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.

Forskellen mellem Semaphore vs Mutex

parametre Semaphore mutex
Mechanism Det er en form for signaleringsmekanisme. Det er en låsemekanisme.
Datatype Semafor er en heltalsvariabel. Mutex er bare et objekt.
Ændring Ventetiden og signalet operationer 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øres wait operation. 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 simultaneoalmindeligt.
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 semafor er tælle semafor og binær semafor og Mutex har ingen undertyper.
Produktion Semaforværdien ændres ved hjælp af vent () 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 vent () operation og blokerer sig selv, indtil semaforantallet 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 semaforer

Her er fordele/fordele ved at bruge Semaphore:

  • Det giver mere end én tråd adgang til den kritiske sektion
  • Semaforer er maskinuafhængige.
  • Semaforer 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.
  • operating-systemet skal holde styr på alle opkald til at vente og signalere semafor.
  • Deres brug håndhæves aldrig, men det er kun ved konvention.
  • For at undgå deadlocks i semafor, Vent og signal operationer skal udføres i den rigtige rækkefølge.
  • Semaforprogrammering 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.
  • Semafor er mere tilbøjelig til programmørfejl.
  • Det kan forårsage deadlock eller overtrædelse af gensidig udelukkelse på grund af programmørfejl.

Resumé

  • Semafor er defineret som en variabel, der er ikke-negativ og deles mellem tråde.
  • Det er en mekanisme, der kan bruges til at give synchronisering 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 semafor operation bruges til at kontrollere udgangen af ​​en opgave fra en kritisk sektion
  • At tælle semafor har ingen gensidig udelukkelse, mens binær semafor har gensidig udelukkelse
  • Semafor betyder en signalmekanisme, mens Mutex er en låsemekanisme
  • Semafor giver mere end én tråd adgang til den kritiske sektion
  • En af de største begrænsninger ved en semafor er prioritetsinversion.