Was ist Semaphore? Zählen, Binärtypen mit Beispiel
⚡ Intelligente Zusammenfassung
Semaphore In einem Betriebssystem ist eine nicht-negative Ganzzahlvariable, die von Threads gemeinsam genutzt wird und den Zugriff auf gemeinsam genutzte Ressourcen durch zwei atomare Operationen, wait und signal, koordiniert, wodurch Wettlaufsituationen während der Prozesssynchronisation verhindert werden.

Was ist Semaphore?
Semaphore ist einfach eine Variable, die nicht negativ ist und von Threads gemeinsam genutzt wird. Ein Semaphor ist ein Signalmechanismus, und ein Thread, der auf ein Semaphor wartet, kann von einem anderen Thread signalisiert werden. Es werden zwei atomare Operationen verwendet: 1) Warten und 2) Signal zur Prozesssynchronisation.
Ein Semaphor erlaubt oder verbietet den Zugriff auf die Ressource, je nachdem, wie es eingerichtet ist.
Eigenschaften Semaphore
Hier sind die Merkmale eines Semaphors:
- Es handelt sich dabei um einen Mechanismus, der zur Synchronisierung von Aufgaben verwendet werden kann.
- Es handelt sich um einen Synchronisierungsmechanismus auf niedriger Ebene.
- Semaphore enthält immer einen nicht negativen ganzzahligen Wert.
- Semaphore kann mithilfe von Testvorgängen und Interrupts implementiert werden, die mithilfe von Dateideskriptoren ausgeführt werden sollten.
Arten von Semaphores
Die beiden gebräuchlichsten Arten von Semaphoren sind:
- Ampeln zählen
- Binäre Semaphore
Zählen Semaphores
Diese Art von Semaphore Es wird ein Zähler verwendet, der es ermöglicht, eine Aufgabe mehrmals zu übernehmen oder freizugeben. Wenn der Anfangszähler gleich 0 ist, sollte das Zählsemaphor im nicht verfügbaren Zustand erstellt werden.
Wenn die Anzahl jedoch > 0 ist, wird das Semaphor im verfügbaren Zustand erstellt und die Anzahl der Token, über die es verfügt, entspricht seiner Anzahl.
Binär Semaphores
Binäre Semaphore ähneln Zählsemaphoren, ihr Wert ist jedoch auf 0 und 1 beschränkt. Bei diesem Semaphortyp funktioniert die Warteoperation nur, wenn Semaphor = 1 ist, und die Signaloperation ist erfolgreich, wenn Semaphor = 0 ist. Sie sind einfacher zu implementieren als Zählsemaphore.
Beispiel von Semaphore
Das untenstehende Programm ist eine schrittweise Implementierung, die die Verwendung und Deklaration eines Semaphors beinhaltet.
Shared var mutex: semaphore = 1;
Process i
begin
.
.
P(mutex);
execute CS;
V(mutex);
.
.
End;
Warten Sie und Signal Operain Semaphores
Beide Operationen dienen zur Implementierung ProzesssynchronisationDas Ziel dieser Semaphoroperation besteht darin, gegenseitigen Ausschluss zu erreichen.
Warten auf OperaProduktion
Mit dieser Art von Semaphoroperation können Sie den Eintritt einer Aufgabe in den kritischen Abschnitt steuern. Wenn der Wert von wait jedoch positiv ist, wird der Wert des Wait-Arguments X verringert. Bei einem negativen Wert oder einem Nullwert wird keine Operation ausgeführt. Diese Operation wird auch P(S)-Operation genannt.
Nachdem der Semaphorwert verringert wurde, der negativ wird, wird der Befehl angehalten, bis die erforderlichen Bedingungen erfüllt sind.
P(S)
{
while (S<=0);
S--;
}
Signal Betrieb
Diese Art von Semaphore Die Operation wird verwendet, um den Ausstieg einer Aufgabe aus einem kritischen Abschnitt zu steuern. Sie hilft, den Wert des Arguments um 1 zu erhöhen, was als V(S) bezeichnet wird.
P(S)
{
while (S>=0);
S++;
}
Zählen Semaphore vs. Binär Semaphore
Hier sind einige Hauptunterschiede zwischen Zählen und binärem Semaphor:
| Zählen Semaphore | Binär Semaphore |
| Kein gegenseitiger Ausschluss | Gegenseitiger Ausschluss |
| Beliebiger ganzzahliger Wert | Wert nur 0 und 1 |
| Mehr als ein Steckplatz | Nur ein Steckplatz |
| Stellen Sie eine Reihe von Prozessen bereit | Es verfügt über einen gegenseitigen Ausschlussmechanismus. |
Unterschied zwischen Semaphore gegen Mutex
Die folgende Tabelle vergleicht ein Semaphor mit Mutex über mehrere Parameter hinweg:
| Kenngrößen | Semaphore | Mutex |
| Mechanismus | Es handelt sich um eine Art Signalmechanismus. | Es handelt sich um einen Verriegelungsmechanismus. |
| Dateityp | Semaphore ist eine ganzzahlige Variable. | Mutex ist nur ein Objekt. |
| Änderung | Die Warte- und Signalvorgänge können ein Semaphor ändern. | Es wird nur durch den Prozess geändert, der eine Ressource anfordern oder freigeben kann. |
| Resourcenmanagement | Wenn keine Ressource frei ist, benötigt der Prozess eine Ressource, die eine Warteoperation ausführen soll. Er soll warten, bis der Zähler des Semaphors größer als 0 ist. | Wenn es gesperrt ist, muss der Prozess warten. Der Prozess sollte in einer Warteschlange gehalten werden. Darauf muss nur zugegriffen werden, wenn der Mutex entsperrt ist. |
| Thread | Sie können mehrere Programmthreads haben. | Sie können mehrere Programm-Threads im Mutex haben, aber nicht gleichzeitig. |
| Eigentumsstruktur | Der Wert kann durch jeden Prozess geändert werden, der die Ressource freigibt oder erhält. | Die Objektsperre wird nur von dem Prozess aufgehoben, der die Sperre dafür erhalten hat. |
| Zu den Arten | Arten von Semaphore sind Zählsemaphor und Binärsemaphor. | Mutex hat keine Untertypen. |
| Produktion | Semaphore Der Wert wird mit den Operationen wait() und signal() geändert. | Das Mutex-Objekt ist gesperrt oder entsperrt. |
| Ressourcenbelegung | Es ist belegt, wenn alle Ressourcen verwendet werden und der die Ressource anfordernde Prozess die Wait()-Operation ausführt und sich selbst blockiert, bis die Semaphorenanzahl >1 wird. | Falls das Objekt bereits gesperrt ist, wartet der Prozess, der Ressourcen anfordert, und wird vom System in die Warteschlange gestellt, bevor die Sperre aufgehoben wird. |
Vorteile von Semaphores
Hier sind die Vorteile/Vorteile der Verwendung aufgeführt Semaphore:
- Es ermöglicht mehreren Threads den Zugriff auf den kritischen Abschnitt.
- Semaphores sind maschinenunabhängig.
- Semaphores werden im maschinenunabhängigen Code des Mikrokernels implementiert.
- Sie erlauben nicht, dass mehrere Prozesse in den kritischen Abschnitt gelangen.
- Da im Semaphor viel Wartezeit herrscht, kommt es nie zu einer Verschwendung von Prozesszeit und Ressourcen.
- Sie sind maschinenunabhängig und sollten im maschinenunabhängigen Code des Mikrokernels ausgeführt werden.
- Sie ermöglichen eine flexible Verwaltung der Ressourcen.
Nachteile von Semaphores
Hier sind die Nachteile/Nachteile der Semaphore:
- Eine der größten Einschränkungen eines Semaphors ist die Prioritätsumkehr.
- Das Betriebssystem muss behalten track aller Aufrufe zum Warten und Signalisieren des Semaphors.
- Ihre Verwendung wird niemals erzwungen, sondern erfolgt nur durch Konvention.
- Um Deadlocks im Semaphor zu vermeiden, müssen die Wait- und Signal Operationen müssen in der richtigen Reihenfolge ausgeführt werden.
- Semaphore Programmierung ist kompliziert, daher besteht die Möglichkeit, dass kein gegenseitiger Ausschluss erreicht wird.
- Es ist auch keine praktische Methode für den Einsatz in großem Maßstab, da ihre Verwendung zu einem Verlust der Modularität führt.
- Semaphore ist anfälliger für Programmierfehler.
- Es kann verursachen Deadlock oder Verletzung des gegenseitigen Ausschlusses aufgrund eines Programmierfehlers.


