Einsendearbeit 1 1672

EA 1 (1672)

Frage vorab: Weiß einer, welches Einsendedatum nun gilt? Auf der EA vom Kurstext steht 14.06., im WebAssign ist der 31.05. vermerkt und der 14.06. gilt für EA2.


/update 19:00h - Aufgabe 1c, 3 und 4 d+e aktualisiert
Hier sind meine Vorschläge. Achtung, Wall of Text. Hoffentlich ohne grobe Denkfehler ;)

Aufgabe 1:
a) Um dem Zwei-Phasen-Sperrprotokoll zu genügen, muss T2 a sperren, bevor
- ein Zugriff von T2 auf a erfolgt
- UNLOCK(b) eingeleitet wird (generell: alle LOCK(s) immer vor UNLOCK(s))
- andere Transaktionen auf a zugreifen (und damit ihrerseits a sperren)

ersetze somit...
T2: LOCK(b), R(a), R(b), W(a)
durch...
T2: LOCK(b), LOCK(a), R(a), R(b), W(a), UNLOCK(a)
.

b) Um strikter Zweiphasigkeit zu genügen, dürfen alle Sperren erst zum Transaktionsende freigegeben werden. Da T2 und T3 sehr früh bereits alle drei Objekte sperren und diese Sperren erst am Ende aufheben dürfen, muss T1 warten, bis T2 und T3 fertig sind:

LOCK2(b), LOCK2(a), R2(a), R2(b), W2(a), LOCK3(c), R3(c), W3(c), W2(b), UNLOCK2(b), UNLOCK2(a), LOCK3(a), R3(a), W3(a), UNLOCK3(c), UNLOCK3(a), LOCK1(c), R1(c), LOCK1(b), W1(c), R1(b), W1(b), UNLOCK1(C), UNLOCK1(b)
.

c) Konflikt-Analyse:
R2(a) vor W3(a), T3 ist abhängig von T2
R2(b) vor W1(b), T1 ist abhängig von T2
W2(a) vor R3(a), T3 ist abhängig von T2
R3(c) vor W1(c), T1 ist abhängig von T3
W3(c) vor R1(c), T1 ist abhängig von T3
W2(b) vor R1(b), T1 ist abhängig von T2
alle anderen Befehle haben keine Abhängigkeiten, somit entsteht der Graph
T2 -> T1
T2 -> T3
T3 -> T1
Da keine Zyklen im Graphen entstanden sind, ist die Schedule serialisierbar. T1, T2 und T3 sind jedoch nicht seriell, da T2 vor T3 vor T1 ausgeführt werden müsste, was in dieserm Beispiel nicht der Fall ist. Die äquivalente serielle schedule wäre:
R2(A),R2(b),W2(a),W2(b),R3(c),W3(c),R3(a),W3(a),R1(c),W1(c),R1(b),W1(b)


Aufgabe 2:
Nach Durchsicht der Newsgroup komme ich dann auf folgendes Ergebnis:
T1->T2->T3 A=160, B=-160
T1->T3->T2 A=160, B= -120
T2->T1->T3 A=160, B= 40
T2->T3->T1 A=160, B= 90
T3->T2->T1 A=160, B= 90
T3->T1->T2 A=160, B= -70
Man muss jede mögliche Kombination der Transaktionen durchgehen, eine Folge-Transaktion in der jeweiligen Reihenfolge benutzt dann die Endwerte von A und B aus der vorherigen Transaktion.


Aufgabe 3:
Gegenbeispiel:

Transaktion 1 bearbeitet ausschließlich A.
Transaktion 2 bearbeitet ausschließlich B.
Transaktion 3 bearbeitet A und B.

R1(a),R2(b),W1(a),W2(b),R3(a),W3(a),R3(a),W3(a),R3(b),W3(b)

T1 -> T3
T2 -> T3

Der entstandene Graph ist zyklenfrei und erfüllt somit die Bedingung der Aussage. Die dazugehörige Schedule ist allerdings nicht seriell. Da keine Abhängigkeiten zwischen T1 und T2 bestehen, können Operationen von T1 und T2 "durcheinander" vor T3 ausgeführt werden.

Somit ist die Aussage widerlegt.


Aufgabe 4:
a)Konflikt-Analyse:
R2(a) vor W1(a), T1 ist abhängig von T3
R2(c) vor W1(c), T1 ist abhängig von T2
W2(c) vor R3(c), T3 ist abhängig von T2
R1(a) vor W3(a), T3 ist abhängig von T1
...
und da ist auch schon der Zyklus von T1 zu T3 und umgekehrt, somit keine äquivalente schedule.

b)
R3(a) vor W2(a), T2 ist abhängig von T3
W3(a) vor R2(a), T2 ist abhängig von T3
R3(c) vor W1(c), T1 ist abhängig von T3
R2(a) vor W1(a), T1 ist abhängig von T3
W2(a) vor R1(a), T1 ist abhängig von T2
W3(c) vor R1(c), T1 ist abhängig von T3
R1(c) vor W2(c), T2 ist abhängig von T1
...
Zyklus T1->T2, T2->T1

c)
R2(a) vor W3(a), T3 ist abhängig von T2
R1(a) vor W3(a), T3 ist abhängig von T1
R1(b) vor W2(b), T2 ist abhängig von T1
R3(a) vor W1(a), T1 ist abhängig von T3
...
Zyklus T1->T3, T3->T1

d)
R1(c) vor W2(c), T2 ist abhängig von T1
R1(b) vor W2(b), T2 ist abhängig von T1
R3(a) vor W1(a), T1 ist abhängig von T3
W1(b) vor R2(b), T2 ist abhängig von T1
W1(c) vor R2(c), T2 ist abhängig von T1
W3(a) vor R1(a), T1 ist abhängig von T3
alle anderen Befehle haben keine Abhängigkeiten, somit entsteht der Graph
T3 -> T1
T1 -> T2
äquivalente serielle schedule:
R3(a),W3(a), R1(c),W1(c),R1(b),W1(b),R1(a),W1(a),R2(b),W2(b),R2(c),W2(c)

e)
R1(c) vor W3(c), T3 ist abhängig von T1
R1(a) vor W2(a), T2 ist abhängig von T1
W1(c) vor R3(c), T3 ist abhängig von T1
R3(b) vor W2(b), T2 ist abhängig von T3
W3(b) vor R2(b), T2 ist abhängig von T3
W1(a) vor R2(a), T2 ist abhängig von T1
alle anderen Befehle haben keine Abhängigkeiten, somit entsteht der Graph
T1 -> T2
T1 -> T3
T3 -> T2
äquivalente serielle schedule:
R1(c),R1(a),W1(c),W1(a),R3(b),W3(b),R3(c),W3(c),R2(b),W2(b),R2(a),W2(a)



Gruß


Marcel
alaghi
 
A

Alisha

Hallo Marcel!

Habe jetzt Aufgaben 1, 2 und 4 bearbeitet. Bei Aufgabe 1 und 4 stimmen meine Ergebnisse mit deinen überein.

Bei Aufgabe 2 allerdings nicht so recht.
z.B. bei T1 -> T2 -> T3: den Wert für A hab ich auch, bei B bin ich mir nicht sicher. In T1 wird doch der existierende Wert für B nicht berücksichtigt und einfach ein neuer Wert geschrieben, oder? Also wäre bei mir B = 110 am Ende von T1 (100 für A + 10). T2 führt dann zu B = 10 (B - A), T3 dementsprechend zu B = 0 (2 * 10 - 20).
Wenn ich jetzt mal davon ausgehe, dass B nach T1 gleich 10 bleibt, dann habe ich B = - 200 raus (nach T2: B = -90).
Mehr habe ich jetzt erstmal da nicht gerechnet, da ich das erstmal diskutieren wollte :D

Grüße
Jasmin
 
Bei der Reihenfolge T1 -> T2 -> T3 bin ich so vorgegangen:

T1:
A=100
B=30 (entspricht A (=20) + 10; A=20 da A zwar neu berechnet und gespeichert wurde, aber nach dem Speichern nicht neu eingelesen wird. Der Anfangswert von B spielt hier tatsächlich keine Rolle)

T2 (mit Werten aus T1):
A=100 (bei T2 wird an A nichts geändert)
B= -70 (entspricht B-A = 30-100)

T3 (mit Werten aus T2):
A= 160
B= -160

Der einzige Knackpunkt liegt bei T1, da wird auch in der Newsgroup fröhlich hin- und herdiskutiert. Hat A bei der Verarbeitung von B=A+10 den Wert 20 oder den neu berechneten Wert 100? Die einen sagen: A wurde zwar neu berechnet, der neue Wert aber nicht neu eingelesen (entspricht meiner Ansicht). Oder ist der Wert von A nach der Berechnung und dem Speichern im Arbeitsspeicher "vermerkt" und die Berechnung von B läuft auf dieser Grundlage ab (so hast du es auch gerechnet).
Lösen wir das Rätsel per Schnick Schnack Schnuck? ;)
 
A

Alisha

Also wenn ich mir die Übung 4.1 ansehe, ist dein Vorgehen richtig. Da wird ja schließlich der alte Wert in B geschrieben, nachdem A geändert wurde, sprich der ursprünglich eingelesene Wert. Boing... das passiert, wenn man zu sehr programmiertechnisch denkt :D Ich werd die Aufgabe also gleich noch mal neu rechnen ;)
 
A

Alisha

So, noch mal ich. Habe jetzt alles nachgerechnet bei Aufgabe 2. Bis auf zwei Sachen hab ich alles genauso wie du:
T3->T2->T1 A=80, B= -80
T3->T1->T2 A=160, B= 90
:confused:
Bei T3 -> T2 -> T1 hab ich:
T3: A = 80; B = 0
T2: A = 80 (ändert sich ja nicht); B = - 80
T3: A = 160; B = 90

Bei T3 -> T1 -> T2 hab ich:
T3: A = 80, B = 0
T1: A = 160, B = 90
T2: A = 160, B = - 70
 
T3 -> T2 -> T1:
T3: A= A + 60 = 80; B= 2*B - 20 = 0
T2: A= 80 (unverändert); B= B -A = -80
T1: A= A + 80 = 160; B= A + 10 = 80 + 10 = 90
ups, hab da wohl den kompletten letzten Schritt vergessen...

T3 -> T1 -> T2:
T3: A= A + 60 = 80; B= 2*B - 20 = 0
T1: A= A + 80 = 160; B= A + 10 = 80 + 10 = 90
T2: A= 160 (unverändert); B= B -A = -70
auch hier habe ich - warum auch immer - den letzten Schritt vergessen. unglaublich ^^

Danke, ich war drauf und dran, meine Ergebnisse schon frühzeitig abzuschicken. Und da es keine Klausur gibt, wären viele Punkte am Anfang doch sehr willkommen. Danke :)
 
A

Alisha

BitteBitte :)
Ich werd meine Ergebnisse spätestens morgen absenden. Ab Dienstag bin ich erstmal ein paar Tage beschäftigt.

Ich frag mich immer noch, ob die Sache mit den Einsendearbeiten auch für Wirtschaftsinformatiker gilt. Wir schließen das Modul "Vertiefende Konzepte von DB-Systemen" (oder so ähnlich :D ) mit einer mündlichen Prüfung ab, soweit ich weiß *kopfkratz*
 
Top