Was ist ein Semaphor ?


Ein Semaphor (griech. Zeichenträger) ist ein Sperrmechanismus, der unter bestimmten Bedingungen Prozesse blockiert.
Semaphore werden u.a. auch in UNIX verwendet.

Teile eines Semaphors

  1. Datenstrukturen

    • Zählvariable COUNT :
      Gibt die Anzahl der Prozesse an, die den Semaphor zur Zeit ohne Blockierung passieren dürfen

    • Warteraum für blockierte Prozesse
      passives Warten, i.a. nach First-in-first-out Prinzip

  2. Zugiffsoperationen

    • Initialisierung der Zählvariablen

      INIT(int init_wert){
      COUNT=init_wert;
      }

    • P-Operation (passeeren)

      P(){
      if(COUNT==0){blockiere;}
      COUNT=COUNT-1;
      }

    • V-Operation (vrijgeven)

      V(){
      COUNT=COUNT+1;
      if(ex. blockierter Prozeß im Warteraum)
      {deblockiere wartenden Prozeß;}
      }

In der folgenden Darstellung wird der Aufbau eines Semaphors verdeutlicht.
Durch Eingabe eines Init-Wertes (Zahl zwischen 0 und 99, Abschluß mit Return) in dem Textfeld hinter Init kann die COUNT-Variable gesetzt werden.
Durch Anklicken der Buttons P-Operation und V-Operation werden die entsprechenden Funktionen ausgeführt.
Die COUNT-Variable und die Anzahl der wartenden Prozesse kann durch Anklicken des CLEAR-Buttons auf Null gesetzt werden.
Der gerade aktive Zweig der Grafik wird rot dargestellt.



FH-Köln hoch weiter