next up previous contents
Next: Aktives Warten Up: Prozesssynchronisation Previous: Prozesssynchronisation   Contents


Kritische Bereiche

Betrachten wir zunächst ein Beispiel, um uns mögliche Schwierigkeiten bei der Prozesskommunikation deutlich zu machen. In der Regel wird in Unix-Systemen das Drucken durch folgenden Mechanismus geregelt: Es gibt eine Druckerqueue in die verschiedene Prozesse Druckaufträge eintragen dürfen. Der Druckerdeamon (Prozess, der das Ausdrucken ausführt) arbeitet die Queue dann Schritt für Schritt ab. Möchte nun ein Prozess einen Druckauftrag erteilen, so stellt er an die Queue die Anfrage nach dem nächsten freien Platz und erhält eine Adresse. Wenn nun in diesem Moment der Scheduler entscheidet diesen Prozess auf rechenbereit zu setzen und ein nächster Prozess ebenfalls einen Druckauftrag erteilen will. Dieser neue Prozess erhält nun die gleiche Adresse und schreibt seinen Druckauftrag an diese Adresse. Nun kommt der erste Prozess wieder zum Zuge. Er schreibt nun seinerseits den Druckauftrag an diese Adresse und der Druckauftrag des zweiten Prozesses geht verloren.

Worin liegt in diesem Beispiel nun das Problem? Das Problem ist, dass beide Prozesse auf eine Variable, nämlich die Variable des nächsten freien Platzes in der Queue zugreifen. Also brauchen wir um das Problem zu lösen so etwas wie einen wechselseitigen Ausschluss, der es immer nur einem Prozess erlaubt für eine bestimmte Zeit auf eine solche Variable zuzugreifen. Man nennt die Abschnitte eines Programms, die auf solche kritischen Ressource zugreifen Kritische Bereiche.

Der wechselseitige Ausschluss sollte grundsätzlich folgenden vier Bedingungen genügen.

  1. Zu jedem Zeitpunkt darf sich nur ein Prozess in seinem kritischen Bereich befinden
  2. Es dürfen keine Annahmen über Ausführgeschwindigkeit und oder Anzahl der Prozessoren gemacht werden.
  3. Kein Prozess der sich außerhalb seines kritischen Bereichs befindet darf einen anderen Prozess blockieren.
  4. Kein Prozess soll unendlich lange auf seine Fortführung warten müssen.

Die erste Bedingung ist die Bedingung für die Lösung des benannten Problems. Die zweite Bedingung soll die Portabilität und Anwendbarkeit unter verschiedenen Rahmenbedingungen (z.B. es werden mehr oder weniger Prozesse auf dem Rechner gleichzeitig abgearbeitet) ermöglichen. Die dritte Bedingung ist eine Effizienzbedingung und die vierte Bedingung stellt sicher, dass sich ein System durch den wechselseitigen Ausschluss nicht selber blockiert.


next up previous contents
Next: Aktives Warten Up: Prozesssynchronisation Previous: Prozesssynchronisation   Contents
Prof. Dr. Pluemicke 2003-05-10