Semaphor

aus WB Wiki; freien Wissensdatenbank rund ums Thema Computer
Version vom 3. Februar 2008, 16:05 Uhr von Singh (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Ein Semaphor ist ein Zugriffsmechanismus das in der Prozesssynchronisation eingesetzt wird. Durch ein Semaphor wird der Zugriff auf einer Ressource geregelt. Ein Semaphor kennt zwei Zustände. Entweder frei oder belegt. Dieser Zugriffsmechanismus wurde im Jahre 1965 von Edsger W. Dijkstra entwickelt. Es arbeitet mit zwei speziellen Operatoren zusammen. Bevor ein Semaphor erzeugt wird, wird eine Zahl festgelegt, wie das Maximum an Threads bzw. Prozesse sein soll, die gleichzeitig auf einer Ressource zugreifen können.

Pseudo C-Code der Operationen:

void P () {
  zaehler = zaehler - 1;
  if (zaehler < 0)
     block (queue); // Blockieren des Prozesses, Einreihung in Warteschlange 
}

void V () {
  zaehler = zaehler + 1;
  if (zaehler <= 0)
     ready (queue); // Entblockieren eines Prozesses aus der Warteschlange 
}


Bei einem Aufruf der P-Operation, wird der Zähler um eins verringert. Solange der Zähler größer als 0 ist, setzt der Prozess seine Aktion fort. Ist der Zähler kleiner als 0 wird der Prozess blockiert und in die Warteschlange eingereiht. Bei einem Aufruf der V-Operation, wird der Zähler um eins erhöht. Wenn der Zählerstand vorher bei -1 war, dann würde der am längsten wartende Prozess aus der Warteschlange entfernt. Beim überschreiten der festgelegten Zahl, wird der Prozess blockiert und in die Warteschlange eingereiht. Wenn mehrere Prozesse gleichzeitig auf den Semaphor zugreifen wollen, werden die Aufrufe der Operationen P und V hintereinander ausgeführt.

In der Programmierung werden andere Bezeichnungen verwendet um auf den Programmierschnittstellen zugreifen zu können: P-Operation = acquire, wait, down V-Operation= release, signal, up

Semaphore werden in vielen Betriebssystemen, die Multitasking beherrschen eingesetzt.