Wat is semafoor?
Semafoor is gewoon een variabele die niet negatief is en wordt gedeeld tussen threads. Een seinpaal is een signaleringsmechanisme en een thread die op een seinpaal wacht, kan worden gesignaleerd door een andere thread. Het gebruikt twee atomaire bewerkingen, 1) wacht en 2) signaal voor de processynchronisatie.
Een semafoor staat wel of geen toegang tot de bron toe, wat afhangt van hoe deze is ingesteld.
In deze handleiding voor het besturingssysteem (OS) leert u:
- Kenmerkend voor Semaphore
- Wat is semafoor?
- Soorten semaforen
- Voorbeeld van Semaphore
- Wacht en signaleer operaties in semaforen
- Semafoor tellen versus binaire semafoor
- Verschil tussen Semaphore en Mutex
- Voordelen van semaforen
- Nadeel van semaforen
Kenmerkend voor Semaphore
Hier zijn kenmerkend voor een seinpaal:
- Het is een mechanisme dat kan worden gebruikt om taken te synchroniseren.
- Het is een synchronisatiemechanisme op laag niveau.
- Semafoor bevat altijd een niet-negatieve gehele waarde.
- Semafoor kan worden geïmplementeerd met behulp van testbewerkingen en interrupts, die moeten worden uitgevoerd met behulp van bestandsdescriptors.
Soorten semaforen
De twee meest voorkomende soorten semaforen zijn
- Semaforen tellen
- Binaire semaforen.
Semaforen tellen
Dit type semafoor gebruikt een telling die helpt om een taak meerdere keren te verwerven of vrij te geven. Als de initiële telling = 0, moet de tellende semafoor worden gemaakt in de niet-beschikbare staat.
Als het aantal echter> 0 is, wordt de semafoor gemaakt in de beschikbare staat en is het aantal tokens dat het heeft gelijk aan het aantal.
Binaire semaforen
De binaire semaforen lijken veel op het tellen van semaforen, maar hun waarde is beperkt tot 0 en 1. In dit type semafoor werkt de wachtbewerking alleen als semafoor = 1, en de signaalbewerking slaagt als semafoor = 0. Het is gemakkelijk om implementeren dan semaforen tellen.
Voorbeeld van Semaphore
Het onderstaande programma is een stapsgewijze implementatie, waarbij de semafoor wordt gebruikt en aangegeven.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Wacht en signaleer operaties in semaforen
Beide bewerkingen worden gebruikt om processynchronisatie te implementeren. Het doel van deze semafooroperatie is om wederzijdse uitsluiting te krijgen.
Wacht op operatie
Dit type semafoorbewerking helpt u om de invoer van een taak in de kritieke sectie te regelen. Als de waarde van wait echter positief is, wordt de waarde van het wait-argument X verlaagd. In het geval van een negatieve of nulwaarde, wordt er geen bewerking uitgevoerd. Het wordt ook wel P (S) -bewerking genoemd.
Nadat de semafoorwaarde is verlaagd, die negatief wordt, wordt de opdracht vastgehouden totdat aan de vereiste voorwaarden is voldaan.
Copy CodeP(S){while (S<=0);S--;}
Signaalwerking
Dit type semafoorbewerking wordt gebruikt om het verlaten van een taak uit een kritieke sectie te regelen. Het helpt om de waarde van het argument te verhogen met 1, die wordt aangeduid als V (S).
Copy CodeP(S){while (S>=0);S++;}
Semafoor tellen versus binaire semafoor
Hier zijn enkele belangrijke verschillen tussen tellen en binaire semafoor:
Semafoor tellen | Binaire Semafoor |
Geen wederzijdse uitsluiting | Wederzijdse uitsluiting |
Een willekeurig geheel getal | Waarde alleen 0 en 1 |
Meer dan één slot | Slechts één slot |
Zorg voor een reeks processen | Het heeft een wederzijds uitsluitingsmechanisme. |
Verschil tussen Semaphore en Mutex
Parameters | Semafoor | Mutex |
Mechanisme | Het is een soort signaleringsmechanisme. | Het is een vergrendelingsmechanisme. |
Data type | Semafoor is een variabele met een geheel getal. | Mutex is slechts een object. |
Wijziging | De wacht- en signaalbewerkingen kunnen een semafoor wijzigen. | Het wordt alleen gewijzigd door het proces dat een bron kan aanvragen of vrijgeven. |
Beheer van middelen | Als er geen bron vrij is, heeft het proces een bron nodig die een wachtbewerking moet uitvoeren. Het moet wachten tot de telling van de semafoor groter is dan 0. | Als het is vergrendeld, moet het proces wachten. Het proces moet in een wachtrij worden gehouden. Dit hoeft alleen te worden geopend als de mutex is ontgrendeld. |
Draad | U kunt meerdere programma-threads hebben. | U kunt meerdere programma-threads in mutex hebben, maar niet tegelijkertijd. |
Eigendom | De waarde kan worden gewijzigd door elk proces dat de bron vrijgeeft of verkrijgt. | Objectvergrendeling wordt alleen vrijgegeven door het proces, dat de vergrendeling erop heeft verkregen. |
Soorten | Soorten semafoor tellen semafoor en binaire semafoor en | Mutex heeft geen subtypen. |
Operatie | De semafoorwaarde wordt gewijzigd met behulp van wait () en signal (). | Mutex-object is vergrendeld of ontgrendeld. |
Bezetting van middelen | Het is bezet als alle bronnen worden gebruikt en het proces dat om een bron vraagt, de handeling wait () uitvoert en zichzelf blokkeert totdat het aantal semaforen> 1 wordt. | Als het object al is vergrendeld, wacht het proces dat om bronnen vraagt, en wordt het door het systeem in de wachtrij geplaatst voordat de vergrendeling wordt opgeheven. |
Voordelen van semaforen
Hier zijn de voor- / voordelen van het gebruik van Semaphore:
- Het geeft meer dan één thread toegang tot de kritieke sectie
- Semaforen zijn machineonafhankelijk.
- Semaforen worden geïmplementeerd in de machineonafhankelijke code van de microkernel.
- Ze laten niet toe dat meerdere processen de kritieke sectie betreden.
- Omdat er in de semafoor een drukke wachttijd is, is er nooit een verspilling van procestijd en middelen.
- Ze zijn machineonafhankelijk, wat moet worden uitgevoerd in de machineonafhankelijke code van de microkernel.
- Ze maken flexibel beheer van middelen mogelijk.
Nadeel van semaforen
Hier zijn nadelen / nadeel van semafoor
- Een van de grootste beperkingen van een semafoor is prioriteitsinversie.
- Het besturingssysteem moet alle oproepen bijhouden om te wachten en seinpaal te geven.
- Het gebruik ervan wordt nooit afgedwongen, maar het is alleen volgens afspraak.
- Om impasses in de semafoor te voorkomen, moeten de bewerkingen Wait en Signal in de juiste volgorde worden uitgevoerd.
- Semafoorprogrammering is ingewikkeld, dus er zijn kansen om geen wederzijdse uitsluiting te bereiken.
- Het is ook geen praktische methode voor grootschalig gebruik, aangezien het gebruik ervan leidt tot verlies van modulariteit.
- Semafoor is meer vatbaar voor programmeerfouten.
- Het kan een impasse of schending van wederzijdse uitsluiting veroorzaken als gevolg van een programmeerfout.
Overzicht:
- Semafoor wordt gedefinieerd als een variabele die niet negatief is en wordt gedeeld tussen threads.
- Het is een mechanisme dat kan worden gebruikt om taken te synchroniseren.
- Semafoor tellen gebruikt een telling die helpt om de taak meerdere keren te verwerven of vrij te geven.
- De binaire semaforen lijken veel op het tellen van semaforen, maar hun waarde is beperkt tot 0 en 1.
- Wachten helpt u om de invoer van een taak in de kritieke sectie te regelen
- Signaalseinpaal wordt gebruikt om het verlaten van een taak uit een kritieke sectie te regelen
- Counting Semaphore kent geen wederzijdse uitsluiting, terwijl Binary Semaphore wederzijdse uitsluiting heeft
- Semafoor betekent een signaleringsmechanisme, terwijl Mutex een vergrendelingsmechanisme is
- Semaphore geeft meer dan één thread toegang tot de kritieke sectie
- Een van de grootste beperkingen van een semafoor is prioriteitsinversie.