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