Ein File Control Block ist eine temporäre Datenstruktur zur Verwaltung von geöffneten Dateien bei bestimmten Betriebssystemen.
Details
Das Betriebssystem speichert und verwaltet in einem FCB alle Informationen, die es über eine bestimmte geöffnete Datei zu deren Verwendung benötigt. Indem der FCB normalerweise im Speicher des Anwendungsprogramms und nicht im Betriebssystemeigenen Speicher liegt, kann ein Programm so viele Dateien gleichzeitig geöffnet halten, wie es will, vorausgesetzt es reserviert genug Speicherplatz für die dafür benötigten FCBs. In dieser flexiblen Speicherverwendung – ein Programm, das weniger Dateien benötigt, muss ja so auch weniger Platz für FCBs aufwenden und kann den Speicher stattdessen anderweitig nutzen – liegt der Hauptvorteil von FCBs. Ein wesentlicher Nachteil derselben ist aber, dass dem Anwendungsprogramm die Größe des FCBs bekannt sein muss, da es ja den dafür nötigen Speicher selbst bereitstellen muss; daher kann diese Größe in späteren Betriebssystem-Versionen nicht erhöht werden – etwa um zusätzliche vom Betriebssystem intern benötigte Informationen aufzunehmen –, ohne dass die Kompatibilität mit älteren Anwendungsprogrammen zerstört wird.
CP/M verwendet ausschließlich FCBs zur Dateiadressierung. MS-DOS benutzt ein anderes Dateisystem (FAT), verwendet aber in den Versionen 1.x trotzdem die hergebrachten FCBs zum Dateizugriff, auch um Drittanbietern von CP/M-basierter Software eine schnelle und einfache Portierung ihrer Programme zu erlauben.
MS-DOS Versionen ab 2.0 und neuere MS-DOS-kompatible Betriebssysteme stießen auf das oben beschriebene Größenproblem, da sich kein Platz im FCB fand zur Speicherung von Informationen, die zur Verwendung der neu eingeführten Unterverzeichnisse notwendig waren. Sie stellen FCBs nur mehr aus Kompatibilitätsgründen zur Verfügung, und sie verwenden Datei-Handles als Standardmethode für den Dateizugriff, wobei die eigentlichen Verwaltungsdaten zu einer Datei nun intern in einem dafür reservierten Betriebssystem-Speicherbereich verwaltet werden.
Die FCBs sind in diesen Betriebssystemen nur Dummys, die einen Verweis auf die eigentlichen, im Betriebssystemeigenen Speicher verwalteten Dateiinformationen enthalten. Die Zahl solcher Dummys ist beschränkt, normalerweise auf 4; zur Erhöhung kann man zur Bootzeit den FCBS= Parameter in der Datei CONFIG.SYS angeben, wobei jedoch pro möglichem FCB-Dummy eine gewisse Menge Speicher dauerhaft reserviert wird, der nicht anderweitig verwendbar ist. Dieser Parameter existiert sogar noch bei Windows 2000 oder Windows XP (nur 32-Bit-Version), ist aber nur beim Einsatz von bestimmten DOS-Programmen wie beispielsweise WordStar von Bedeutung.
Struktur eines FCB bei CP/M
Ein FCB besteht aus einer Folge von 33 oder 36 Bytes mit Laufwerk, Dateiname und anderen Informationen.
Byte | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16..31 | 32 | 33 | 34 | 35 |
Element | DR | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | T1 | T2 | T3 | EX | S1 | S2 | RC | D0..D15 | CR | R0 | R1 | R2 |
Byte | Wert | Beschreibung |
---|---|---|
DR | 0..16 | Laufwerk (DRive) |
0 | Standardlaufwerk | |
1 | Laufwerk A: | |
... | ... | |
16 | Laufwerk P: | |
F1..F8 | A..Z | Dateiname (File) in Großbuchstaben |
T1..T3 | A..Z | Dateierweiterung (Type) in Großbuchstaben. Bit 7 hat eine besondere Bedeutung |
T1.7 | 1 | Datei nur-lesen |
T2.7 | 1 | Systemdatei |
EX | 0..31 | Nummer des aktuellen EXtents. |
S1 | 0..255 | reserviert für interne Verwendung (System 1) |
S2 | 0..255 | reserviert für interne Verwendung (System 2) |
RC | 0..127 | Anzahl Records (Record Count) des aktuellen Extents |
D0..D15 | 0..255 | Systembereich zur internen Verwendung |
CR | 0..255 | Aktueller (Current) Record bei sequentiellem Dateizugriff. |
R0..R1 | 0..65535 | Aktueller Record bei direktem Dateizugriff. |
R2 | 0..1 | Reserviert für direkten Dateizugriff. |
CP/M stellt einen Standard-FCB an der Adresse 005CH bereit, mit dem genau eine Datei geöffnet werden kann. Weitere Dateien verwaltet die Anwendung über zusätzliche FCBs im eigenen Adressraum. FCBs werden im Verzeichnis-Bereich auf dem Speichermedium abgelegt, beim Öffnen einer Datei in den Arbeitsspeicher kopiert und beim Schließen wieder zurückgeschrieben.