Weiter: Der,Scheibenwischer-Task``
Hinauf: 18.8 Ein Platten-Treiber
Zurück: Entwurf von Untersystemen
Bis jetzt haben wir noch keinerlei Vorstellung, welche Art von
Liste wir realisieren wollen. Wir haben aber die notwendigen Operationen
schon festgelegt:
-
Ist die Liste leer?
-
Gehe an den Anfang der Liste.
-
Gehe an das Ende der Liste.
-
Füge ein Element in die Liste ein.
-
Gehe zum nächst größeren Listenelement.
-
Gehe zum nächst kleineren Listenelement.
-
Lies den Inhalt des aktuellen Listenelementes.
-
Lösche das aktuelle Element aus der Liste.
Außerdem gibt es mehrere, zu berücksichtigende Punkte :
-
Die Liste soll beliebig viele Einträge haben können.
-
Es soll immer nur ein Task darauf zugreifen können, damit die interne
Struktur nicht zerstört werden kann.
-
Der Scheibenwischer-Task, also der Task, der die Listenelemente
herausliest, soll die Liste sowohl in auf- als auch in absteigender
Richtung bearbeiten können, da er den Lese-Schreibkopf ja in beiden
Richtungen über die Platte bewegt.
Aus Punkt 1 folgt, daß wir eine verkettete Liste verwenden werden.
Punkt 2 wird dadurch erledigt, daß wir ein geschütztes Objekt verwenden (vgl. Abbildung 18.22).
Abbildung: Struktur der geschützten Liste
Punkt 3 aber bedeutet, daß wir am besten eine
doppelt verkettete Liste
realisieren werden, die ungefähr
das in Abbildung 18.23 dargestellte Aussehen haben wird.
Abbildung 18.23: Eine doppelt verkettete Liste
Über die tatsächlichen Daten in den einzelnen Listenelementen
brauchen wir uns vorläufig keine Gedanken machen, da wir ja schon
beschlossen haben, die Liste als generisches Paket zu implementieren,
wo wir einfach den ,,Inhalt`` als privaten generischen Parameter
angeben. Allerdings müssen wir eine Ordnungsrelation für die
Listenelemente fordern, damit wir eine sortierte Liste aufbauen können.
Eine entsprechende Ada-Spezifikation lautet:
Weiter: Der,Scheibenwischer-Task``
Hinauf: 18.8 Ein Platten-Treiber
Zurück: Entwurf von Untersystemen
Johann Blieberger
Wed Feb 11 09:58:52 MET 1998