Zum Inhalt springen

„File Control Block“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Bessere Erklärung und Linkfix
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Ein '''File Control Block''' ist eine [[Datenstruktur]] zur Verwaltung von geöffneten [[Datei]]en unter CP/M und CP/M-Clonen.
== FCB (File Control Block) Dateisteuerblock ==


== Details ==
Ein File Control Block ist eine temporäre [[Datenstruktur]] zur Verwaltung von geöffneten [[Datei]]en bei bestimmten [[Computer]]-[[Betriebssystem]]en. 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 Betriebssystem-eigenen 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, dass 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.

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.
[[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.
Zeile 7: Zeile 9:
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.
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 Betriebssystem-eigenen 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 gewissen 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 von bestimmten DOS-Programmen wie beispielsweise [[WordStar]] von Bedeutung.
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 ==
== Struktur eines FCB unter CP/M ==
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;"

|class="hintergrundfarbe6" |'''Byte'''
{|border="1" cellspacing="0" cellpadding="1" style="border-collapse:collapse;"
|class="hintergrundfarbe6" align="center" width="60" |'''Byte'''
|class="hintergrundfarbe8" width="30" |00
|class="hintergrundfarbe8" align="center" width="30" |00
|class="hintergrundfarbe8" width="30" |01
|class="hintergrundfarbe8" align="center" width="30" |01
|class="hintergrundfarbe8" width="30" |02
|class="hintergrundfarbe8" align="center" width="30" |02
|class="hintergrundfarbe8" width="30" |03
|class="hintergrundfarbe8" align="center" width="30" |03
|class="hintergrundfarbe8" width="30" |04
|class="hintergrundfarbe8" align="center" width="30" |04
|class="hintergrundfarbe8" width="30" |05
|class="hintergrundfarbe8" align="center" width="30" |05
|class="hintergrundfarbe8" width="30" |06
|class="hintergrundfarbe8" align="center" width="30" |06
|class="hintergrundfarbe8" width="30" |07
|class="hintergrundfarbe8" align="center" width="30" |07
|class="hintergrundfarbe8" width="30" |08
|class="hintergrundfarbe8" align="center" width="30" |08
|class="hintergrundfarbe8" width="30" |09
|class="hintergrundfarbe8" align="center" width="30" |09
|class="hintergrundfarbe8" width="30" |10
|class="hintergrundfarbe8" align="center" width="30" |10
|class="hintergrundfarbe8" width="30" |11
|class="hintergrundfarbe8" align="center" width="30" |11
|class="hintergrundfarbe8" width="30" |12
|class="hintergrundfarbe8" align="center" width="30" |12
|class="hintergrundfarbe8" width="30" |13
|class="hintergrundfarbe8" align="center" width="30" |13
|class="hintergrundfarbe8" width="30" |14
|class="hintergrundfarbe8" align="center" width="30" |14
|class="hintergrundfarbe8" width="30" |15
|class="hintergrundfarbe8" align="center" width="30" |15
|class="hintergrundfarbe8" width="60" |16..31
|class="hintergrundfarbe8" align="center" width="60" |16..31
|class="hintergrundfarbe8" width="30" |32
|class="hintergrundfarbe8" align="center" width="30" |32
|class="hintergrundfarbe8" width="30" |33
|class="hintergrundfarbe8" align="center" width="30" |33
|class="hintergrundfarbe8" width="30" |34
|class="hintergrundfarbe8" align="center" width="30" |34
|class="hintergrundfarbe8" width="30" |35
|class="hintergrundfarbe8" align="center" width="30" |35
|-
|-
|class="hintergrundfarbe6" align="center" |'''Element'''
|class="hintergrundfarbe6" |'''Element'''
|class="hintergrundfarbe8" align="center" |DR
|class="hintergrundfarbe8" |DR
|class="hintergrundfarbe8" align="center" |F1
|class="hintergrundfarbe8" |F1
|class="hintergrundfarbe8" align="center" |F2
|class="hintergrundfarbe8" |F2
|class="hintergrundfarbe8" align="center" |F3
|class="hintergrundfarbe8" |F3
|class="hintergrundfarbe8" align="center" |F4
|class="hintergrundfarbe8" |F4
|class="hintergrundfarbe8" align="center" |F5
|class="hintergrundfarbe8" |F5
|class="hintergrundfarbe8" align="center" |F6
|class="hintergrundfarbe8" |F6
|class="hintergrundfarbe8" align="center" |F7
|class="hintergrundfarbe8" |F7
|class="hintergrundfarbe8" align="center" |F8
|class="hintergrundfarbe8" |F8
|class="hintergrundfarbe8" align="center" |T1
|class="hintergrundfarbe8" |T1
|class="hintergrundfarbe8" align="center" |T2
|class="hintergrundfarbe8" |T2
|class="hintergrundfarbe8" align="center" |T3
|class="hintergrundfarbe8" |T3
|class="hintergrundfarbe8" align="center" |EX
|class="hintergrundfarbe8" |EX
|class="hintergrundfarbe8" align="center" |S1
|class="hintergrundfarbe8" |S1
|class="hintergrundfarbe8" align="center" |S2
|class="hintergrundfarbe8" |S2
|class="hintergrundfarbe8" align="center" |RC
|class="hintergrundfarbe8" |RC
|class="hintergrundfarbe8" align="center" |D0..D15
|class="hintergrundfarbe8" |D0..D15
|class="hintergrundfarbe8" align="center" |CR
|class="hintergrundfarbe8" |CR
|class="hintergrundfarbe8" align="center" |R0
|class="hintergrundfarbe8" |R0
|class="hintergrundfarbe8" align="center" |R1
|class="hintergrundfarbe8" |R1
|class="hintergrundfarbe8" align="center" |R2
|class="hintergrundfarbe8" |R2
|-
|-
|}
|}



{| border="0" width="100%"
{| class="wikitable"
!class="hintergrundfarbe6" align="center" |Byte
|width="30" | 
!class="hintergrundfarbe6" align="center" |Wert
|
!class="hintergrundfarbe6" |Beschreibung
{|border="1" cellspacing="0" cellpadding="1" style="border-collapse:collapse;"
!class="hintergrundfarbe6" width="80" align="center" |Byte
!class="hintergrundfarbe6" width="80" align="center" |Wert
!class="hintergrundfarbe6" width="80%" align="left" |Beschreibung
|-
|-
|class="hintergrundfarbe8" align="center" |DR
|class="hintergrundfarbe8" align="center" |DR
|class="hintergrundfarbe8" align="center" |0..16
|class="hintergrundfarbe8" align="center" |0..16
|class="hintergrundfarbe8" align="left" |Laufwerk ('''DR'''ive)
|class="hintergrundfarbe8" |Laufwerk ('''DR'''ive)
|-
|-
| 
| 
|align="center" |0
|align="center" |0
|align="left" |Standardlaufwerk
| Standardlaufwerk
|-
|-
| 
| 
|align="center" |1
|align="center" |1
|align="left" |Laufwerk A:
| Laufwerk A:
|-
|-
| 
| 
|align="center" |...
|align="center" |...
|align="left" |...
| ...
|-
|-
| 
| 
|align="center" |16
|align="center" |16
|align="left" |Laufwerk P:
| 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" align="left" |Dateiname ('''F'''ile) in Großbuchstaben
|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" align="left" |Dateierweiterung ('''T'''ype) in Großbuchstaben. Bit 7 hat eine besondere Bedeutung
|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
|align="left" |Datei nur-lesen
| |Datei nur-lesen
|-
|-
|align="center" |T2.7
|align="center" |T2.7
|align="center" |1
|align="center" |1
|align="left" |Systemdatei
| |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" |Nummer des aktuellen '''EX'''tents.
|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" |reserviert für interne Verwendung ('''S'''ystem '''1''')
|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" |reserviert für interne Verwendung ('''S'''ystem '''2''')
|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" |Anzahl Records ('''R'''ecord '''C'''ount) des aktuellen Extents
|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" |Systembereich zur internen Verwendung
|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" |Aktueller ('''C'''urrent) '''R'''ecord bei sequentiellem Dateizugriff.
|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" |Aktueller '''R'''ecord bei direktem Dateizugriff.
|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" |Reserviert für direkten Dateizugriff.
|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 FCBs im eigenen Adressraum.
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
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]]
[[kk:Файлды басқару блогы]]

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.

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.