Dateiverwaltung

AUFTEILUNG DES PLATTENSPEICHERS

Unter Betriebssystemen der zweiten und dritten Generation musste sich der Benutzer noch selbst um die Anordnung der einzelnen Dateien auf einer Magnetplatte kümmern. Einer Datei wurde ein zusammenhängender Bereich von Zylindern oder Spuren zugeordnet, und die entsprechenden Adressen mussten beim Beginn des Zugriffes zur Datei angegeben werden. Das Erweitern von Dateien war nur dann möglich, wenn hinter der Datei noch Platz frei war. Die Einteilung der gesamten Platte in gleich große Sektoren ist die Grundlage für die automatische Speicherverwaltung durch das Betriebssystem.
Der Plattenspeicher wird in Belegungseinheiten (Allocation unit, Cluster) verwaltet. Die Größe eines Blockes hängt vom System und von der Art des Datenträgers ab. Üblicherweise liegen die Werte im Bereich zwischen 256 und 4096 Bytes, je nach Sektorgröße sind das 1 bis 8 Sektoren.
Über die freien Belegungseinheiten muss Buch geführt werden. Eine der möglichen Methoden verwendet dazu eine Bitkette, in der jeder Belegungseinheit ein Bit entspricht. Ein anderes Verfahren verkettet freie Blöcke, wobei die freien Blöcke selbst zur Aufnahme der Kette dienen. Aus Effizienzgründen wird die Kette so aufgebaut, dass ein Block gleich die Adressen mehrerer freier Blöcke enthält.
Auf manchen Systemen übernimmt das Betriebssystem auch die Verwaltung schadhafter Blöcke. Kleine Materialfehler sind schon bei der Fertigung einer Magnetplatte nicht auszuschließen, weitere schadhafte Stellen entstehen im Laufe der Zeit (Verschmutzung). Blöcke die keine korrekte Aufzeichnung der Daten ermöglichen, werden beim Formatieren oder beim Lesen erkannt und aus dem Verkehr gezogen. Intelligente Controller sind der Lage, anstelle eines schadhaften Blocks einen Ersatz aus einem Vorrat guter Blöcke zuzuteilen.


DER AUFBAU VON DATEIEN

Mit den vergebenen Blöcken wird Speicherplatz für eine Datei aufgebaut. Für den Programmierer ist es am einfachsten und bequemsten, innerhalb einer Datei einen linearen Adreßraum zur Verfügung zu haben. Das bedeutet, dass die Daten einfach mit 0, 1, 2, ... adressiert werden können. Die Speicherverwaltung wird daher nicht nur registrieren müssen, welcher Datei ein Block zugeteilt wurde, sondern auch an welcher Stelle im Adreßraum der Datei der Block liegt. Diese Anforderungen können mit verschiedenen Verfahren gelöst werden.
Eine Möglichkeit ist das Verketten der Blöcke in der Reihenfolge, in der sie den Adreßraum der Datei bilden. Die Kette könnte in den Blöcken gespeichert werden, aber das ist aus zwei Gründen schlecht:
1. Es wären zum Auffinden des n - ten Blockes n Zugriffe erforderlich

2. Eine fehlerhafte Stelle in der Kette würde das Auffinden weiterer Daten in der Folge sehr erschweren

Besser ist es daher, die Ketten aller Dateien zu sammeln und geordnet in einem eigenen Speicherbereich unterzubringen, der aus Sicherheitsgründen auch zweifach gespeichert werden kann.
MS - DOS legt auf jedem Datenträger eine Tabelle (File allocation table = FAT) an, in der die Verwendung jedes Blocks registriert wird. Diese Datenstruktur ist Rückrat und Achillesferse er Speicherverwaltung. Ein Fehler in einem Eintrag würde zum Abreißen der Kette und zum Verlust des Restes der Datei führen.
Der falsche Eintrag könnte an irgendeiner Stelle in der Kette einer anderen Datei führen, sodass einige Datenblöcke gleichzeitig zu zwei Dateien gehören. Um derlei unangenehme Effekte zu vermeiden, wird die FAT auf jedem Datenträger zweimal aufgezeichnet. Die Information in einer FAT reicht sogar dazu aus, gewisse Fehler beheben zu können.
Eine vollständige Kette bei der nur der Anfang fehlt (nach der Zerstörung eines Dateiverzeichnisses) kann vollkommen hergestellt werden. Bei MS - DOS wäre das der Befehl chkdsk. Ein schadhafter Sektor führt noch nicht zum Vollständigen Verlust einer Datei. Der Befehl recover ist im Stande die Datei bis auf den schadhaften Sektor wiederherzustellen.
Ein ganz anderes Verfahren entsteht, wenn ein Index der verwendeten Blöcke aufgebaut wird. Ein Index ist eine Datenstruktur, die mit Hilfe eines Suchbegriffes - in diesem Fall die Blocknummer - das Auffinden der entsprechenden Daten ermöglicht. Das Betriebssystem UNIX verwendet einen solchen Index, der in einem eigenen Speicherbereich, dem Indexblock (Index node, Inode), gespeichert wird. Neben dem Index sich im Indexblock auch der Eigentümer der Datei, Zugriffsberechtigungen und andere Attribute eingetragen. Da ein Indexblock eine feste Größe hat, kann nur eine beschränkte Anzahl von Blocknummern eingetragen werden. Weitere Blocknummern müssen indirekt adressiert werden, wie Abb. 6.5 zeigt.

I - node Indexblöcke Datenblöcke


Indexblöcke und Datenblöcke unter UNIX

Erklärung: Die ersten zehn Einträge im Indexblock zeigen direkt auf Datenblöcke. Da UNIX den Indexblock im Arbeitsspeicher hält, können diese Datenblöcke ohne zusätzliche Plattenzugriffe erreicht werden. Der elfte Eintrag zeigt auf einen Block, in dem Adressen weiterer Datenblöcke stehen. Reicht dieser Block nicht aus, so wird im zwölften Eintrag die Adresse eines Blocks gespeichert, der Adressen von Blöcken mit Adressen von Datenblöcken enthält. Der dreizehnte Eintrag führt nach dreifach indirekter Adressierung zu den Daten.

Bei einer Blockgröße von 1024 Bytes kann auf Dateien bis zu 10KByte ohne zusätzlichen Aufwand zugegriffen werden. Größere Dateien erfordern ein bis drei zusätzliche Zugriffe, bis die Daten erreicht werden. Die Effizient des Verfahrens hängt offensichtlich von der durchschnittlichen Länge der Dateien in einem System ab.
Die Zerstörung eines Indexblocks führt zum Verlust einer einzigen Datei. Wenn durch Zerstörung eines Dateiverzeichnisses der letzte Verweis auf einen Indexblock gelöscht wird, bleibt die Datei intakt, kann aber nicht mehr aufgefunden werden. Da UNIX Blöcke aus Effizienzgründen nicht sofort auf die Magnetplatte schreibt, sind Fehler nach plötzlichen Abschalten des Systems nicht ausgeschlossen. Ein Programm zur Untersuchung des Dateisystems wird daher routinemäßig nach dem Laden des Betriebssystems ausgeführt. Gefundene Dateien werden in einem eigenen Dateiverzeichnis namens / lost+found abgelegt.
Die bisher vorgestellten Verfahren nehmen keine Rücksicht auf die tatsächliche Anordnung der Blöcke einer Datei auf der Magnetplatte, jeder Block muss daher einzeln adressiert werden. Wenn Vergabeeinheiten nicht einzeln, sondern in zusammenhängenden Bereichen zugeteilt werden, genügt pro Bereich eine Adresse und die Länge.
Am flexibelsten sind Systeme, die einerseits die Vorgabe eines bestimmten Einheit für die Zuteilung zulassen, andererseits auf Wunsch eine Datei auch in möglichst wenigen zusammenhängenden Bereichen unterzubringen versuchen, wobei auch ein einziger Bereich gefordert werden kann. Ziel dieser Methode ist es, die Zugriffszeit zu den Blöcken einer Datei zu verkürzen.
Ein Betriebssystem, das diese Technik verwendet, ist VAX/VMS. Dort wird eine Datei durch einen File - Header beschrieben, in dem - ähnlich wie im Indexblock in UNIX - der Eigentümer, Zugriffsberechtigungen, die Zeitpunkte des Anlegens und des letzten Zugriffs und ähnliches eingetragen werden. Jeder zusammenhängende Bereich von Datenblöcken ist im File - Header eingetragen.
Sollte eine Datei in zu viele Bereiche zersplittert sein, dass die Einträge eines Headers nicht ausreichen, dann wird ein zweiter Header zu dieser Datei angelegt, der Platz für weitere Bereichseinträge bietet.
Vorteilhaft wirkt sich die zusammenhängende Lage einer Datei dann aus, wenn die ganze Datei - oder zuminderst große Teile davon - auf einmal gelesen werden. Das kommt vor allem beim Laden von Programmen vor. Auf Systemen, die Dateien nicht systematisch in zusammenhängenden Speicherbereichen unterzubringen versuchen, ist es daher besser die Dateien von Zeit zu Zeit auf der Magnetplatte umzuordnen, sodass die Blöcke der einzelnen Dateien nicht verstreut liegen.










Folie:


I - node Indexblöcke Datenblöcke





Abb. 6.5. Indexblöcke und Datenblöcke unter UNIX

Kontrollfragen

Warum ist das Speichern von Blöcken in der Kette schlecht ?
1. Es wären zum Auffinden des n - ten Blockes n Zugriffe erforderlich

2. Eine fehlerhafte Stelle in der Kette würde das Auffinden weiterer Daten in der Folge sehr erschweren


Welche 2 Befehle gibt es zum Herstellen verlorener Dateien ?
chkdsk : Eine vollständige Kette bei der nur der Anfang fehlt (nach der Zerstörung eines Dateiverzeichnisses) kann vollkommen hergestellt werden. Bei MS - DOS wäre das der Befehl chkdsk.

recover : Ein schadhafter Sektor führt noch nicht zum Vollständigen Verlust einer Datei. Der Befehl recover ist im Stande die Datei bis auf den schadhaften Sektor wiederherzustellen.


Wobei kann es zu Fehlern kommen; Wo kommen die Dateien hin ?
Da UNIX Blöcke aus Effizienzgründen nicht sofort auf die Magnetplatte schreibt, sind Fehler nach plötzlichen Abschalten des Systems nicht ausgeschlossen. Ein Programm zur Untersuchung des Dateisystems wird daher routinemäßig nach dem Laden des Betriebssystems ausgeführt. Gefundene Dateien werden in einem eigenen Dateiverzeichnis namens / lost+found abgelegt.

1304 Worte in "deutsch"  als "hilfreich"  bewertet