„File Control Block“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Aka (Diskussion | Beiträge) K zu großen Zeilenabstand entfernt |
Keine Bearbeitungszusammenfassung |
||
(10 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
⚫ | |||
== FCB (File Control Block) Dateisteuerblock == |
|||
== Details == |
|||
⚫ | |||
Computer-Betriebssystemen. [[CP/M]] verwendet FCB's zur Dateiadressierung. |
|||
[[MS-DOS]] benutzt ein anderes Dateisystem ([[File Allocation Table|FAT]]), stellt aber FCB's aus Kompatibilitätsgründen |
|||
zur Verfügung. Der FCB-Parameter in der Datei [[CONFIG.SYS]] existiert auch bei |
|||
[[Windows 2000]] oder [[Windows XP]], ist aber nur bei Uralt-Software wie |
|||
beispielsweise [[WordStar]] von Bedeutung. |
|||
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 ([[File Allocation Table|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 [[Unterverzeichnis]]se notwendig waren. Sie stellen FCBs nur mehr aus Kompatibilitätsgründen zur Verfügung, und sie verwenden Datei-[[Handle]]s 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. |
|||
⚫ | |||
Ein FCB besteht aus einer Folge von 33 oder 36 Bytes mit Laufwerk, Dateiname und anderen Informationen. |
Ein FCB besteht aus einer Folge von 33 oder 36 Bytes mit Laufwerk, Dateiname und anderen Informationen. |
||
{| class="wikitable" style="text-align: center;" |
|||
⚫ | |||
{|border="1" cellspacing="0" cellpadding="1" style="border-collapse:collapse;" |
|||
|class=" |
|class="hintergrundfarbe8" width="30" |00 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |01 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |02 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |03 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |04 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |05 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |06 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |07 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |08 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |09 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |10 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |11 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |12 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |13 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |14 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |15 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="60" |16..31 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |32 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |33 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |34 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" width="30" |35 |
||
⚫ | |||
|- |
|- |
||
|class="hintergrundfarbe6 |
|class="hintergrundfarbe6" |'''Element''' |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |DR |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F1 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F2 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F3 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F4 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F5 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F6 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F7 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |F8 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |T1 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |T2 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |T3 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |EX |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |S1 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |S2 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |RC |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |D0..D15 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |CR |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |R0 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |R1 |
||
|class="hintergrundfarbe8 |
|class="hintergrundfarbe8" |R2 |
||
|- |
|- |
||
|} |
|} |
||
{| class="wikitable" |
|||
⚫ | |||
{| border="0" width="100%" |
|||
⚫ | |||
|width="30" | |
|||
⚫ | |||
| |
|||
{|border="1" cellspacing="0" cellpadding="1" style="border-collapse:collapse;" |
|||
⚫ | |||
⚫ | |||
⚫ | |||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |DR |
|class="hintergrundfarbe8" align="center" |DR |
||
|class="hintergrundfarbe8" align="center" |0..16 |
|class="hintergrundfarbe8" align="center" |0..16 |
||
|class="hintergrundfarbe8" |
|class="hintergrundfarbe8" |Laufwerk ('''DR'''ive) |
||
|- |
|- |
||
| |
| |
||
|align="center" |0 |
|align="center" |0 |
||
| |
| Standardlaufwerk |
||
|- |
|- |
||
| |
| |
||
|align="center" |1 |
|align="center" |1 |
||
| |
| Laufwerk A: |
||
|- |
|- |
||
| |
| |
||
|align="center" |... |
|align="center" |... |
||
| |
| ... |
||
|- |
|- |
||
| |
| |
||
|align="center" |16 |
|align="center" |16 |
||
| |
| Laufwerk P: |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |F1..F8 |
|class="hintergrundfarbe8" align="center" |F1..F8 |
||
|class="hintergrundfarbe8" align="center" |A..Z |
|class="hintergrundfarbe8" align="center" |A..Z |
||
|class="hintergrundfarbe8" |
|class="hintergrundfarbe8" |Dateiname ('''F'''ile) in Großbuchstaben |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |T1..T3 |
|class="hintergrundfarbe8" align="center" |T1..T3 |
||
|class="hintergrundfarbe8" align="center" |A..Z |
|class="hintergrundfarbe8" align="center" |A..Z |
||
|class="hintergrundfarbe8" |
|class="hintergrundfarbe8" |Dateierweiterung ('''T'''ype) in Großbuchstaben. Bit 7 hat eine besondere Bedeutung |
||
|- |
|- |
||
|align="center" |T1.7 |
|align="center" |T1.7 |
||
|align="center" |1 |
|align="center" |1 |
||
| |
| |Datei nur-lesen |
||
|- |
|- |
||
|align="center" |T2.7 |
|align="center" |T2.7 |
||
|align="center" |1 |
|align="center" |1 |
||
| |
| |Systemdatei |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |EX |
|class="hintergrundfarbe8" align="center" |EX |
||
|class="hintergrundfarbe8" align="center" |0..31 |
|class="hintergrundfarbe8" align="center" |0..31 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |Nummer des aktuellen '''EX'''tents. |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |S1 |
|class="hintergrundfarbe8" align="center" |S1 |
||
|class="hintergrundfarbe8" align="center" |0..255 |
|class="hintergrundfarbe8" align="center" |0..255 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |reserviert für interne Verwendung ('''S'''ystem '''1''') |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |S2 |
|class="hintergrundfarbe8" align="center" |S2 |
||
|class="hintergrundfarbe8" align="center" |0..255 |
|class="hintergrundfarbe8" align="center" |0..255 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |reserviert für interne Verwendung ('''S'''ystem '''2''') |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |RC |
|class="hintergrundfarbe8" align="center" |RC |
||
|class="hintergrundfarbe8" align="center" |0..127 |
|class="hintergrundfarbe8" align="center" |0..127 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |Anzahl Records ('''R'''ecord '''C'''ount) des aktuellen Extents |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |D0..D15 |
|class="hintergrundfarbe8" align="center" |D0..D15 |
||
|class="hintergrundfarbe8" align="center" |0..255 |
|class="hintergrundfarbe8" align="center" |0..255 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |Systembereich zur internen Verwendung |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |CR |
|class="hintergrundfarbe8" align="center" |CR |
||
|class="hintergrundfarbe8" align="center" |0..255 |
|class="hintergrundfarbe8" align="center" |0..255 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |Aktueller ('''C'''urrent) '''R'''ecord bei sequentiellem Dateizugriff. |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |R0..R1 |
|class="hintergrundfarbe8" align="center" |R0..R1 |
||
|class="hintergrundfarbe8" align="center" |0..65535 |
|class="hintergrundfarbe8" align="center" |0..65535 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |Aktueller '''R'''ecord bei direktem Dateizugriff. |
||
|- |
|- |
||
|class="hintergrundfarbe8" align="center" |R2 |
|class="hintergrundfarbe8" align="center" |R2 |
||
|class="hintergrundfarbe8" align="center" |0..1 |
|class="hintergrundfarbe8" align="center" |0..1 |
||
|class="hintergrundfarbe8" align="left" |
|class="hintergrundfarbe8" align="left" |Reserviert für direkten Dateizugriff. |
||
|- |
|- |
||
|} |
|||
|width="30" | |
|||
|} |
|} |
||
CP/M stellt einen Standard-FCB an der Adresse 005CH bereit, mit dem genau eine Datei geöffnet werden kann. |
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 |
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. |
in den Arbeitsspeicher kopiert und beim Schließen wieder zurückgeschrieben. |
||
[[Kategorie:Dateiverwaltung]] |
[[Kategorie:Dateiverwaltung]] |
||
[[ca:File control block]] |
|||
[[en:File control block]] |
|||
[[es:File control block]] |
Aktuelle Version vom 22. März 2025, 00:32 Uhr
Ein File Control Block ist eine Datenstruktur zur Verwaltung von geöffneten Dateien unter CP/M und CP/M-Clonen.
Details
[Bearbeiten | Quelltext bearbeiten]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 unter CP/M
[Bearbeiten | Quelltext bearbeiten]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.