Universität Augsburg Insitut für Informatik Prof. Dr. Bernhard Bauer Wolf Fischer Christian Saad Wintersemester 08/09 Übungsblatt 3 12.11.08 Grundlagen verteilter Systeme Lösungsvorschlag Aufgabe 1: a) Erläutern Sie das Trashing-Problem und gehen Sie dabei auf die Granularität ein. (2 Punkte) b) Erläutern Sie eine Möglichkeit zur Behebung des Problems. (Tipp: Konfigurationsoption der gemeinsam genutzten Seiten) Wie so oft entstehen an den oberen und unteren Grenzen dieser Konfiguration unter Umständen Probleme. Erläutern sie diese. (2 Punkte) zu a) Das Trashing-Problem tritt bei der Verwendung von Schreiben-Entwerten Protokollen auf, da ein zu großer Zeitanteil mit dem Entwerten und Senden von Seiten verbraucht wird, anstatt sinnvolle Arbeit zu leisten. Falls beispielsweise ein Prozess A ständig Daten aktualisiert, die von einem Prozess B gelesen werden, so muss die Kopie von B nach jeder Aktualisierung entwertet werden. In diesem Fall wäre der Einsatz des Schreiben-Aktualisieren- Protokolls sinnvoller. zu b) Dies kann durch die Anpassung der Größe der gemeinsam genutzten Seiten (Granularität) verhindert werden. Seiten können bis zu 8 KByte groß sein und die Einheit zur gemeinsamen Nutzung entspricht ein vielfaches dieser Größe. Ist die Einheit zu klein gewählt, so entsteht ein Overhead beim Senden. Dieses Problem kann durch gebündelte Entwertung von Seiten reduziert werden, bringt aber wiederum Nachteile mit sich. Ist die Einheit zu groß gewählt, so konkurrieren zu viele Prozesse um die Seite, wodurch das Trashing-Problem entsteht. Daher sollte die Größe gemeinsam genutzter Seiten auf die Anwendung und auf das mögliche Verhalten der Prozesse angepasst werden, wodurch das Trashing verhindert, aber zugleich der Overhead beim Senden minimiert wird. Aufgabe 2: In Abbildung 1 sieht man den Initialzustand eines DSM mit zentralem Manager. Abbildung 1: Initialzustand 1
Es soll nun von Prozess C ausgehend eine Leseoperation auf die Speicherstelle x ausgeführt werden. Beschriften Sie in Abbildung 2 alle Pfeile mit den Nachrichten, die übertragen werden müssen. Überlegen Sie ferner welche Rechte (read, write, none) nach der Operation bei den einzelnen Prozessen gesetzt sind, und wie das copyset aussieht. (2 Punkte) Abbildung 2: Nachrichtenwege bei C.read(s) Zum ursprünglichen Initialzustand führen wir nun folgende Speicherstellen ein: y gehört zu Prozess A. Speicherstelle z gehört zu Prozess C. Wie sieht der neue Initialzustand aus? (1 Punkt) Überlegen Sie sich nach dem Muster der ersten Teilaufgabe den Ablauf für folgende Operation und legen Sie den Verlauf der notwendigen Nachrichten ebenfalls fest: Prozess C schreibt auf Speicherstelle z. Der zentrale Manager bleibt Prozess B. (2 Punkte) Nehmen Sie für den weiteren Verlauf an, dass Prozess D die Speicherstelle z ließt bzw. gelesen hat. Wie wäre der Nachrichtenverlauf sowie die die jeweiligen Rechte und Copysets, wenn Prozess A auf Speicherstelle z schreibt. (A.write(z)) (3 Punkte) Der Verlauf der Nachrichten sieht aus wie in Abbildung 4 dargestellt. Prozess C frägt zunächst beim Manager an, dieser informiert den Eigentümer der Variable über den Leseversuch inkl. anfragendem Prozess (C). Dadurch weiss der Eigemtümer an wen er die Variable zu versenden hat. Der neue Initialzustand sieht aus wie in Abbildung 4 dargestellt. Es sind keine Nachrichten notwendig, da der schreibende Prozess C bereits Eigentümer der Ziel-Variablen ist und Schreibrechte darauf besitzt. Er kann die Schreiboperation also einfach durchführen. Der Hinweis ist für die nächste Teilaufgabe relevant. Zunächst muss Prozess A dem Manager B die Nachricht schicken, dass ein Schreibvorgang auf Variable z erfolgen soll. Manager B leitet diese Nachricht an den Eigentümer von z weiter, was in diesem Fall Prozess 2
Abbildung 3: Lösungsvorschlag Abbildung 4: Neuer Initialzustand C ist. Prozess C sendet danach die Variable z sowie das copyset(z) an den neuen Eigentümer, Prozess A. Zum copyset(z) ist folgendes zu sagen: Nachdem wie aus dem vorherigen Hinweis zu entnehmen war, Prozess D die Variable z gelesen hat, steht Prozess D im copyset(z). Dieses copyset wird vom Eigentümer von z (in diesem Fall Prozess C) an den neuen Eigentümer (Prozess A) übertragen. Prozess A ist dann verantwortlich, allen Prozessen im Copyset eine release-nachricht zu schicken, damit die Prozesse im Copyset ihre Werte von der Variablen z für ungültig erklären. Das Ergebnis der Operation A.write(z) sehen Sie in Abbildung 5 Aufgabe 3: Bei einem Banking-System können Prozesse Gelder zwischen Konten transferieren. Konten sind Objekte eines DSM-Systems der Banken. Als Invariante der Transaktionen ist definiert, dass die Summen der Gelder zweier Konten nach und vor einer Überweisungen gleich sind. Erklären Sie eine geeignete Technik um die Invariante umzusetzen. (1,5 Punkte) Wie kann Konsistenz unter Nutzung von Freigabekonsistenz gewahrt bleiben? Gehen Sie dazu auf eine Überweisung von einem Konto A auf ein Konto B ein. (2 Punkte) 3
Abbildung 5: Lösungsvorschlag für A.write(z) Die Kontostände dürfen während einer Überweisung von anderen Prozessen weder gelesen noch geschrieben werden. Dadurch bleibt die geforderte Bedingung stets gewahrt. Dazu muss eine Transaktion in einem kritischen Abschnitt erfolgen. Ein Prozess fordert dazu eine Sperre an und wenn er diese erhält, wird die Transaktion durchgeführt und anschließend wird die Sperre wieder aufgehoben. Bei der Freigabekonsistenz wird vor Schreibzugriffen überprüft, ob alle Schreiboperationen auf den gemeinsamen Speicherbereich beendet sind. Ist dies der Fall, erhält der Prozess exklusiven Zugriff. Mittels einer release -Operation kann der Prozess die Daten wieder für alle freigeben. Prozess x: acquierlock(); A:= A - Betrag; B:= B + Betrag; releaselock(); Hinweis: Bei einem Schreiben-/Aktualisieren-Protokoll werden die Änderungen des kritischen Bereichs an die anderen Prozesse gesendet und dort aktualisiert. Beim Schreiben-/Entwerten-Protokoll werden die anderen Kopien entwertet. Es werden dabei nur die letzten Änderungen gesendet wodurch der Nachrichtenaufwand im Vergleich zur sequentiellen Konsistenz geringer ist. Prozess x: acquierlock(); A:= A - Betrag1; 4
B:= B + Betrag2 + C:= C - Betrag 2; Betrag1; A:= A - Betrag3; B:= A + Betrag3; releaselock(); Aufgabe 4: Erläutern Sie die Funktionsweise des Scheduler-Systems für zwei Prozessoren und a) zwei Prozesse mit gleicher Priorität (1,5 Punkte) b) zwei Prozesse mit unterschiedlicher Priorität.(1,5 Punkte) zu a) Jeder Prozessor wird als Virtueller Prozessor einzelnen Prozessen über einen Scheduler zur Verfügung gestellt. Dabei werden Register des physikalischen Prozessors mit dem Kontext des Prozesses geladen und ausgeführt. Eine Scheduler- Aktivierung (SA) stellt dabei eine Art Reservierung eines Prozessors dar. Da beide Prozesse gleiche Priorität besitzen, sollten die Virtuellen Prozessoren zeitlich gleichermaßen auf die Prozesse verteilt werden. Demnach wird durchschnittlich jedem Prozess ein virtueller Prozessor zugeordnet. Liegt in einem Prozess ein Thread im Zustand READY vor, so kann der Scheduler den Kontext laden und ausführen. Blockiert ein Thread, so setzt der Scheduler den Zustand auf BLOCKED und ordnet die neue SA einem READY- Thread eines Prozesses zu. Blockierte SA können wieder aufgenommen werden. Dabei wird der Zustand des blockierten Threads auf READY gesetzt. Da aber für die Benachrichtigung ein SA erforderlich ist, wird dieser von einem der Prozesse prä-emtiv entzogen, da davon auszugehen ist, dass keine virtuellen Prozessoren zur Verfügung stehen. Dazu wird der Thread, dem die SA entzogen wurde als READY markiert. zu b) Die Funktionsweise des Scheduler entspricht der aus a). Allerdings werden die SA bevorzugt dem Prozess A mit höherer Priorität zugeordnet. Benötigt A einen zusätzlichen SA, so kann eine SA des anderen Prozess präemptiv abgezogen werden und dem Prozess A zur Verfügung gestellt werden. Da 2 Prozesse sich 2 virtuelle Prozessoren teilen, wird dem Prozess B mit niedrigerer Priorität nur zeitweise ein virtueller Prozessor zur Verfügung gestellt, Allerdings hängt die Vergabe von SAs nicht nur mit der Priorität, sondern auch mit dem Zustand der Threads und damit der SAs zusammen. 5