Einleitung - Der Hierarchische Aufbau eines DOS-Datentragers, Boot-Sektor, Die beiden Funktionen zur Dateiverwaltung



Einleitung

Diese Ausarbeitung ist in 2 Punkte gegliedert: in Punkt 1, welcher eine grobe Übersicht über den Aufbau aller DOS-Datenträger (Diskette, Festplatte, ...) ermöglicht, und Punkt 2, der eine detailliertere Einführung über die Dateibearbeitung mittels Handle- und FCB-Funktionen gibt.

1. Der Hierarchische Aufbau eines DOS-Datenträgers

Jeder DOS-Datenträger besteht aus 5 logischen Strukturen:

Boot-Sektor 22465oor55svj8t



Erste File-Allocation-Table (FAT)

Eine oder mehrere Kopien der FAT

Hauptverzeichnis

Datenbereich für Dateien und Unterverzeichnisse ov465o2255svvj

 

1.2. Boot-Sektor 22465oor55svj8t

Der Boot-Sektor 22465oor55svj8t ist immer der erste Sektor des Laufwerks. Er enthält eine sogenannte Boot-Routine, welche DOS in den Speicher lädt, sowie folgende Informationen:

Ÿ Größe eines Sektors in Bytes

Ÿ Anzahl der Sektoren, die einen Cluster (Zuordnungseinheit) bilden

Ÿ Anzahl der reservierten Sektoren (für FAT, deren Kopien und das

Hauptverzeichnis)

Ÿ Anzahl der FATs

Ÿ Größe des Hauptverzeichnisses in Einträgen

Ÿ Anzahl der Sektoren auf dem (logischen) Laufwerk

Ÿ Media-Descriptor-Byte

Ÿ Größe einer FAT in Sektoren

Diese Informationsstruktur wird auch BIOS-Parameter-Block genannt. Sie wird vom BIOS für den Zugriff auf den Datenträger benötigt.

 

1.2.1. Cluster

Ein Cluster ist die kleinste Speicher-Einheit, die DOS vergeben kann, da in der FAT die Belegung des Datenträgers nur clusterweise festgehalten wird. Das ist ein Trick, da sonst größere Festplatten in unzählige Partitionen aufgeteilt werden müßten und somit der Verwaltungsaufwand enorm wäre (siehe auch: 1.3 FAT). Die Größe eines Clusters kann jedoch je nach Datenträger von 1 bis zu 64 Sektoren zu je 512 Bytes schwanken. Somit kann DOS Partitionen bis zu einer Maximalgröße von 2 GB verwalten (siehe FAT), verschenkt jedoch Speicherplatz, da auch eine nur 1 Byte große Datei einen ganzen Cluster (und damit im Extremfall 32 KB) belegt.

 

1.3. FAT (File Allocation Table)

Die FAT ist eine Verwaltungstabelle, die festhält, welche Datei welche Cluster belegt. Jeder Eintrag in der FAT ist 2 Byte (16 Bit) groß und zeigt auf den zugehörigen Cluster. Mit diesen 2 Byte kann man maximal 64K (65535) Cluster ansprechen. Wenn nun jeder Cluster maximal 32KB (32768 Byte) groß sein kann, können somit ausschließlich Partitionen bis maximal 2 GB (65535 * 32768 Byte = 2 Gigabyte) angesprochen werden. Ist ein Datenträger nun größer als 2 GB (was bei den heutigen Festplatten keine Seltenheit ist), so muß man ihn in maximal 2 GB große Partitionen aufteilen.

Wenn DOS eine Datei einliest, wird zunächst der dazupassende Verzeichniseintrag (siehe Punkt 1.4.1) ausgewertet. Dort befindet sich auch die Nummer des ersten Clusters, der von der Datei belegt wird. Dieser wird gelesen, seine Nummer bildet außerdem einen Index zum Zugriff auf die FAT. Dort ist die Nummer des (logisch) nächsten Clusters festgehalten, dadurch kann dann dieser gelesen werden, u.s.w. ...

Dies wird solange wiederholt, bis DOS anstelle der Nummer des nächsten Clusters auf den Sondervermerk "Letzter Cluster der Datei" trifft. Weiters existieren auch noch Sondercodes für freie (also noch beschreibbare), reservierte (z. B. für das Hauptverzeichnis) bzw. von der Benutzung wegen Defekten ausgeschlossene Cluster. zB: hex 0000 bedeutet, daß dieser Cluster von keiner Datei belegt ist, oder hex FFF7 bedeutet, daß dieser Cluster defekt ist.

Auch wenn Speicherplatz für neu anzulegende Dateien benötigt wird, zieht DOS die FAT heran. Freie Cluster werden anhand des Codes (s. o.) gesucht, dann wird die benötigte Anzahl von freien Clustern als belegt gekennzeichnet und die Daten geschrieben. Da diese Cluster allerdings nur in seltenen Fällen aufeinanderfolgen, passiert es, daß Dateien über den ganzen Datenträger verteilt werden. Dies wird Fragmentierung genannt. Da beim Zugriff auf fragmentierte Dateien jedoch die Schreib-/Leseköpfe stärker beansprucht werden, wird die Lebensdauer der Speichermedien reduziert, was einer der Hauptnachteile dieses Dateisystems darstellt. Außerdem wird die Programm-Geschwindigkeit enorm gebremst, wenn die Daten quer verteilt über die Platte verteilt sind. Zu all dem kommt noch hinzu, daß Cache-Programme wesentlich uneffizienter arbeiten, da sie nachfolgende Cluster cachen (die ja dann nicht mehr zur Datei gehören).

1.4. Hauptverzeichnis

Das Hauptverzeichnis besitzt eine bereits bei der Formatierung festgelegte Größe. Es hat daher nur eine begrenzte Zahl von möglichen Einträgen. Seine Sonderstellung gegenüber anderen Verzeichnissen besteht darin, daß es als einziges Verzeichnis vom Dateisystem tatsächlich als solches behandelt wird. Unterverzeichnisse sind nämlich aus der Sicht von DOS Kombinationen aus Dateien und Verzeichnissen: sie werden wie Dateien abgespeichert (nur durch ein Spezialattribut als Verzeichnisse ausgewiesen), jedoch genauso wie das Hauptverzeichnis ausgewertet.

1.4.1. Verzeichniseintrag

Ein 32 Byte langer Verzeichniseintrag enthält folgende Angaben:

Ÿ den Dateinamen im "8+3"-Format, mit Leerzeichen auf eine Länge von 11 Bytes aufgefüllt

Ÿ das Attributbyte (Read Only, hidden, system, Volume-Name, Unterverzeichnisse und das Archivierungbit)

 

Ÿ Datum und Uhrzeit der letzten Bearbeitung (Jahreszahl wird als Differenz zu 1980 gespeichert, Sekunden werden als 5 Bit Zahl abgespeichert, da die Zählung in 2-Sekunden-Schritten erfolgt.

 

Ÿ Nr. des 1. Clusters der Datei (Verweis zur Kette in der FAT)

Ÿ Dateigröße, die in 4 Bytes gespeichert wird (d.h., theoretisch wäre eine Dateigröße von 4 GB möglich, obwohl die maximale Größe eines Laufwerks unter DOS 2 GB ist (siehe 1.3 FAT)

1.5. Datenbereich

Der Datenbereich nimmt Unterverzeichnisse sowie sämtliche Nutzdaten auf.

 

2. Die beiden Funktionen zur Dateiverwaltung

Neben den Funktionen zur Zeichenein- und -ausgabe sind die Funktionen zur Dateiverwaltung die Grund-Funktionen, die ein Betriebssystem dem Programmierer zur Verfügung stellen muß. Den Kern bilden die Funktionen zum:

· Erstellen und Löschen einer Datei,

·  Öffnen und Schließen einer Datei,

· Lesen und Schreiben aus bzw. in eine Datei.

Eine Besonderheit des DOS ist es, daß diese Funktionen nicht nur einmal, sondern gleich zweimal existieren. Das begründet sich aus der Kompatibilität zu CP/M- und UNIX. Mit dieser Information ist es dann nicht mehr verwunderlich, daß jeweils neben der unixkompatiblen Dateifunktion eine CP/M-kompatible Dateifunktion existiert.

Die CP/M-kompatiblen Funktionen werden als FCB-Funktionen bezeichnet. Der Name FCB steht dabei für File Control Block (Dateikontrollblock). Diese Funktionen sind eigentlich ein Relikt aus alten Zeiten und werden kaum noch benutzt.

Die UNIX-kompatiblen Funktionen werden Handle-Funktionen genannt. Sie verdanken ihren Namen einem (in englischen handle genannten) numerischen Wert, der als Schlüssel für den Zugriff auf die jeweilige Datei dient. Er wird dem Aufrufer beim Öffnen einer Datei übergeben.

2.1 Handle-Funktionen

Der Zugriff auf Dateien über Handle-Funktionen ist für den Programmierer viel komfortabler als der Zugriff über FCB-Funktionen. Genau so wie bei UNIX erfolgt der Zugriff auf eine Datei über ihren Dateinamen. Dann muß ein ASCII-String zur Information, was man mit der Datei vor hat, übergeben werden. Kann die Datei geöffnet werden, wird ein 16 Bit breiter numerischer Wert zurückgeliefert, den sich das Programm merken muß. Jeder weitere Zugriff erfolt dann über diesen Handle, d.h. es wird zB: beim Aufruf der Lesefunktion nicht der Dateiname, sondern der zuständige Handle übergeben.

 

Der Begriff Handle, der übersetzt nichts anderes als Türklinke bedeutet, ist dabei eine sehr treffende Bezeichnung für seine Aufgabe, öffnet er doch als eine Art Türklinke das Tor und damit den Zugang zu einer Datei. Natürlich muß DOS sich während der Manipulation einer Datei bestimmte Daten über diese Datei merken. Im Gegensatz zu den FCB-Funktionen geschieht dies jedoch nicht in einem vom jeweiligen Programm zur Verfügung gestellten Speicherbereich, sondern in Tabellen innerhalb des DOS. Da dort aber nicht unbegrenzt Speicherplatz zur Verfügung steht, ist die Anzahl der gleichzeitig geöffneten Dateien und damit die Anzahl der gleichzeitig verfügbaren Handles limitiert. Die Gesamtzahl der zur Verfügung stehenden Handles wird durch eine Angabe in der Konfigurationsdatei des Systems, der Datei CONFIG.SYS, festgelegt. Die dafür zuständige Eintragung in dieser Datei lautet: FILES = X (max. 255)

 

Während die Gesamtzahl der Handles über den FILES-Befehl festgelegt wird, erlaubt DOS pro Programm jeweils maximal nur 20 Handles. Außerdem werden bereits nach dem hochbooten mind. 5 Handles an Standardgeräte, wie zB: Tastatur, Bildschirm u.s.w. verbraucht.

 

Ein weiterer Unterschied zu den FCB-Funktionen besteht im Bereich der Lese- und Schreibfunktionen, die wesentlich einfacher sind

 

2.2. FCB-Funktionen

 

Wie bereits im vorigen Kapitel erläutert wurde, kann DOS zur Manipulation einer Datei auf eine Datenstruktur zurückgreifen, die FCB genannt wird. Jedoch kann nicht nur DOS, sondern auch der Programmierer aus dieser Datenstruktur Nutzen ziehen, indem er ihr zB: bestimmte Informationen über die Datei entnimmt oder aber diese Informationen manipuliert. Aus diesem Grund wollen wir uns zunächst einmal den Aufbau eines FCB anschauen, bevor wir auf die einzelnen FCB-Funktionen eingehen.

 

Der FCB ist eine 37 Byte lange Datenstruktur, die in einzelne unterschiedlich große Datenfelder aufgeteilt ist. Diese Felder sind in der folgenden Abbildung dargestellt.

 

 

 
 
 
 
Aufbau eines File Control Blocks (FCB)
Addr.
Inhalt
Typ
+ 00h
Gerätenummer
1 Byte
+ 01h
Dateiname (aufgefüllt mit Leerzeichen)
8 Byte
+ 09h
Dateierweiterung (aufgefüllt mit Leerzeichen)
3 BYTE
+ 0Ch
Aktuelle Blocknummer
1 WORD
+ 0Eh
Datensatzgröße
1 WORD
+ 10h
Dateigröße
1 DWORD
+ 14h
Datum der letzten Modifikation
1 WORD
+ 16h
Uhrzeit der letzten Modifikation
1 WORD
+ 18h
Reserviert
8 BYTE
+ 20h
Aktuelle Datensatznummer
1 BYTE
+ 21h
Datensatznummer für wahlfreien Zugriff
1 DWORD
Länge: 37 Byte

Da der Dateiname sich als ASCII-String in einem Feld ab der Speicherstelle 01h befindet, welches 8 Bytes lang ist, wird nur der Dateiname, nicht aber dessen Pfadbezeichnung aufgenommen. Dies ist der wesentliche Grund dafür, daß über die FCB-Funktionen nur auf Dateien im aktuellen Verzeichnis zugegriffen werden kann.