Die Dateiverwaltung ist das wichtigste Subsystem der Ein- und Ausgabe. Magnetplattentreiber sind lediglich in der Lage, Blöcke zu lesen und zu schreiben sowie ähnliche elementare Funktionen durchzuführen.
Eine grundlegende Aufgabe der Dateiverwaltung ist es, die Speicherverwaltung auf Magnetplatten
zu organisieren. Darauf aufbauend wird ein System implementiert, mit dessen Hilfe Benutzer ihre Daten mit Namen versehen können und das dazu beiträgt, Ordnung und Übersicht im Datenbestand zu wahren.
Eng damit verbunden sind die Gewährleistungen der Verfahren des Datenschutzes. Zum zweiten Aufgabenbereich gehören somit alle Funktionen, die das Anlegen und Wiederauffinden einzelner Dateien ermöglichen. Eine dritte Gruppe von Systemfunktionen hilft bei der Verarbeitung einer Datei; dazu gehört die Unterstützung verschiedener Zugriffsmethoden zu Komponenten einer Datei und das Absichern gegen Konsistenzprobleme, die sich durch möglichen parallelen Zugriff auf eine einzelne Datei ergeben.
1.1. Speicherverwaltung auf Magnetplatte
Die Aufgabe beginnt damit, einen Datenträger zur Verwendung in einem bestimmten Betriebssystem brauchbar zu machen (=Formatieren). Danach laufen die weiteren Vorgänge zur Aufteilung des Speicherplatzes meistens ohne die Notwendigkeit direkter Eingriffe durch den Benutzer ab.
1.1.1.Magnetplatten: Struktur und Zugriff
Die äußere Form einer Magnetplatte gibt den Rahmen vor, in dem Daten aufgezeichnet werden können, wobei die technischen Details der Durchführung der Datenübertragung von einem eigenen Ein-Ausgabe-
Prozessor (Controller) übernommen werden. Eine Magnetplatte kann so wie eine Diskette aus einer einzelnen kreisförmigen, magnetisch beschichteten Platte bestehen; bei einem Plattenstapel (Bild 1) sind mehrere Platten übereinander auf einer Spindel montiert. Normalerweise werden beide Oberflächen der Platte beschrieben. Pro Oberfläche wird ein Lese- und Schreibkopf auf einem Arm montiert, der diese Köpfe radial zur Oberfläche hin- und herbewegt und an bestimmten Punkten zum Stillstand bringt.
Die Platte selbst wird in Rotation versetzt, sodaß pro Haltepunkt des Arms eine Spur auf jeder Oberfläche aufgezeichnet werden kann. Die auf den verschiedenen Oberflächen übereinanderliegenden Spuren werden als Zylinder bezeichnet. In jede der Spuren wird eigentlich eine lange Bitkette aufgezeichnet.
Da das für Schreiben und Lesen nicht sehr zweckmässig ist, wird eine Spur in Sektoren gegliedert.
Typische Sektorgrößen (in Byte) sind Zweierpotenzen zwischen 128 und 4096.
Dadurch ist es einfacher, eine Magnetplatte zu verwalten, da bei allen Spuren die Sektoren dieselbe Länge haben. Nummeriert man alle Sektoren der Reihe nach durch, ist der nächste Zugriff von Information (Spur, Oberfläche, relative Sektornummer) durch eine einfache Rechnung leicht zu ermitteln. Durch die feste Vereinbarung der Sektorgröße können beim Formatieren alle Spuren einer Magnetplatte mit leeren Sektoren beschrieben werden.
Mit der gewählten Sektorgröße sind alle wesentlichen Parameter für den Treiber gegeben, dem zur Adressierung von Daten nur die Nummer des gewünschten Sektors übergeben werden muß. Nach der Berechnung von Spur und relativer Sektoradresse wird der Auftrag an den Controller weitergegeben,
der dann den Ein- oder Ausgabevorgang selbständig durchführt.
Die erforderliche Zugriffszeit setzt sich aus 3 Komponenten zusammen:
- Positionierzeit: die Zeit zum Aufsuchen des Zylinders
- Latenzzeit: die Zeit zum Abwarten des gewünschten Sektors
- Übertragungszeit: die Zeit zum Übertragen der Daten
Um die Auswirkungen jeder einzelnen dieser Komponenten zu dämpfen, wird z.B. bei einem langsamen
Speicher die Hilfe eines Cache-Speichers hinzugezogen. Ein Cache-Speicher kann bei Magnetplatten günstig im Controller selbst angelegt werden.
Der größte Anteil der Zugriffszeit entfällt auf die Zeit zum Aufsuchen des Zylinders, da die Aufträge der Reihe nach ausgeführt werden (FCFS First come first serve). Eine Beschleunigung ist erst dann möglich, wenn der Treiber mehrere Aufträge auf einmal vor sich hat und die Reihenfolge ihrer Erledigung frei wählen kann (wie Voraussetzung in einem Mehrbenutzersystem). Um schnell Daten herbeischaffen zu können, ist immer der Auftrag zu wählen, der die kürzeste Armbewegung erfordert
(SSTF Shortest seek time first). Das Beispiel (Bild 2) zeigt die Verbesserung im Vergleich zu FCFS\'s.
Dargestellt werden die erforderlichen Armbewegungen bei den Aufträgen auf den
Spuren 21, 9, 2, 17 und 22.
Das SSTF Verfahren hat jedoch auch seine Nachteile. Da während einer Bearbeitung eines Auftrages neue Aufträge eintreffen und diese sofort registriert werden, werden diese auch dementsprechend eingeordnet. Gäbe es nach der Erledigung des Auftrages in Spur 9 weitere Aufträge, z.B. in den Spuren
2, 4 und 6, so werden die Aufträge am anderen Ende weiter hinausgezögert.
Um dies zu verhindern wird das LIFT-Verfahren angewendet. Der Arm wird in die einmal eingeschlagene
Richtung weiterbewegt. Ist in dieser Richtung kein Auftrag mehr vorhanden, wird die umgekehrte Richtung gewählt.
Auch die Zeit des Wartens auf einen gewünschten Sektor kann durch einen Controller verkürzt werden.
Voraussetzung ist, daß nach Erreichen einer Spur sofort bekannt ist, welcher Sektor gerade unter den Kopf kommt. Dann kann der Controller alle für diesen Zylinder anstehenden Aufträge in minimaler Zeit erledigen.
Relativ oft kommt es vor, daß mehrere aufeinanderfolgende Sektoren gelesen werden müssen. Da der Controller nach dem Lesen des ersten Sektors etwas Zeit benötigt, um die Daten in den Speicher zu schreiben, wird die Platte danach gerade in der ungünstigsten Position zum Lesen des nächsten Sektors sein, weil der Lesekopf schon am Beginn dieses Sektors vorbei ist. Das Lesen aller n Sektoren einer Spur würde demnach bis zu n Umdrehungen erfordern. Abhilfe schafft ein Verfahren, das als
Sector interleaving bezeichnet wird. Die pysische Reihenfolge der Sektoren entspricht dabei nicht der logischen. Bei 8 Sektoren sind z.B. folgende Anordungen denkbar:
1 - 5 - 2 - 6 - 3 - 7 - 4 - 8
1 - 4 - 7 - 2 - 5 - 8 - 3 - 6
Wenn nun der erste Sektor (mit Nummer 1) gelesen wurde, so hat der Controller je nach dem gewählten Faktor mehr oder weniger viel Zeit, bis Sektor Nummer 2 am Kopf ankommt. Eine komplette Spur kann somit in zwei oder drei Umdrehungen gelesen werden.
|