Vad är Semaphore? Räkning, binära typer med exempel

Vad är Semaphore?

Semaphore är helt enkelt en variabel som är icke-negativ och delad mellan trådar. En semafor är en signalmekanism, och en tråd som väntar på en semafor kan signaleras av en annan tråd. Den använder två atomoperationer, 1) Vänta och 2) Signal för processsynkronisering.

En semafor antingen tillåter eller förbjuder åtkomst till resursen, vilket beror på hur den är inställd.

Kännetecknande för Semaphore

Här är karakteristiska för en semafor:

  • Det är en mekanism som kan användas för att tillhandahålla synkronisering av uppgifter.
  • Det är en synkroniseringsmekanism på låg nivå.
  • Semaphore kommer alltid att ha ett icke-negativt heltalsvärde.
  • Semaphore kan implementeras med hjälp av testoperationer och avbrott, som bör köras med filbeskrivningar.

Typer av Semaphores

De två vanliga typerna av semaforer är

  • Räknar semaforer
  • Binära semaforer.

Räkna Semaphores

Denna typ av Semaphore använder en räkning som hjälper uppgiften att förvärvas eller släppas flera gånger. Om det initiala antalet = 0, bör räkneseminaforen skapas i det otillgängliga tillståndet.

Räkna Semaphores
Räkna Semaphores

Men om antalet är > 0 skapas semaforen i tillgängligt tillstånd, och antalet tokens den har är lika med dess antal.

Binary Semaphores

De binära semaforerna påminner ganska mycket om att räkna semaforer, men deras värde är begränsat till 0 och 1. I denna typ av semafor fungerar väntaoperationen endast om semafor = 1, och signaloperationen lyckas när semafor = 0. Det är lätt att implementera än att räkna semaforer.

Binary Semaphores

Binary Semaphores

Exempel på Semaphore

Det nedan angivna programmet är en steg-för-steg-implementering, som involverar användning och deklaration av semafor.

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

Vänta och Signal Operationer i Semaphores

Båda dessa operationer används för att implementera processsynkronisering. Målet med denna semaforoperation är att få ömsesidig uteslutning.

Vänta på Operation

Denna typ av semaforoperation hjälper dig att kontrollera inmatningen av en uppgift i den kritiska delen. Men om värdet på wait är positivt, minskas värdet på wait-argumentet X. Vid negativt eller nollvärde utförs ingen operation. Det kallas även P(S)-operation.

Efter att semaforvärdet har minskat, vilket blir negativt, hålls kommandot uppe tills de erforderliga villkoren är uppfyllda.

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

Signal drift

Denna typ av Semaphore operation används för att kontrollera utgången av en uppgift från en kritisk sektion. Det hjälper till att öka värdet på argumentet med 1, vilket betecknas som V(S).

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

Räkna Semaphore kontra binär Semaphore

Här är några stora skillnader mellan räkning och binär semafor:

Räkna Semaphore Binary Semaphore
Ingen ömsesidig uteslutning Ömsesidig uteslutning
Vilket heltalsvärde som helst Endast värde 0 och 1
Mer än en plats Endast en plats
Tillhandahåll en uppsättning processer Den har en mekanism för ömsesidig uteslutning.

Skillnad mellan Semaphore vs. Mutex

Driftparametrar Semaphore mutex
Mekanism Det är en typ av signalmekanism. Det är en låsmekanism.
Data typ Semaphore är en heltalsvariabel. Mutex är bara ett objekt.
Ändring Väntan och signaloperationerna kan modifiera en semafor. Den ändras endast av den process som kan begära eller släppa en resurs.
Resurshantering Om ingen resurs är ledig, kräver processen en resurs som bör utföra en väntaoperation. Den bör vänta tills räkningen av semaforen är större än 0. Om den är låst måste processen vänta. Processen bör hållas i kö. Detta behöver endast nås när mutex är upplåst.
Tråd Du kan ha flera programtrådar. Du kan ha flera programtrådar i mutex men inte samtidigt.
Ägande Värdet kan ändras genom vilken process som helst som släpper eller erhåller resursen. Objektlåset frigörs endast av processen som har erhållit låset på det.
Typer Typer av Semaphore räknar semafor och binär semafor och Mutex har inga undertyper.
Operation Semaphore värdet ändras med hjälp av vänta () och signal () operation. Mutex-objektet är låst eller olåst.
Resurser Beläggning Den är upptagen om alla resurser används och processen som begär resurs utför wait () operation och blockerar sig själv tills semaforantalet blir >1. Om objektet redan är låst, väntar processen som begär resurser och köas av systemet innan låset släpps.

Fördelar med Semaphores

Här finns fördelar/fördelar med att använda Semaphore:

  • Det tillåter mer än en tråd att komma åt den kritiska delen
  • Semaphores är maskinoberoende.
  • Semaphores implementeras i den maskinoberoende koden för mikrokärnan.
  • De tillåter inte att flera processer kommer in i den kritiska delen.
  • Eftersom det är fullt upp med att vänta i semafor, finns det aldrig ett slöseri med processtid och resurser.
  • De är maskinoberoende, vilket bör köras i den maskinoberoende koden för mikrokärnan.
  • De tillåter flexibel hantering av resurser.

Nackdel med semaforer

Här är nackdelar/nackdelar med semafor

  • En av de största begränsningarna för en semafor är prioritetsinversion.
  • Operativsystemet måste hålla reda på alla samtal för att vänta och signalera semafor.
  • Deras användning upprätthålls aldrig, utan endast enligt konvention.
  • För att undvika dödlägen i semaforen, väntar och Signal operationer måste utföras i rätt ordning.
  • Semaphore programmering är komplicerat, så det finns chanser att inte uppnå ömsesidig uteslutning.
  • Det är inte heller en praktisk metod för storskalig användning eftersom deras användning leder till förlust av modularitet.
  • Semaphore är mer benägen för programmeringsfel.
  • Det kan orsaka dödläge eller brott mot ömsesidig uteslutning på grund av programmeringsfel.

Sammanfattning

  • Semaphore definieras som en variabel som är icke-negativ och delad mellan trådar.
  • Det är en mekanism som kan användas för att tillhandahålla synkronisering av uppgifter.
  • Räkna semafor använder en räkning som hjälper uppgiften att förvärvas eller släppas flera gånger.
  • De binära semaforerna är ganska lika att räkna semaforer, men deras värde är begränsat till 0 och 1.
  • Vänta operation hjälper dig att kontrollera inmatningen av en uppgift i den kritiska delen
  • Signal semaforoperation används för att kontrollera utgången av en uppgift från en kritisk sektion
  • Räkna Semaphore har ingen ömsesidig uteslutning medan Binary Semaphore har ömsesidig uteslutning
  • Semaphore betyder en signalmekanism medan Mutex är en låsmekanism
  • Semaphore tillåter mer än en tråd att komma åt det kritiska avsnittet
  • En av de största begränsningarna för en semafor är prioritetsinversion.