Was ist Semaphor?
Semaphor ist einfach eine Variable, die nicht negativ ist und von Threads gemeinsam genutzt wird. Ein Semaphor ist ein Signalisierungsmechanismus, und ein Thread, der auf ein Semaphor wartet, kann von einem anderen Thread signalisiert werden. Es verwendet zwei atomare Operationen, 1) Warten und 2) Signal für die Prozesssynchronisation.
Ein Semaphor erlaubt oder verbietet den Zugriff auf die Ressource, was davon abhängt, wie sie eingerichtet ist.
In diesem Betriebssystem-Tutorial lernen Sie:
- Charakteristisch für Semaphor
- Was ist Semaphor?
- Arten von Semaphoren
- Beispiel eines Semaphors
- Warte- und Signaloperationen in Semaphoren
- Semaphor gegen binäres Semaphor zählen
- Unterschied zwischen Semaphor und Mutex
- Vorteile von Semaphoren
- Nachteil von Semaphoren
Charakteristisch für Semaphor
Hier sind charakteristisch für ein Semaphor:
- Es ist ein Mechanismus, mit dem Aufgaben synchronisiert werden können.
- Es ist ein Synchronisationsmechanismus auf niedriger Ebene.
- Semaphor enthält immer einen nicht negativen ganzzahligen Wert.
- Semaphor kann mithilfe von Testoperationen und Interrupts implementiert werden, die mithilfe von Dateideskriptoren ausgeführt werden sollten.
Arten von Semaphoren
Die zwei gebräuchlichen Arten von Semaphoren sind
- Semaphoren zählen
- Binäre Semaphoren.
Semaphore zählen
Diese Art von Semaphor verwendet eine Zählung, mit deren Hilfe Aufgaben mehrmals erfasst oder freigegeben werden können. Wenn die anfängliche Zählung = 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, die es hat, entspricht seiner Anzahl.
Binäre Semaphoren
Die binären Semaphore sind dem Zählen von Semaphoren ziemlich ähnlich, aber ihr Wert ist 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. Dies ist einfach implementieren als Semaphore zählen.
Beispiel eines Semaphors
Das unten angegebene Programm ist eine schrittweise Implementierung, die die Verwendung und Deklaration von Semaphoren umfasst.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Warte- und Signaloperationen in Semaphoren
Beide Operationen werden verwendet, um die Prozesssynchronisation zu implementieren. Ziel dieser Semaphoroperation ist es, einen gegenseitigen Ausschluss zu erreichen.
Warten Sie auf den Betrieb
Diese Art der Semaphoroperation hilft Ihnen, den Eintrag einer Aufgabe in den kritischen Abschnitt zu steuern. Wenn jedoch der Wert von wait positiv ist, wird der Wert des wait-Arguments X dekrementiert. Bei einem negativen Wert oder einem Wert von Null wird keine Operation ausgeführt. Es wird auch als P (S) -Operation bezeichnet.
Nachdem der Semaphorwert verringert wurde, der negativ wird, wird der Befehl gehalten, bis die erforderlichen Bedingungen erfüllt sind.
Copy CodeP(S){while (S<=0);S--;}
Signalbetrieb
Diese Art der Semaphoroperation 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++;}
Semaphor gegen binäres Semaphor zählen
Hier sind einige wesentliche Unterschiede zwischen Zählen und binärem Semaphor:
Semaphor 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 hat einen gegenseitigen Ausschlussmechanismus. |
Unterschied zwischen Semaphor und Mutex
Parameter | Semaphor | Mutex |
Mechanismus | Es ist eine Art Signalmechanismus. | Es ist ein Verriegelungsmechanismus. |
Datentyp | Semaphor ist eine ganzzahlige Variable. | Mutex ist nur ein Objekt. |
Änderung | Die Warte- und Signaloperationen können ein Semaphor modifizieren. | Es wird nur von dem Prozess geändert, der eine Ressource anfordern oder freigeben kann. |
Ressourceneinteilung | Wenn keine Ressource frei ist, erfordert der Prozess eine Ressource, die eine Warteoperation ausführen soll. Es sollte warten, bis die Anzahl der Semaphore größer als 0 ist. | Wenn es gesperrt ist, muss der Prozess warten. Der Prozess sollte in einer Warteschlange gehalten werden. Auf diese muss nur zugegriffen werden, wenn der Mutex entsperrt ist. |
Faden | Sie können mehrere Programmthreads haben. | Sie können mehrere Programm-Threads im Mutex haben, jedoch nicht gleichzeitig. |
Eigentum | 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 das Zählen von Semaphoren und binären Semaphoren und | Mutex hat keine Untertypen. |
Operation | Der Semaphorwert 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 Prozess, der die Ressource anfordert, eine wait () -Operation 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 Vor- und Nachteile der Verwendung von Semaphore:
- Es ermöglicht mehr als einem Thread den Zugriff auf den kritischen Abschnitt
- Semaphoren sind maschinenunabhängig.
- Semaphoren sind im maschinenunabhängigen Code des Mikrokernels implementiert.
- Sie erlauben nicht, dass mehrere Prozesse in den kritischen Bereich gelangen.
- Da im Semaphor viel gewartet wird, wird niemals Prozesszeit und Ressourcen verschwendet.
- Sie sind maschinenunabhängig und sollten im maschinenunabhängigen Code des Mikrokerns ausgeführt werden.
- Sie ermöglichen eine flexible Verwaltung von Ressourcen.
Nachteil von Semaphoren
Hier sind Nachteile / Nachteile des Semaphors
- Eine der größten Einschränkungen eines Semaphors ist die Prioritätsinversion.
- Das Betriebssystem muss alle Anrufe verfolgen, um zu warten und das Semaphor zu signalisieren.
- Ihre Verwendung wird niemals erzwungen, sondern nur durch Konvention.
- Um Deadlocks im Semaphor zu vermeiden, müssen die Operationen Wait und Signal 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 Programmiererfehler.
- Dies kann aufgrund eines Programmiererfehlers zu einem Deadlock oder einer Verletzung des gegenseitigen Ausschlusses führen.
Zusammenfassung:
- Semaphor ist als eine Variable definiert, die nicht negativ ist und von Threads gemeinsam genutzt wird.
- Es ist ein Mechanismus, mit dem Aufgaben synchronisiert werden können.
- Das Zählsemaphor verwendet eine Zählung, mit deren Hilfe Aufgaben mehrmals erfasst oder freigegeben werden können.
- Die binären Semaphore sind dem Zählen von Semaphoren ziemlich ähnlich, aber ihr Wert ist auf 0 und 1 beschränkt.
- Mit dem Wartevorgang können Sie die Eingabe einer Aufgabe in den kritischen Bereich steuern
- Die Signal-Semaphor-Operation wird verwendet, um den Ausgang einer Aufgabe aus einem kritischen Abschnitt zu steuern
- Das Zählen von Semaphoren hat keinen gegenseitigen Ausschluss, während das binäre Semaphor einen gegenseitigen Ausschluss hat
- Semaphor bedeutet einen Signalmechanismus, während Mutex ein Verriegelungsmechanismus ist
- Mit Semaphor können mehr als ein Thread auf den kritischen Abschnitt zugreifen
- Eine der größten Einschränkungen eines Semaphors ist die Prioritätsinversion.