Was bedeutet Semaphore? Zählen, Binärtypen mit Beispiel
Was bedeutet 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.
Charakteristisch für Semaphore
Hier sind charakteristisch für einen Semaphor:
- 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 häufigsten Arten von Semaphoren sind
- Ampeln zählen
- Binäre Semaphore.
Zählen Semaphores
Diese Art von Semaphore verwendet einen Zähler, der dabei hilft, Aufgaben mehrmals abzurufen oder freizugeben. Wenn der anfängliche Zähler = 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
Die binären Semaphoren sind den Zählsemaphoren recht ähnlich, ihr Wert ist jedoch auf 0 und 1 beschränkt. Bei dieser Art von Semaphor funktioniert die Warteoperation nur, wenn Semaphor = 1 ist, und die Signaloperation ist erfolgreich, wenn Semaphor = 0 ist. Sie ist einfacher zu implementieren als Zählsemaphoren.
Beispiel von Semaphore
Das unten angegebene Programm ist eine schrittweise Implementierung, die die Verwendung und Deklaration von Semaphoren umfasst.
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.
Copy CodeP(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.
Copy CodeP(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
Parameter | 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. |
Impressum | 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. |
Typen | Arten von Semaphore sind Zähl- und Binärsemaphore und | 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:
- Dadurch kann mehr als ein Thread auf den kritischen Abschnitt zugreifen
- 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.
Nachteil von Semaphoren
Hier sind die Vor- und Nachteile von Semaphoren
- Eine der größten Einschränkungen eines Semaphors ist die Prioritätsumkehr.
- Das Betriebssystem muss alle Warte- und Signalaufrufe im Auge behalten.
- 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 Da die Programmierung kompliziert ist, besteht die Möglichkeit, dass die gegenseitige Ausgrenzung nicht 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.
Zusammenfassung
- Semaphore wird als eine Variable definiert, die nicht negativ ist und zwischen Threads gemeinsam genutzt wird.
- Es handelt sich dabei um einen Mechanismus, der zur Synchronisierung von Aufgaben verwendet werden kann.
- Das Zählsemaphor verwendet eine Zählung, mit deren Hilfe die Aufgabe mehrmals erfasst oder freigegeben werden kann.
- Die binären Semaphore ähneln den Zählsemaphoren, ihr Wert ist jedoch auf 0 und 1 beschränkt.
- Der Wartevorgang hilft Ihnen, den Eintritt einer Aufgabe in den kritischen Abschnitt zu kontrollieren.
- Signal Die Semaphoroperation wird verwendet, um den Austritt einer Aufgabe aus einem kritischen Abschnitt zu steuern.
- Zählen Semaphore hat keinen gegenseitigen Ausschluss, wohingegen Binär Semaphore hat gegenseitigen Ausschluss
- Semaphore bedeutet einen Signalmechanismus, während Mutex ein Sperrmechanismus ist
- Semaphore ermöglicht mehreren Threads den Zugriff auf den kritischen Abschnitt
- Eine der größten Einschränkungen eines Semaphors ist die Prioritätsumkehr.