zur Startseite vorige Seite nächste Seite
 
Einführung in die Problematik: 
2 Prozesse - eine globale Variable 
 
Zusammenfassung  Bei der pseudoparallelen Programmierung muß berücksichtigt werden, daß die nichtdeterministische Ausführung von Prozessen, die auf globale Variablen zugreifen, zu nicht vorhersagbaren Belegungen dieser globalen Variablen führen kann. Im einführenden Beispiel des Vorlesungsskripts, zählen 2 Prozesse eine globale Variable hoch. In der Simulation haben Sie die Gelegenheit die Rolle des "Nichtdeterminismus" zu übernehmen, daß heißt sie können bestimmen, in welcher Reihenfolge die Prozesse ausgeführt werden, um dabei die Wirkung auf die Belegung der globalen Variable zu beobachten. 

Bemerkungen zu Problemen der Algorithmen finden Sie auf dieser wie auch auf den anderen Seiten dieses Lernprogramms, die eine Simulation enthalten, jeweils unterhalb der Simulation. Unterhalb der Simulation, damit sie nicht versehentlich Details lesen, die sie lieber mit der Simulation selbst herausfinden möchten.

 
Hinweise zur Simulation Da das Programmbeispiel mit den 2 Prozessen, die auf eine globale Variable zugreifen, sehr einfach ist, sollten Sie diese Gelegenheit nutzen, um sich mithilfe dieses Beispiels mit den grundsätzlichen Möglichkeiten aller Simulationen in diesem Lernprogramm vertraut zu machen: 

Aufbau der Simulation 

  • Die Simulation ist das interaktive Applet weiter unten, das sich durch seinen weißen Hintergrund und die graue Umrahmung vom statischen Rest dieser Seite abhebt.
  • Im linken Drittel der Simulation befinden sich die Quelltexte der dem Programmbeispiel zugrundeliegenden Prozesse, die in Pseudo-Pascal dargestellt sind. Der Prozess P wird dort, genauso wie im Skript "prozedur P" genannt und befindet sich über dem Prozess Q ("prozedur Q") im Applet. Das Hauptprogramm, in das Prozess P und Q eingebettet sind, befindet sich mit seinem Deklarationsteil über und mit seinem Steuerfluß unter dem Applet.
  • Die rechten zwei Drittel des Applets zeigen in der oberen Hälfte eine Visualisierung der dynamischen Abläufe der Simulation. In der unteren Hälfte befindet sich die dynamische Ablauftabelle, deren Struktur Sie aus dem Skript kennen.
Die Quelltexte der Prozesse 
  • Die Qelltexte sind in den Farben viollet und blau dargestellt, um Ihnen die Zuordnung zu den ikonischen Darstellungen der Prozesse und ihrer lokalen Variablen in der Animation zu ermöglichen.
  • Die "aktuellen atomaren Operationen" sind durch grüne Rahmen gekennzeichnet. 
  • Wird gerade eine atomare Operation eines Prozesses ausgeführt, dann wird diese atomare Operation durch einen roten Rahmen als aktiv gekennzeichnet. Gleichzeitig wird die zuvor aktuelle atomare Operation des anderen Prozesses durch einen grauen Rahmen als inaktiv gekennzeichnet.
Die Animation 
  • In der Animation sind die Prozesse als blau oder viollet ausgefüllte Kreise dargestellt, die die Auswirkungen der ausgeführten atomaren Operationen auf die Variablenbelegungen visualisieren, indem sie sich zu den betreffendenVariablen bewegen und diese lesen und/oder schreiben. Die Prozesse ziehen dabei eine Spur hinter sich her, damit Sie visuell nachfolziehen können, welche Variablen der Prozess gelesen und geschrieben hat, auch wenn die Animation schon beendet ist. Beim Schreiben führt die Spur in eine Variable hinein und beim Lesen führt sie sehr dicht an der Öffnung der Variablen vorbei. Die Prozesse verlassen ihre Ausgangsposition horizontal und kehren vertikal zurück.
  • Die lokalen Variablen sind in der gleichen Farbe dargestellt, wie der Prozess zu dem sie gehören.
  • Die globalen Variablen sind schwarz dargestellt.
Die Ablauftabelle 

Die Ablauftabellen besitzen die gleiche Struktur, wie im Skript. Von oben nach unten werden dort die ausgeführten atomaren Operationen der beiden Prozesse und die wichtigsten Variablenbelegungen eingetragen, entsprechend der Ausführungsfolge, die Sie durch die nachfolgend erklärte Steuerung interaktiv bestimmen. Die Ablauftabelle gewährleistet Ihnen also zu jeder Zeit einen Überblick auf die von Ihnen ausgefürte Folge von atomaren Operationen (den Trace), wie ein Debugger. 

Steuerung der Simulation 
 

  • Button "STEP_P" aktiviert den Prozess P, d. h. Prozess P führt seine aktuelle atomare Operation aus. Sie können die Auswirkungen der Ausführung sowohl in der Animation, als auch in der Ablauftabelle verfolgen. 
  • Button  "STEP_Q" funktioniert analog zu Button "STEP_P".
  • Button "BACK" ermöglicht es Ihnen, sich innerhalb Ihres Trace in der Ablauftabelle schrittweise rückwärts zu bewegen. Die Zeile in der Ablauftabelle, die schwarz hervorgehoben ist, markiert dabei Ihre Position im Trace. Egal an welcher Position Sie sich im Trace befinden, Sie können jederzeit mit "STEP_P" und "STEP_Q" den Trace  ab dieser Position auch anders fortsetzen. Der Trace wird dann ab dieser Position neu berechnet. Somit haben Sie die Möglichkeit Ihren Trace an jeder Stelle zu korrigieren ohne von vorne beginnen zu müssen (siehe Button "RESET" im übernächsten Punkt).
  • Button "FORWARD" ermöglicht es Ihnen, die atomaren Befehle in der Ablauftabelle ab Ihrer Position im Trace schrittweise ausführen zu lassen. Die Funktion ist z. B. nützlich, wenn Sie sich die Animationen zu den letzten 3 atomaren Operationen nochmal ansehen möchten. Dazu betätigen Sie zunächst 3 mal den Button "BACK", und dann 3 mal den Button "FORWARD".
  • Button "RESET" können Sie benutzen, um wieder den Ausgangszustand herzustellen. Alle Variablen werden entsprechend den Deklarationen des Hauptprogrammes, die über dem Applet stehen, neu initialisiert. Die Ablauftabelle wird geleert. 
  • Die Checkbox "ANIMATION" und der danebenliegende Slider ermöglichen Ihnen das Ein/Aus-Schalten der Animation, sowie die Regelung der Animationsgeschwindigkeit. Um die Simulationsgeschwindigkeit enorm zu erhöhen, schalten Sie auf langsamen Rechnern die Animation am besten aus. Sie können sich dann z.B. sehr schnell mit dem Button "FORWARD" innerhalb eines Trace an eine interessante Stelle bewegen, an der Sie die Animation wieder anschalten.
Benennung der Variablen 

Während die lokalen Variablen in den Quelltexten die Namen "i" und "a" tragen, werden sie in der Animation und in der Ablauftabelle mit "i_P", " i_Q" und "a_P", "a_Q" bezeichnet, entsprechend dem Prozeß, zu dem sie lokal sind.

 
program increment; 
const m = 10; 
var n : integer; 
Originalskript zu diesem Thema 
 
 
begin                            (*Hauptprogramm*) 
    n := 0; 
    parbegin P, Q parend; 
    writeln ('Summe : ', n); 
end;
 
 
Probleme des Algorithmus  Dieser Algorithmus hat eigenlich keine Probleme. Die globale Variable n kann nach Terminierung der beiden Prozesse zwar unterschiedliche Werte enthalten, sie hat aber keine weitere Bedeutung, als genau das aufzuzeigen. 
Entsprechend der Reihenfolge, in der die 2 Prozesse ausgeführt werden, gilt wenn beide Prozesse terminiert sind: 
2 <=  n <= 20
 

 
zur Startseite vorige Seite nächste Seite