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.

Zählen Semaphores
Zählen Semaphores

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.

Binär Semaphores

Binär Semaphores

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.