next up previous contents index
Weiter: Das Listenobjekt Hinauf: 18.8 Ein Platten-Treiber Zurück: Analyse des Systems

Entwurf von Untersystemen

 

Um unser System geeignet in Untersysteme zu unterteilen, versuchen wir unter Verwendung der objekt-orientierten Entwurfsmethode, alle jene Objekte ausfindig zu machen, die wir zur Realisierung des Platten-Treibers benötigen. Außerdem wollen wir auch gleich die Operationen bestimmen, die auf diesen Objekten ausgeführt werden müssen.

Von seiten der benutzenden Tasks kann eine beliebig große Anzahl von Leseanforderungen abgegeben werdengif. Diese Leseanforderungen sollen dem Platten-Controller in der oben beschriebenen Art (Scheibenwischer!) übermittelt werden. Daher müssen wir damit rechnen, eine im vorhinein unbestimmbar große Anzahl von Leseanforderungen innerhalb des Platten-Treibers zu puffern. Wir werden daher eine Liste benötigen, in der wir die noch nicht bearbeiteten Leseaufträge zwischenspeichern.

Diese Liste wird mehrere Operationen  zur Verfügung stellen müssen:

Das Einfügen eines Elements in die Liste wird von den Tasks angestoßen, die eine Leseanforderung vornehmen, d.h., es ist Teil der Implementation der Operation Platten_Treiber.Read. Das Lesen und Löschen der Listenelemente jedoch muß von einem eigenen aktiven Agenten vorgenommen werden, da der Platten-Controller kein aktives, sondern ein passives Objekt ist. Wir werden daher einen Task benötigen, der die eingetroffenen Leseanforderungen (in der richtigen, nämlich sortierten Reihenfolge) dem Platten-Controller übergibt.

Das Aussehen unserer Systemstruktur kann der Abbildung 18.20 entnommen werden.

  figure19670
Abbildung 18.20: Ein weiterer Schritt des Systementwurfs 

Hier ist auch der richtige Ort, um uns der gleichzeitig eintreffenden Leseanforderungen zu erinnern. Die Operationen, die wir benötigen, um die oben erwähnte Liste zu manipulieren, müssen unbedingt gegen parallele Ausführung geschützt werden, da sonst eine Zerstörung der internen Struktur der Liste zu befürchten ist. Wir müssen also sicherstellen, daß immer nur genau ein Task diese Listenstruktur manipuliert. Das werden wir erreichen, indem wir die Liste intern als geschütztes Objekt realisieren.

Bevor wir uns wieder ein graphisches Bild unseres Systems vor Augen halten, wollen wir noch beschließen, das Listenobjekt als generisches Paket zu realisieren. Damit haben wir für spätere Zeiten schon die Implementierung einer Liste bei der Hand, falls wir sie in einem Projekt brauchen sollten. Um den Konnex zu Ada noch zu erhöhen, wollen wir außerdem Abbildung 18.21 mittels graphischer Ada-Symbole wiedergeben.

  figure19683
Abbildung 18.21: Struktur des Gesamtsystems 

Es bleibt jetzt noch, einige Details der angedeuteten Untersysteme betreffend das Listenobjekt und den ,,Scheibenwischer-Task`` zu klären.



next up previous contents index
Weiter: Das Listenobjekt Hinauf: 18.8 Ein Platten-Treiber Zurück: Analyse des Systems

Johann Blieberger
Wed Feb 11 09:58:52 MET 1998