Suche Home Einstellungen Anmelden Hilfe  

7. Stunde

1. UG: Wie werden Schloßvariablen durch die Schüler definiert?
            Reaktivierung der Ergebnisse der letzten Stunden
            (Programm für die Brücke: welche Schwierigkeiten treten auf?)

2. Motivation: (Die Schloßvariablen sind hier am Beispiel der Philosophen dargestellt. Genauso gut eignet sich das Beispiel der Brücke bzw. der ;Materialverwaltung oder andere Vorgänge, die nebenläufig ablaufen.)

Schloßvariable (lock variable)
Wie bisher deutlich geworden ist, müssen die nebenläufigen Prozesse synchronisiert werden (Kooperation und Konkurrenz). Die zeitliche Abfolge beim Eintritt der einzelnen Prozesse in einen kritischen Abschnitt muß aufeinander abgestimmt werden.
Kritischer Abschnitt heißt für unsere Philosophen, sie haben Hunger (Für die Brücke: befahren der Brücke). Solange einer essen möchte, gibt es keine Probleme.aber wenn zwei benachbarte Philosophen auf einmal zulangen wollen, müssen sie sich erst vergewissern, daß zwei Stäbchen zur Verfügung liegen. Wenn der eine nachschaut, darf kein anderer das Stäbchen wegnehmen. Also ein Zugriffsverbot für die beiden Nachbarn.

Deswegen denkt man sich eine Variable aus, die den Zugang zum kritischen Abschnitt regelt. Allgemein:

Tafelbild oder Folie:
Eine Klasse kritischer Abschnitte wird mit einer Schloßvariablen versehen. Alle Prozesse, die diesen kritischen Abschnitt betreten, müssen zuerst mit dem Schloß die Öffnung des kritischen Abschnittes erreichen und beim Verlassen diesen mit Hilfe dieser Variablen wieder freigeben .

Für den Philosophen heißt das, er muß sich überzeugen, "sind zwei Stäbchen zum Essen für mich frei". Nach dem Essen muß er die Stäbchen wieder so auf dem Tisch ablegen, daß sie für die anderen Philosophen zu erreichen sind.
Programmtechnisch ist die Schloßvariable eine abstrakte Datenstruktur, auf die alle Prozesse zugreifen müssen, wenn sie den kritischen Abschnitt betreten wollen. Den Vorgang kann man sich folgendermaßen vorstellen:

Ein Prozess kommt an den kritischen Abschnitt. Das Schloß findet er offen vor. Er betritt den Abschnitt und verschließt von innen das Schloß. Somit kann kein anderer folgen. Ist er fertig mit seiner Verrichtung, verläßt er den Abschnitt und öffnet das Schloß wieder. Der nächste hat nun Zutritt.

Jede Klasse kritischer Abschnitte benötigt eigene Schloßvariablen. Die Implementierung dieser Variablen muß so erfolgen, daß folgende Dinge geregelt werden:

In der Literatur werden verschiedene Implementierungen vorgestellt, mit denen diese Probleme bewältigt werden. Allerdings geht es widerspruchsfrei nur für 2 nebenläufige Prozesse auf einem Prozessor. Treten mehrere Prozesse nebenläufig auf, gibt es neue Probleme.

Probleme im UG mit den Schülern diskutieren
Nachteile der Schloßvariablen:
Wenn ein Prozess auf das Eintreten der Bedingung Öffnung der Schloßvariablen wartet, fragt er diese Variable immer wieder ab, ob sie den Abschnitt freigibt. Dazu muß er den Prozessor immer wieder benutzen. Somit kann der Prozessor aber nicht für andere Prozesse bereit stehen bzw. wird in der Arbeit für diese immer wieder unterbrochen. Diesen Vorgang nennt man aktives Warten. Ein Philosoph fragt ständig den anderen Essenden neben ihm: "Ist deinStäbchen frei?". So kann der Essende nicht weiter essen, schließlich ist er höflich und spricht nicht mit vollem Mund. Also wird der Fragende nie zu dem zweiten Stäbchen kommen.
Zum anderen kann die Zahl der aktiven Prozesse nicht variabel gehalten werden, sondern muß von Anfang an bekannt sein. Hat er es immer mit einem oder zwei Nachbarn zu tun?
Als Drittes kommt die Schwierigkeit dazu, daß kein Prozess im kritischen Abschnitt terminieren darf. D.h., zu jeder Öffnung eines kritischen Abschnittes für P1 muß eine Freigabe für P2 gehören, wenn P1 den Abschnitt verläßt, sonst ist eine Synchronisation der Prozesse gefährdet.
D.h., der Philosoph muß das Stäbchen wieder zurücklegen, wenn er satt ist und nicht weiter in der Hand halten, vielleicht an der Strin kratzen o.ä..

Ausweg : Semaphore
                                                                      Stundenübersicht

zurück zu den Unterrichtszielen
                                                                                                                         Gliederung

Benutzer: gast • Besitzer: didaktik • Zuletzt geändert am: