Hvad er Semaphore? Optælling, binære typer med eksempel
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.
Karakteristisk for Semaphore
Her er karakteristiske 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 slags semaforer er
- Tælle semaforer
- Binære semaforer.
Tælle Semaphores
Denne type Semaphore 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.
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 ret meget om at tælle semaforer, men deres værdi er begrænset til 0 og 1. I denne type semafor virker venteoperationen kun hvis semafor = 1, og signaloperationen lykkes når semafor = 0. Det er nemt at implementere end at tælle semaforer.
Eksempel Semaphore
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 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.
Copy CodeP(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).
Copy CodeP(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
parametre | 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 og | 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.
Ulempen ved semaforer
Her er ulemper/ulemper ved semafor
- En af de største begrænsninger ved en semafor er prioritetsinversion.
- Operativsystemet skal holde styr på alle opkald for at vente og signalere semafor.
- 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.
Resumé
- Semaphore er defineret som en variabel, der er ikke-negativ og delt mellem tråde.
- Det er en mekanisme, der kan bruges til at give synkronisering 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 semaforoperation bruges til at kontrollere udgangen af en opgave fra en kritisk sektion
- Tælle Semaphore har ingen gensidig udelukkelse, hvorimod Binær Semaphore har gensidig udelukkelse
- Semaphore betyder en signalmekanisme, hvorimod Mutex er en låsemekanisme
- Semaphore giver mere end én tråd adgang til det kritiske afsnit
- En af de største begrænsninger ved en semafor er prioritetsinversion.