Was ist Semaphor? Zählen, Binärtypen mit Beispiel

Was ist Semaphor?

Semaphor ist einfach eine Variable, die nicht negativ ist und von Threads gemeinsam genutzt wird. Ein Semaphor ist ein Signalmechanismus, und ein Thread, der auf einen Semaphor wartet, kann von einem anderen Thread signalisiert werden. Es werden zwei verwendet atomIC-Operationen, 1) Warten und 2) Signal für den Prozess syncChronisierung.

Ein Semaphor erlaubt oder verbietet den Zugriff auf die Ressource, je nachdem, wie es eingerichtet ist.

Charakteristisch für Semaphor

Hier sind charakteristisch für einen Semaphor:

  • Es handelt sich um einen Mechanismus, der zur Bereitstellung genutzt werden kann syncChronisierung von Aufgaben.
  • Es ist ein niedriges Niveau syncChronologiemechanismus.
  • Semaphore enthält immer einen nicht negativen ganzzahligen Wert.
  • Semaphore können mithilfe von Testoperationen und Interrupts implementiert werden, die mithilfe von Dateideskriptoren ausgeführt werden sollten.

Arten von Semaphoren

Die beiden häufigsten Arten von Semaphoren sind

  • Ampeln zählen
  • Binäre Semaphore.

Semaphore zählen

Diese Art von Semaphor verwendet eine Zählung, die dazu beiträgt, dass Aufgaben mehrmals erfasst oder freigegeben werden. Wenn die anfängliche Anzahl = 0 ist, sollte das Zählsemaphor im nicht verfügbaren Zustand erstellt werden.

Semaphore zählen
Semaphore zählen

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äre Semaphore

Die binären Semaphoren ähneln Zählsemaphoren, ihr Wert ist jedoch auf 0 und 1 beschränkt. Bei diesem Semaphortyp funktioniert die Warteoperation nur, wenn Semaphor = 1, und die Signaloperation ist erfolgreich, wenn Semaphor = 0. Das ist einfach implementieren als das Zählen von Semaphoren.

Binäre Semaphore

Binäre Semaphore

Beispiel für Semaphor

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;

Warte- und Signaloperationen in Semaphoren

Beide Operationen werden zur Implementierung verwendet Prozessdefinierung syncHronisierung. Das Ziel dieser Semaphor-Operation besteht darin, einen gegenseitigen Ausschluss zu erreichen.

Warten Sie auf den Betrieb

Mit dieser Art von Semaphor-Operation können Sie den Eintritt einer Aufgabe in den kritischen Abschnitt steuern. Wenn der Wert von wait jedoch positiv ist, wird der Wert des Wartearguments X dekrementiert. Bei einem negativen Wert oder Nullwert wird keine Operation ausgeführt. Sie 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--;
}

Signalbetrieb

Diese Art von Semaphore-Operation wird verwendet, um das Verlassen einer Aufgabe aus einem kritischen Abschnitt zu steuern. Es hilft, den Wert des Arguments um 1 zu erhöhen, was als V(S) bezeichnet wird.

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Zählsemaphor vs. Binärsemaphor

Hier sind einige Hauptunterschiede zwischen Zählen und binärem Semaphor:

Semaphore zählen Binäres Semaphor
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 Semaphor und Mutex

Parameter Semaphor Mutex
Mechanismus Es handelt sich um eine Art Signalmechanismus. Es handelt sich um einen Verriegelungsmechanismus.
Dateityp Semaphor ist eine ganzzahlige Variable. Mutex ist nur ein Objekt.
Änderung Die Warte- und Signaloperationen 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 den Wartevorgang ausführen soll. Es sollte gewartet werden, bis der Zählerstand 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.
Gewinde Sie können mehrere Programmthreads haben. Sie können mehrere Programmthreads in Mutex haben, jedoch nicht gleichzeitigneogewöhnlich.
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 Semaphoren sind Zählsemaphore und binäre Semaphore Mutex hat keine Untertypen.
Produktion Der Semaphorwert wird mithilfe der Operationen wait () und signal () geändert. Das Mutex-Objekt ist gesperrt oder entsperrt.
Ressourcenbelegung Es ist belegt, wenn alle Ressourcen verwendet werden und der Prozess, der die Ressource anfordert, die Operation „wait()“ ausführt und sich selbst blockiert, bis die Semaphoranzahl > 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 Semaphoren

Hier sind die Vorteile/Vorteile der Verwendung von Semaphore:

  • Dadurch kann mehr als ein Thread auf den kritischen Abschnitt zugreifen
  • Semaphore sind maschinenunabhängig.
  • Semaphore 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 Aufrufe verfolgen, um zu warten und Semaphore zu signalisieren.
  • Ihre Verwendung wird niemals erzwungen, sondern erfolgt nur durch Konvention.
  • Um de zu vermeidenadlocks in Semaphor müssen die Wait- und Signal-Operationen in der richtigen Reihenfolge ausgeführt werden.
  • Die Semaphorprogrammierung 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.
  • Semaphor ist anfälliger für Programmierfehler.
  • Es kann verursachen deadlock oder Verletzung des gegenseitigen Ausschlusses aufgrund eines Programmierfehlers.

Zusammenfassung

  • Semaphor ist als eine Variable definiert, die nicht negativ ist und von Threads gemeinsam genutzt wird.
  • Es handelt sich um einen Mechanismus, der zur Bereitstellung genutzt werden kann syncChronisierung von Aufgaben.
  • 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 steuern
  • Der Signalsemaphorbetrieb wird verwendet, um das Verlassen einer Aufgabe aus einem kritischen Abschnitt zu steuern
  • Zählende Semaphore haben keinen gegenseitigen Ausschluss, während binäre Semaphore gegenseitigen Ausschluss haben
  • Semaphor bedeutet einen Signalmechanismus, während Mutex ein Sperrmechanismus ist
  • Semaphore ermöglicht mehr als einem Thread den Zugriff auf den kritischen Abschnitt
  • Eine der größten Einschränkungen eines Semaphors ist die Prioritätsumkehr.