Hvad er Semaphore?
Semafor er simpelthen en variabel, der er ikke-negativ og deles mellem tråde. En semafor er en signalmekanisme, og en tråd, der venter på en semafor, kan signaliseres af en anden tråd. Den bruger to atomoperationer, 1) ventetid og 2) signal til procssynkroniseringen.
En semafor tillader eller afviser enten adgang til ressourcen, hvilket afhænger af, hvordan den er konfigureret.
I denne operativsystem (OS) vejledning lærer du:
- Karakteristisk for Semaphore
- Hvad er Semaphore?
- Typer af semaforer
- Eksempel på Semaphore
- Vent og signaloperationer i semaforer
- Optælling af semafor vs. binær semafor
- Forskel mellem Semaphore vs. Mutex
- Fordele ved semaforer
- Ulempen ved semaforer
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.
- Semafor vil altid have en ikke-negativ heltalværdi.
- Semaphore kan implementeres ved hjælp af testoperationer og afbrydelser, som skal udføres ved hjælp af filbeskrivere.
Typer af semaforer
De to almindelige former for semaforer er
- Tæller semaforer
- Binære semaforer.
Tæller semaforer
Denne type Semaphore bruger en optælling, der hjælper opgaven med at blive erhvervet eller frigivet adskillige gange. Hvis den oprindelige optælling = 0, skal tællesemaforen oprettes i den utilgængelige tilstand.
Men hvis optællingen er> 0, oprettes semaforen i den tilgængelige tilstand, og antallet af tokens, den har, svarer til dens antal.
Binære semaforer
De binære semaforer ligner meget på at tælle semaforer, men deres værdi er begrænset til 0 og 1. I denne type semafor fungerer ventetiden kun, hvis semafor = 1, og signaloperationen lykkes, når semafor = 0. Det er let at implementere end at tælle semaforer.
Eksempel på Semaphore
Det nedenfor givne program er en trinvis implementering, som involverer brug og erklæring af semafor.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Vent og signaloperationer i semaforer
Begge disse operationer bruges til at implementere processynkronisering. Målet med denne semaforoperation er at få gensidig udstødelse.
Vent til betjening
Denne type semaforoperation hjælper dig med at kontrollere indgangen til en opgave i det kritiske afsnit. Men hvis værdien af ventetiden er positiv, reduceres værdien af venteargumentet X. I tilfælde af negativ eller nul værdi udføres ingen handling. Det kaldes også P (S) -drift.
Efter at semaforværdien er faldet, hvilket bliver negativ, holdes kommandoen nede, indtil de krævede betingelser er opfyldt.
Copy CodeP(S){while (S<=0);S--;}
Signalfunktion
Denne type Semaphore-operation bruges til at kontrollere afslutningen af en opgave fra et kritisk afsnit. Det hjælper med at øge værdien af argumentet med 1, der betegnes som V (S).
Copy CodeP(S){while (S>=0);S++;}
Optælling af semafor vs. binær semafor
Her er nogle store forskelle mellem optælling og binær semafor:
Tæller Semaphore | Binær semafor |
Ingen gensidig udelukkelse | Gensidig udelukkelse |
Enhver heltalværdi | Værdi kun 0 og 1 |
Mere end en plads | Kun en plads |
Giv et sæt processer | Det har en gensidig udelukkelsesmekanisme. |
Forskel mellem Semaphore vs. Mutex
Parametre | Semafor | Mutex |
Mekanisme | Det er en type signalmekanisme. | Det er en låsemekanisme. |
Datatype | Semafor er en heltalsvariabel. | Mutex er bare et objekt. |
Modifikation | Vent- og signaloperationerne kan ændre en semafor. | Det ændres kun ved den proces, der muligvis anmoder om eller frigiver en ressource. |
Ressourcestyring | Hvis der ikke er nogen ressource fri, kræver processen en ressource, der skal udføre ventetid. Det skal vente, indtil optællingen af semaforen er større end 0. | Hvis den er låst, skal processen vente. Processen skal holdes i kø. Dette skal kun åbnes, når mutex er låst op. |
Tråd | Du kan have flere programtråde. | Du kan have flere programtråde i mutex, men ikke samtidigt. |
Ejendomsret | Værdien kan ændres ved enhver proces, der frigiver eller skaffer ressourcen. | Objektlås frigøres kun ved processen, som har fået låsen på den. |
Typer | Typer af semafor tæller semafor og binær semafor og | Mutex har ingen undertyper. |
Operation | Semaforværdien ændres ved hjælp af ventetid () og signal (). | Mutex-objekt er låst eller ulåst. |
Ressourcer Belægning | Det er optaget, hvis alle ressourcer bliver brugt, og processen, der anmoder om ressource, udfører vent () -operation og blokerer sig selv, indtil semafortællingen bliver> 1. | Hvis objektet allerede er låst, venter processen, der anmoder om ressourcer, og står i kø i systemet, før låsen frigøres. |
Fordele ved semaforer
Her er fordele / fordele ved at bruge Semaphore:
- Det giver mere end en tråd adgang til det kritiske afsnit
- Semaforer er maskinuafhængige.
- Semaforer implementeres i mikrokernels maskinuafhængige kode.
- De tillader ikke flere processer at komme ind i det kritiske afsnit.
- Da der er travlt med at vente i semaforen, spilder der aldrig spild af procestid og ressourcer.
- De er maskinuafhængige, som skal køres i mikrokernels maskinuafhængige kode.
- De tillader fleksibel styring af ressourcer.
Ulempen ved semaforer
Her er ulemper / ulempe 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 anvendelse håndhæves aldrig, men det er kun ved konvention.
- For at undgå blokeringer i semaforen skal operationerne Vent og Signal udføres i den rigtige rækkefølge.
- Semafor 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 programmeringsfejl.
- Det kan forårsage blokering eller krænkelse af gensidig udelukkelse på grund af programmeringsfejl.
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 synkronisering af opgaver.
- Tælling af semafor bruger en optælling, der hjælper opgaven med at blive erhvervet eller frigivet adskillige gange.
- De binære semaforer svarer meget til at tælle semaforer, men deres værdi er begrænset til 0 og 1.
- Ventedrift hjælper dig med at kontrollere indgangen til en opgave i det kritiske afsnit
- Signal semaforoperation bruges til at kontrollere udgangen af en opgave fra et kritisk afsnit
- Optælling af semafor har ingen gensidig udelukkelse, mens binær semafor har gensidig udelukkelse
- Semafor betyder en signalmekanisme, mens Mutex er en låsemekanisme
- Semaphore giver mere end en tråd adgang til det kritiske afsnit
- En af de største begrænsninger ved en semafor er prioritetsinversion.