Lösung zu Test exam 1

himbaer
Mausschubser
Mausschubser
Beiträge: 98
Registriert: 28. Apr 2010 19:29
Kontaktdaten:

Lösung zu Test exam 1

Beitrag von himbaer »

Hier könnte jeder der Lust hat seine Lösungen zu dem Test Exam 1 posten und mit anderen Studenten vergleichen.
meine Testsignatur :!:

himbaer
Mausschubser
Mausschubser
Beiträge: 98
Registriert: 28. Apr 2010 19:29
Kontaktdaten:

Re: Lösung zu Test exam 1

Beitrag von himbaer »

Aufgabe1:
a)2^4= 16, da für jede Variable 2 Belegungen existieren (True,false)
b)10 Erklärung ist Beispielsweiße einfach ein Wertetabelle

Aufgabe2:
a)

b)
C2 ist ein Rondesvouz Channel. Diese sind besonders anfällig für Deadlocks. Auf C1 liegt Nachricht msgA und auf C2 liegt Nachricht msgB. Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet. Da dort aber bereits eine Nachricht liegt und der Prozess, der fürs Empfangen zuständig ist, ebenfalls der Sender ist, exisitert in diesem Falle ein Deadlock

Aufgabe 3:

Aufgabe 4:

Aufgabe 5:

Aufgabe 6:

Aufgabe 7:
meine Testsignatur :!:

holygreg
Mausschubser
Mausschubser
Beiträge: 55
Registriert: 26. Apr 2012 22:31

Re: Lösung zu Test exam 1

Beitrag von holygreg »

Hi,
ich hab mal ne Frage zu Aufgabe 4.

Sollen wir bei der Temporalen Logik gleich als Vergleichsoperator als = oder als == benutzen? (In der Formalen Darstellung)

Lg

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

Re: Lösung zu Test exam 1

Beitrag von hstr »

himbaer hat geschrieben: Aufgabe2:
b)
C2 ist ein Rondesvouz Channel. Diese sind besonders anfällig für Deadlocks. Auf C1 liegt Nachricht msgA und auf C2 liegt Nachricht msgB. Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet. Da dort aber bereits eine Nachricht liegt und der Prozess, der fürs Empfangen zuständig ist, ebenfalls der Sender ist, exisitert in diesem Falle ein Deadlock
Das verstehe ich leider nicht, vorallem den Teil hier "Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet.".
Kannst du das bitte nochmal erklären?

Und dann noch eine Frage zur Aufgabe 4:
Sollen wir hier von weak fairness ausgehen oder nicht?
Das würde doch einen Unterschied z.B. für Eigenschaft 1 (b will be true at some point) machen.

MikeS
Erstie
Erstie
Beiträge: 19
Registriert: 4. Okt 2010 16:15

Re: Lösung zu Test exam 1

Beitrag von MikeS »

hstr hat geschrieben:
himbaer hat geschrieben: Aufgabe2:
b)
C2 ist ein Rondesvouz Channel. Diese sind besonders anfällig für Deadlocks. Auf C1 liegt Nachricht msgA und auf C2 liegt Nachricht msgB. Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet. Da dort aber bereits eine Nachricht liegt und der Prozess, der fürs Empfangen zuständig ist, ebenfalls der Sender ist, exisitert in diesem Falle ein Deadlock
Das verstehe ich leider nicht, vorallem den Teil hier "Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet.".
Kannst du das bitte nochmal erklären?
EDIT: BITTE POST VON fbussjor (2 drunter) BEACHTEN

Im Prozess P wird Nachricht msgA auf Kanal C1 gesendet,
dann wird im Prozess Q msgB auf Kanal C2 gesendet.
Jetzt fängt Prozess Z an zu arbeiten. In dem 'DO' wird jetzt Nachricht msgA von Kanal C1 gelesen (da nicht deterministisch könnte jetzt auch der andere Kanal gelesen werden, a̶̶b̶̶e̶̶r̶̶ ̶̶n̶̶u̶̶r̶̶ ̶̶s̶̶o̶̶ ̶̶k̶̶o̶̶m̶̶m̶̶e̶̶n̶̶ ̶̶w̶̶i̶̶r̶̶ ̶̶z̶̶u̶̶m̶̶ ̶̶d̶̶e̶̶a̶̶d̶̶l̶̶o̶̶c̶̶k̶ aber so kommen wir am schnellsten zum Deadlock).
Das 'IF' ist jetzt wiederum nicht deterministisch, deshalb kann es jetzt passieren, dass versucht wird x (msgA) auf Kanal C2 zu senden, auf diesem Kanal liegt aber noch msgB vom Anfang und da Kanal C2 keinen Buffer hat, also keine Nachrichten zwischenspeichern kann, wartet Prozess Z jetzt so lange bis der Kanal wieder frei wird -> Deadlock (da C2 nirgends sonst ausgelesen wird)
Zuletzt geändert von MikeS am 3. Apr 2013 13:55, insgesamt 1-mal geändert.

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

Re: Lösung zu Test exam 1

Beitrag von hstr »

Jetzt hab ich verstanden, mein Fehler war, dass ich dachte die send (z.B. C1 ! x) Anweisungen würden wie Guards funktionieren
und die Anweisung nur ausführen wenn es möglich ist zu senden, dem ist aber nicht so, man braucht offenbar extra Guards (full,nfull,...) für sowas.
Danke :)

fbussjor
Erstie
Erstie
Beiträge: 12
Registriert: 31. Aug 2011 23:07

Re: Lösung zu Test exam 1

Beitrag von fbussjor »

MikeS hat geschrieben:
hstr hat geschrieben:
himbaer hat geschrieben: Aufgabe2:
b)
C2 ist ein Rondesvouz Channel. Diese sind besonders anfällig für Deadlocks. Auf C1 liegt Nachricht msgA und auf C2 liegt Nachricht msgB. Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet. Da dort aber bereits eine Nachricht liegt und der Prozess, der fürs Empfangen zuständig ist, ebenfalls der Sender ist, exisitert in diesem Falle ein Deadlock
Das verstehe ich leider nicht, vorallem den Teil hier "Nun wird beispielsweiße in Prozess Z zuerst der Channel C1 ausgelesen, und in folgedessen wird wieder dieselbe Nachricht von C1 auf C2 versendet.".
Kannst du das bitte nochmal erklären?
Im Prozess P wird Nachricht msgA auf Kanal C1 gesendet,
dann wird im Prozess Q msgB auf Kanal C2 gesendet.
Jetzt fängt Prozess Z an zu arbeiten. In dem 'DO' wird jetzt Nachricht msgA von Kanal C1 gelesen (da nicht deterministisch könnte jetzt auch der andere Kanal gelesen werden, a̶̶b̶̶e̶̶r̶̶ ̶̶n̶̶u̶̶r̶̶ ̶̶s̶̶o̶̶ ̶̶k̶̶o̶̶m̶̶m̶̶e̶̶n̶̶ ̶̶w̶̶i̶̶r̶̶ ̶̶z̶̶u̶̶m̶̶ ̶̶d̶̶e̶̶a̶̶d̶̶l̶̶o̶̶c̶̶k̶ aber so kommen wir am schnellsten zum Deadlock).
Das 'IF' ist jetzt wiederum nicht deterministisch, deshalb kann es jetzt passieren, dass versucht wird x (msgA) auf Kanal C2 zu senden, auf diesem Kanal liegt aber noch msgB vom Anfang und da Kanal C2 keinen Buffer hat, also keine Nachrichten zwischenspeichern kann, wartet Prozess Z jetzt so lange bis der Kanal wieder frei wird -> Deadlock (da C2 nirgends sonst ausgelesen wird)
Ich denke du irrst dich.
"Im Prozess P wird Nachricht msgA auf Kanal C1 gesendet,
dann wird im Prozess Q msgB auf Kanal C2 gesendet."
Prozess Z kann jetzt nicht anfangen zu arbeiten, sondern muss sich bereits bei C2 ? x befinden, damit die vorherige Sende-Operation überhaupt stattfinden konnte. Das nachfolgende If kann nun allerdings nicht ausgeführt werden. Der Fall C1 ! x blockiert, da C1 bereits mit msgA gefüllt ist. Fall C2 ! x ist ebenfalls nicht ausführbar, da sich Prozess Z hierfür bei C2 ? x befinden müsste (Solange kein 2 Thread läuft geht das aber nicht)
Somit Deadlock

Nathan Wasser
Kernelcompilierer
Kernelcompilierer
Beiträge: 430
Registriert: 16. Okt 2009 09:48

Re: Lösung zu Test exam 1

Beitrag von Nathan Wasser »

Das Senden auf einem Channel dient sehr wohl als Guard. Auf einem buffered Channel ist die Auswertung des Send Befehls nur möglich, wenn der Channel nicht voll ist. Auf einem rendezvous Channel ist die Auswertung des Send Befehls nur möglich, wenn ein anderer Prozess gerade empfangen kann, da dieses als ein Schritt ausgeführt werden muss.

Wenn man Spin um ein Deadlock bittet sieht man eine Lösung. Eine weitere hat fbussjor geschildert.

MikeS
Erstie
Erstie
Beiträge: 19
Registriert: 4. Okt 2010 16:15

Re: Lösung zu Test exam 1

Beitrag von MikeS »

fbussjor hat geschrieben: Prozess Z kann jetzt nicht anfangen zu arbeiten, sondern muss sich bereits bei C2 ? x befinden, damit die vorherige Sende-Operation überhaupt stattfinden konnte.
Aber angenommen, Q würde vor Z etwas machen, dann würde Q doch bei dem Befehl "C2 ! MsgB" solange stehen bleiben (/blockieren), bis "C2 ? x" aufgerufen wird, oder?

Nathan Wasser
Kernelcompilierer
Kernelcompilierer
Beiträge: 430
Registriert: 16. Okt 2009 09:48

Re: Lösung zu Test exam 1

Beitrag von Nathan Wasser »

MikeS hat geschrieben:Aber angenommen, Q würde vor Z etwas machen, dann würde Q doch bei dem Befehl "C2 ! MsgB" solange stehen bleiben (/blockieren), bis "C2 ? x" aufgerufen wird, oder?
Q kann nichts vor Z machen. Senden/Empfangen ist bei Rendezvous Channels ein einziger zusammengehöriger Schritt. Wenn Q schicken will, muss Z auch empfangen, und zwar genau im selben Augenblick.

Im Prinzip ist die Aussage dennoch richtig: Der Prozess Q blockiert beim Befehl "C2 ! msgB" bis "C2 ? x" von Prozess Z aufgerufen wird. Aber vor dem Befehl "C2 ! msgB" gibt es ja nichts weiteres, was der Prozess Q machen könnte.

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

Re: Lösung zu Test exam 1

Beitrag von hstr »

Dürfen wir bei der Sequenzenkalkül Aufgabe in der Klausur eigentlich Abkürzungen verwenden?
Also zum Beispiel: "Sei (\(\forall x: (p(x) \vee q(x))\)) = K".

Nathan Wasser
Kernelcompilierer
Kernelcompilierer
Beiträge: 430
Registriert: 16. Okt 2009 09:48

Re: Lösung zu Test exam 1

Beitrag von Nathan Wasser »

hstr hat geschrieben:Dürfen wir bei der Sequenzenkalkül Aufgabe in der Klausur eigentlich Abkürzungen verwenden?
Also zum Beispiel: "Sei (\(\forall x: (p(x) \vee q(x))\)) = K".
Wenn es in der Aufgabenstellung gestattet ist, ja.

Antworten

Zurück zu „Archiv“