Wissensdatenbank Wirtschaftsrecht

aktuelles Dokument: BSys08Dateisystem
image4
image3
image2
image1
 Alle Kategorien:
  Forschungsdatenbank
  Lehrveranstaltungen
  Lexikon
  Literatur
  Rechtsgebiete
  Rechtsprechung
  Service
  Studium F H S
  Wissensmanagement
ich war hier: BSys08Dateisystem

Version [22538]

Dies ist eine alte Version von BSys08Dateisystem erstellt von RonnyGertler am 2013-03-27 12:17:18.

 

 (image: http://wdb.fh-sm.de/uploads/QualipaktLehre/BMBF_Logo_klein.jpg)

Betriebssysteme (Betriebssystemtheorie) - Kapitel 8 - Dateisystem

Attachments
File Last modified Size
BSys53.gif 2023-10-06 18:35 4Kb
BSys54.gif 2023-10-06 18:35 6Kb
BSys55.gif 2023-10-06 18:35 4Kb
BSys56.gif 2023-10-06 18:35 7Kb
BSys57.gif 2023-10-06 18:35 11Kb
BSys58.gif 2023-10-06 18:35 13Kb
BSys59.gif 2023-10-06 18:35 8Kb
BSys60.gif 2023-10-06 18:35 3Kb
BSys61.gif 2023-10-06 18:35 3Kb
BSys62.gif 2023-10-06 18:35 4Kb
BSys63.gif 2023-10-06 18:35 5Kb
BSys64.gif 2023-10-06 18:35 2Kb
BSys65.gif 2023-10-06 18:35 15Kb
BSys66.gif 2023-10-06 18:35 8Kb
BSys67.gif 2023-10-06 18:35 11Kb
BSys68.gif 2023-10-06 18:35 9Kb
BSys69.gif 2023-10-06 18:35 12Kb

Inhalte von Dr. E. Nadobnyh


8.1. Begriffsdefinition


Sekundärspeicher


Der Speicher eines Rechners ist unterteilt in Primärspeicher und Sekundärspeicher. In der Speicherhierarchie steht der Sekundärspeicher weiter vom Prozessor als Primärspeicher.

 (image: https://hssm.hqedv.de/uploads/BSys08Dateisystem/BSys53.gif)

1) Der Primärspeicher (interner Speicher) ist der Hauptspeicher (Arbeitsspeicher) für aktiven Programmen, welche vom Prozessor ausgeführt werden.

2) Der Sekundärspeicher (externer Speicher) ist die dauerhafte Datenablage auf Massenspeichern.

Beispiele:
Plattenspeicher (Harddisc), Magnetbänder, CD.

Eigenschaften im Vergleich:
  1. Der Sekundärspeicher ist nichtflüchtig (persistent), d.h. zulässt eine dauerhafte Speicherung.
  1. Der Sekundärspeicher ist meist billiger, langsamer und größer als Primärspeicher.


Datei und Dateisystem


Daten in einem Sekundärspeicher werden zu Dateien zusammengefasst.

Eine Datei (file) ist ein logisches Betriebsmittel, welches eine endliche Menge zusammengehöriger Daten beinhaltet. Dateien existieren, um Daten zu speichern und später wieder abzurufen.

Ein Dateisystem (file system, Dateiverwaltung) ist ein Teil des Betriebssystems, der der Verwaltung von Daten auf einem Sekundärspeicher dient.

Alle Dateisysteme zielen auf Geräteunabhängigkeit ab, d. h ein Programm muss sich nicht darum kümmern, ob eine Datei sich auf Platte, Magnetband oder einem anderen Massenspeicher befindet.

⇒ Demo 1


8.2. Dateiattribute


Logische Organisation


Eine Datei besteht aus zwei Teilen:

1) Eine logische Datei ist eine Einheit von Daten, die vom Dateisystem abgelagert wird. Eine physische Datei ist eine Implementierung davon und kann in mehrere Abschnitte aufgeteilt werden und sogar auf mehreren Datenträgern gespeichert werden.

2) Ein Dateideskriptor ist eine Tabelle mit Dateiattributen. Dateideskriptoren werden vom Dateisystem auf dem Datenträger abgelegt.

Dateiattribute sind dateispezifische Informationen für der Verwaltung von Dateien. Einige Dateiattribute sind;
1) Dateiname
2) Dateityp
3) Ablageort
4) Datum der Erstellung usw.

⇒ Demo 2.


Metadaten


Als Metadaten bezeichnet man allgemein Daten, die Informationen über andere Daten enthalten.

Beispiele:
  1. Der Name des Autors und die Auflage zu einem Buch.
  1. Attribute zu einer Datei.

Da im Dateideskriptor nur eingeschränkter Platz für die Attribute zur Verfügung steht, können Metadaten zusätzlich direkt in die Datei integriert werden.

 (image: https://hssm.hqedv.de/uploads/BSys08Dateisystem/BSys54.gif)

Beispiel: ID3-Tags in MP3-Dateien.


Dateinamen


Eine Datei ist bei der Erzeugung zu bezeichnen. Unter ihrem Namen kann eine Datei von verschiedenen Prozessen benutzt werden.

Die Dateinamenserweiterung (filename extension, Dateierweiterung, Dateiendung, Dateisuffix) ist der letzte Teil eines Dateinamens und wird gewöhnlich mit einem Punkt abgetrennt, z.B.: „prog.c“.

Die Erweiterung ist optional und wird oft eingesetzt, um das Format einer Datei erkennbar zu machen, ohne die Datei vorher einlesen zu müssen.

⇒ Demo 3.


Dateitypen und Dateizuordnung


Ein Dateityp (Dateiformat) ist eine Definition der Syntax und Semantik von Daten innerhalb einer Datei. Die Erkennung des Formats einer Datei ist notwendig, um Datei-Inhalte richtig interpretieren zu können.

Jedes Betriebssystem muss zwei Varianten von Dateitypen unterscheiden:

1) ausführbare Programme, die in Form von Dateien (executable files) gespeichert werden. Bei der Auswahl wird dieses Programm gestartet, z.B.: „prog.exe“.

2) nicht ausführbare Dateien (Daten, Dokumente). Diese Dateien werden vom Betriebssystem nicht interpretiert, sondern Anwendungsprogrammen zugeordnet, die die Dateien interpretieren können.

Nach der Art des Inhaltes werden unterschieden:

1) Binärdateien enthalten beliebige Bytewerte (auch nicht-alphabetische Zeichen) und können in der Regel nur durch entsprechende Anwendungen gelesen werden. Dazu gehören auch ausführbare Dateien.
Beispiele: a.xls, a.exe, a.obj.

2) Textdateien (ASCII-Dateien) enthalten nur reinen Text und einfache Steuerzeichen, z.B. Zeilenumbruch. Viele Steuerdateien sind Textdateien.
Beispiele: a.htm , a.txt, a.bpr.


Dateityp-Ermittlung


Das Dateiformat kann auf drei verschiedene Arten automatisch ermittelt werden:

1) Die Ermittlung durch Dateinamenserweiterung ist häufig verwendete Methode.

Beispiel: Beim Doppelklick auf buch.doc startet Windows das zugeordnete Programm Microsoft Word mit dieser Datei als Parameter.

2) Die Ermittlung durch Dateiinhalte. Dabei wird auf bekannte Muster untersucht, z.B.: UNIX identifiziert den Dateityp durch die so genannten „magischen Zahlen“.

3) Die Ermittlung durch Metadaten ist die zuverlässigste Methode, weil das Dateiformat zusammen mit der Datei abgelegt ist.


Die Dateityp-Ermittlung durch die Dateinamenserweiterung kann als Anlockung von Würmer benutzt werden.

1) Beim Umbenennen einer Dateinamenserweiterung ändert sich schließlich nur der Dateiname, das Dateiformat bleibt dabei erhalten.

2) Bei Windows werden einige Dateinamenserweiterung standardmäßig nicht angezeigt, z.B. „.exe“.

3) Ein Benutzer kann z.B. per e-mail die ausführbare Datei „Name.jpg.exe“ erhalten, die beim Aufruf Schaden anrichten kann.

4) Der Benutzer wird so in die Irre geführt, da er den Namen „Name.jpg“ sieht und tatsächlich eine ausführbare Datei statt einer Bilddatei aktivieren kann.

⇒ Demo 4


8.3. Dateioperationen


Datei-Spezifikation


Eine Spezifikation einer logischen Datei (abstrakter Datentyp, ADT-Datei) ist eine formalisierte Beschreibung der grundlegenden Dateioperationen unabhängig vom konkreten Dateisystem.

Es wird von der tatsächlichen Implementierung der Operationen abstrahiert. Die Abbildung der logischen Datei auf reale Speichergeräte (Platte, Band, Drucker, etc.) erfolgt durch das Dateisystem.

Eine logische Datei wird vom Dateisystem wie ein langer char-Vektor behandelt:

1) Eine logische Datei ist ein Behälter für eine Reihenfolge von Bytes.
2) Der Dateiinhalt ist beliebig, da er vom Dateisystem nicht interpretiert wird.
3) Die Dateilänge ist nicht im Voraus abzusehen.


Dateiindex


Zu der Spezifikation einer logischen Datei gehört ein Dateiindex (Schreib-/Lese-Zeiger, Dateizeiger, Byte-Position, Seek-Zeiger, Zeichenposition, aktuelle Position, Dateiposition), der von Dateioperationen benutzt wird.

Alle Bytes in einer Datei sind von 0 bis N-1 durchnummeriert. in Dateiindex ist eine ganzzahlige Variable, die innerhalb einer Datei beliebig positioniert werden kann.

Dateiindex ist die Position eines Bytes, welches als Nächstes gelesen oder geschrieben wird.

 (image: https://hssm.hqedv.de/uploads/BSys08Dateisystem/BSys55.gif)

Ein Dateiindex wird beim Öffnen einer Datei angelegt und beim Schließen der Datei gelöscht. Grundsätzlich gilt, dass der Dateiindex beim Lesen bzw. Schreiben entsprechend der transferierten Anzahl der Bytes in Richtung Dateiende verschoben wird.

Die Dateiendesituation (End Of File, EOF) wird festgestellt, wenn der Dateiindex das Dateiende erreicht. Beim Lesevorgang wird bei jeder Vorwärtsbewegung geprüft, ob die Dateiendesituation gerade vorliegt.

Begriffsverwirrung: Der Begriff Dateizeiger (File-Pointer) wird auch in ANSI C für die Bezeichnung eines Zeigers vom Typ FILE verwendet.


Grundlegende Dateioperationen


Unabhängig von konkreten Systemen sind folgende grundlegende Dateioperationen spezifiziert:

1. Create und Delete
  1. Erzeugen einer leeren Datei.
  1. Löschen einer vorhandenen Datei.

2. Open und Close
  1. Öffnen einer vorhandene Datei. Ein Dateiindex wird angelegt und positioniert.
  1. Schließen der Datei. Der entsprechende Dateiindex wird gelöscht.

3. Write und Read
  1. Schreiben in eine Datei ab einem Dateiindex.
  1. Lesen aus einer Datei ab einem Dateiindex.

4. Seek - Positionieren des Dateiindexes.


Öffnen und Schließen von Dateien


1) Beim Öffnen einer Datei wird eine Strukturvariable angelegt, die als eine Kennung (Deskriptor, Handle) bezeichnet wird. Eine Kennung enthält u.a. einen Dateiindex. Nach dem Öffnen sind die Zugriffe auf die Datei erlaubt, z.B. Lesen, Schreiben, Positionieren. Nachfolgende Dateioperationen arbeiten mit der Kennung.
Wird eine Datei mehrmals geöffnet, so wird für jedes neue Öffnen eine separate Kennung angelegt.

2) Schließen der Datei ist eine komplementäre Operation zum Öffnen. Danach wird die Kennung gelöscht und keine weiteren Zugriffe auf die Datei erlaubt.


Kanal und Datenstrom


Ein- und Ausgabe wird als Datenstrom (Byte-Strom, stream) behandelt. Streams sind immer unidirektional.

1) Beim Öffnen einer Datei wird ein Kanal (logischer Kanal, Zugriffskanal, Verbindung ) vom Prozess zur vorhandenen logischen Datei angelegt und eine Übertragungsrichtung des Kanals festgelegt:
  1. unidirektionaler Kanal für Ausgabe,
  1. unidirektionaler Kanal für Eingabe,
  1. bidirektionaler Kanal für abwechselnde Eingabe und Ausgabe.

2) Bei der Ausgabe wird eine Folge von Bytes durch den Kanal transportiert und in die Datei geschrieben.

3) Bei der Eingabe kann die gespeicherte Reihenfolge durch den Kanal exakt wieder abgerufen werden.


Prinzipbeispiel


Datei-Öffnen zur Ausgabe

 (image: https://hssm.hqedv.de/uploads/BSys08Dateisystem/BSys56.gif)


Dateizugriffsschnittstellen


Eine Menge von Dateioperationen einer logischen Datei kann als eine Dateizugriffsschnittstelle bezeichnet werden. Die unterschiedlichen Systeme stellen konkrete Dateizugriffsschnittstellen zur Verfügung.

Zwei Abstraktionsniveaus sind bekannt:

1) Low-Level-Dateizugriff mittels der Operationen von Betriebssystemen. Diese Operationen sind hardwareunabhängig, gehören aber nicht zu dem ANSI C-Standard.

2) High-Level-Dateizugriff mittels der Operationen von Standardbibliotheken. Diese Operationen sind unabhängig von Betriebssystemen bzw. portabel.

 (image: https://hssm.hqedv.de/uploads/BSys08Dateisystem/BSys57.gif)


Einige Dateioperationen


C-Standardbibliothek (stdio.h) Unix-Dateisystem Windows-Dateisystem Beschreibung
fopen open /create CreateFile Neue Datei erzeugen
remove unlink DeleteFile Datei löschen
fopen open CreateFile Vorhandene Datei öffnen
fclose close CloseHandle Datei schließen
fread /fwrite read /write ReadFile /WriteFile Lesen von Datei und Schreiben in Datei
fseek lseek SetFilePointer Positionieren des Dateizeigers
fflush fsync FlushFileBuffers Sofortiges Schreiben des Puffers
feof - - Prüft, ob Dateiende erreicht



8.4. Einige Dateioperationen der C-Standardbibliothek


Erzeugen und Löschen von Dateien


1) Es gibt keine spezielle Funktion zum Erzeugen einer Datei. Eine Datei kann durch die Funktion „fopen“ implizit erzeugt werden. Prototyp:
FILE* fopen(char* dateiname, char* modus);

Das Argument „modus“ ist die Zugriffsart. Beim bestimmten Modus wird eine Datei mit dem „dateiname“ erzeugt, falls sie noch nicht existiert. Danach wird diese Datei sofort geöffnet.

2) Eine Datei wird durch die Funktion „remove“ gelöscht. Prototyp:
int remove(char* dateiname);

Vor dem Löschen muss die Datei geschlossen werden. Bei fehlerfreier Ausführung liefert „remove“ den Wert 0 zurück.

⇒ Demo 5.


Öffnen von Dateien


FILE* fopen(char* dateiname, char* modus);

1) Betriebssystem sucht oder erzeugt die Datei mit dem „dateiname“.

2) Beim Erfolg wird eine FILE-Struktur (Kennung) erzeugt.

3) Die Eigenschaften der Datei werden in einer FILE-Struktur abgelegt, z.B.:
  1. ein Dateiindex wird gesetzt,
  1. ein programminterner Dateipuffer wird angelegt.

4) Die Adresse auf der FILE-Struktur wird zurückgegeben, die beim Dateizugriff verwendet wird.

FILE ist eine spezielle Struktur und ist in stdio.h definiert. Im Normalfall sollte der Programmierer nichts mit den Interna der FILE-Struktur zu tun haben.


High-Level-Dateizugriff


 (image: https://hssm.hqedv.de/uploads/BSys08Dateisystem/BSys58.gif)


Einige Zugriffsarten beim Öffnen


Modus Beschreibung
„w“ und „w+“ (write) 1) Datei zum Schreiben („w+“ - und zum Lesen) öffnen.
2) Existiert die Datei, wird der alte Inhalt überschrieben.
3) Datei wird erzeugt, wenn sie noch nicht existiert.
„a“ und „a+“ (append) 1) Datei zum Anfügen („a+“ - und zum Lesen) öffnen.
2) Existiert die Datei, wird es am Dateiende weiter geschrieben.
3) Datei wird erzeugt, wenn sie noch nicht existiert.
„r“ und „r+“ (read) 1)Datei zum Lesen („r+“ - und zum Schreiben) öffnen.
2)Datei muß existieren.


Der Modus bestimmt auch die Dateiart:

Modus Dateiart Besonderheiten
t oder implizit Text-Datei Unter Windows werden Steuerzeichen in der Datei beachtet.
b Binär-Datei Steuerzeichen werden nicht beachtet.


Beispiele: „rt“, „wb“ , „at+“, „rb+“ usw.


Schreiben und Lesen von Dateien


Die C-Standardbibliothek bietet auch Funktionen für zeichenweisen, zeilenweisen, formatierten und blockweisen Datentransfer, während sich Unix und Windows auf den Blocktransfer beschränken.

Daten Zeichen C-String Formatierte Daten Block
Schreiben fputc fputs fprintf fwrite
Lesen fgetc fgets fscanf fread


Beispiel:
  1. fread liest aus der Datei fp in den Zwischenpuffer zp bis zu n Datenobjekte der Größe size:
int fread (void* zp, int size, int n, FILE* fp);
  1. fwrite ist die Gegenfunktion:
int fwrite(void* zp, int size, int n, FILE* fp);

⇒ Demo 6


Textmodus


1) Bei Windows-Compilern gibt es den Unterschied zwischen einer Datei im Text- und im Binärmodus. Im Textmodus wird:
  1. beim Schreiben eines Zeilenendes ein LF durch ein CR LF (Carriage Return, Line Feed) ersetzt,
b) beim Lesen ein CR LF durch ein LF ersetzt.

2) Bei UNIX-Compilern wird der Schalter b zwar akzeptiert, es gibt jedoch keinen Unterschied zwischen Text- und Binärmodus.
Es wird auf den Ersetzungsvorgang am Zeilenende komplett verzichtet.

⇒ Demo 7


Dateipuffer


Die High-Level-Funktionen verwenden einen programminternen Dateipuffer. Die Funktionen greifen zum Lesen und Schreiben immer nur auf den Dateipuffer zu. Der Dateipuffer ermöglicht einen effektiver Datentransfer zwischen Primärspeicher und Sekundärspeicher.

Der Dateipuffer birgt jedoch das Risiko eines möglichen Datenverlustes in sich. Wenn eine Datei für die Ausgabe geöffnet wurde, werden Daten erst beschrieben, wenn der Puffer voll ist. Ist das Programm durch einen Fehler abgebrochen, gehen die Daten im Puffer verloren.

Die Funktion fflush schreibt sofort alle Daten des Ausgabestroms aus dem Dateipuffer in den Sekundärspeicher. Es wird empfohlen, nach der Ausgabe sehr wichtiger Daten die Funktion fflush aufzurufen.


Wahlfreier Dateizugriff


Der wahlfreie Dateizugriff (direkter Zugriff, random access) bietet die Möglichkeit, die Informationen direkt an einer bestimmten Position in der Datei zu lesen bzw. zu verändern.

Eine der Funktionen zur Positionierung ist:
int fseek(FILE *fp, long offset, int basis);

fseek positioniert den Dateiindex in der Datei fp auf die Position basis mit dem Abstand offset. Der Abstand kann auch negativ sein. Der Bezugspunkt basis kann einen der folgenden drei Werte haben: 0 -Dateianfang, 1 -aktuelle Position, 2– Dateiende.

Im Fehlerfall ist der Funktionswert ungleich Null.

Bemerkung:
Es gibt zusätzliche Bedingungen für die Positionierung in Textdateien.

⇒ Demo 8









CategoryBSys
Diese Seite wurde noch nicht kommentiert.
Valid XHTML   |   Valid CSS:   |   Powered by WikkaWiki