26
bs-6 1 6 Dateiverwaltung

Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften: persistent ( = langzeitgespeichert auf Platte oder

Embed Size (px)

Citation preview

Page 1: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 1

6 Dateiverwaltung

Page 2: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 2

Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:

persistent ( = langzeitgespeichert auf Platte oder anderem externen Datenträger)

identifizierbar über einen Dateinamen (Zeichenkette)

sprachunabhängig spezifiziert (mit Bytes, Bytefolgen, Ganzzahlen)

Page 3: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 3

Spezielle Dateitypen z.B.

sequentiell indexsequentiellProgrammBibliothekVerzeichnis.....

haben gemeinsamen Obertyp

Datei mit Dateiattributen (file attributes) wie Dateigröße, Schutzstatus etc.

Page 4: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 4

Modell:

Dateiverzeichnis DateienfileCatalog: Map<String,File>

Attribute

eigentlicheDaten

Page 5: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 5

6.1 Schnittstelle des Dateisystems

ist Teil der Systemschnittstellefür Benutzerprozesse,vgl. 2.5

Page 6: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 6

6.1.1 Allgemeine Dateioperationen

(„generische“ Operationen, zum Obertyp Datei gehörig,daher für alle Dateitypen verfügbar)

operieren auf dem Dateiverzeichnis und den Dateiattributen:

Operationen auf dem Dateiverzeichnis:

Einträge hinzufügen, suchen, ändern, löschen

Operationen auf den Dateiattributen:

Attribute initialisieren, abfragen, ändern

Page 7: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 7

6.1.1.1 Operationen auf dem Dateiverzeichnis(ohne Bezug auf bestimmtes Betriebssystem)

Merke: Benutzer identifizieren Dateien grundsätzlich nur über die Namen – die Dateiverweise bleiben unsichtbar!

create(name,type,mode) [creat u.a.]

erzeugt und initialisiert Datei name vom Typ type*mit Schutzstatus mode (6.1.1.2)(d.h. erzeugt Dateiobjekt und Eintrag im Dateiverzeichnis).(Wenn Datei bereits vorhanden, Löschen des Dateiinhalts.)

delete(name) gibt es nicht – sondern:

Unix

Page 8: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 8

unlink(name) [unlink]

löscht den Eintrag name im Dateiverzeichnis(und löscht die Datei, falls im Verzeichnis kein weiterer Verweis auf die Datei übrig bleibt und die Datei nichtin Benutzung ist).Fehler, wenn name im Verzeichnis nicht vorkommt

link(name,alias) [link]

generiert einen neuen Eintrag mit dem Namen aliasfür die bereits unter dem Namen name erreichbare Datei.Fehler, wenn name im Verzeichnis nicht vorkommt

oder alias bereits im Verzeichnis vorkommt

Page 9: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 9

file = lookup(name)

liefert Verweis auf die Datei name. Fehler, wenn name im Verzeichnis nicht vorkommtAchtung: diese Operation steht dem Benutzer nicht

zur Verfügung; sie wird nur innerhalb desBetriebssystems benutzt.

update(name,file)

ist nicht vorgesehen.

Page 10: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 10

6.1.1.2 Operationen auf Dateien

Attribute initialisieren, abfragen, ändern

class File { // Attribute: private String type; private String owner; private String group; private String protection; private int refcount; private int size; private int timeOfLastAccess; private int timeOfLastWriteAccess; .....

Page 11: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 11

status(name,&buffer) [stat]

legt die Attribute der Datei name in buffer ab.Fehler, wenn name im Verzeichnis nicht vorkommt

create(name,type,mode) [creat u.a.]

setzt bei Neuerzeugung der Datei (siehe 6.1.1.1) den Typ der Datei name auf type,owner auf den owner des ausführenden Prozesses,group auf die group des ausführenden Prozesses,protection auf mode,refcount auf 0,

und in jedem Fallsize auf 0,Zeiten auf aktuelle Zeit.

Page 12: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 12

chmod(name,mode) [chmod]

setzt den Schutzstatus der Datei name auf mode

chown(name,owner,group) [chown]

setzt den Schutzstatus der Datei name auf mode

utime(name,times) [utimes]

setzt die Zugriffszeiten der Datei name auf times

! Ferner implizite Änderungen als Folge von Zugriffen auf die Dateiinhalte !

Page 13: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 13

6.1.2 Sequentielle Dateien

Modell: endliche Folge von Bytes

Operationen: keine (an der Systemschnittstelle) – ausschließlich indirekter Zugriff über

Kanal (2.3) (Unix: „open file description“),

der als externer Iterator („Lese/Schreibfenster“) auf der Datei realisiert ist. In Pseudocode:

Page 14: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 14

interface Channel {void write(Bytes buf, int n);...}

class Iterator implements Channel { private File file; private int position = 0;

public Iterator(File f) { file = f; }public void write(Bytes buf, int n) {

..... position += n; }...}

class FileSystem { private Catalog catalog = ...;

public Iterator open(name,mode) { File f = catalog.lookup(name); return new Iterator(f); }

...}

Page 15: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

pos

pos

pos

(Benutzerprozess) (Betriebssystem)

Kanalnummern Kanallisten Iteratoren Dateien Verzeichnis

01234567

01234567

Prozess p

Prozess q

file descriptor open file list* file table

Unix-Terminologie

Page 16: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 16

Benutzung sequentieller Dateien in Unix:

fd = open(name,flags) (vgl. 2.5)

erzeugt und/oder öffnet die sequentielle Datei name (bei Erzeugung: Initialisierung der Attribute wie bei creat),d.h. erzeugt einen Iterator für die Datei und erteilt für dessen Benutzung die Lese/Schreibberechtigung gemäß flags und mode.

Der Kanalverweis wird in die erste freie Stelle in derKanalliste eingetragen; deren Index wird als Ergebnisgeliefert.

Page 17: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 17

close(channel)

macht die Kanalnummer channel ungültig.

Falls dies die letzte gültige Nummer (auch von anderenProzessen) für den dahinterstehenden Iterator war, wird dieser gelöscht.

Falls in diesem Fall auch im Verzeichnis kein Eintragfür die Datei mehr vorliegt, wird die Datei gelöscht.

fstat(channel,&buffer)

wie stat(name,&buffer)

Page 18: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 18

Operationen des Iterators:

read(channel,buffer,n) (vgl. 2.3)

liest maximal n Bytes, beginnend bei der aktuellen Position, versetzt die aktuelle Position um nund liefert die Anzahl der tatsächlich gelesenen Bytes.Fehler, falls channel nicht zum Lesen geöffnet wurde.

Beachte: - Ein Iterator kann nebenläufig von mehreren Threads oder sogar Prozessen benutzt werden*!

- Eine Datei kann nebenläufig über mehrere Iteratoren benutzt werden!

Page 19: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 19

write(channel,buffer,n) (vgl. 2.3)

schreibt n Bytes, beginnend bei der aktuellen Position, und versetzt die aktuelle Position um nFehler, falls channel nicht zum Schreiben geöffnet wurde.

Beachte: - Ein Iterator kennt nur eine Lese/Schreibposition!

- Vorsicht beim Dateizugriff über mehrere Iteratoren, wenn Schreiben beteiligt!

- Extreme Vorsicht, wenn Schreiben beteiligt bei nebenläufiger Benutzung von Iteratoren und/oder nebenläufigem Dateizugriff über mehrere Iteratoren !!

Page 20: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 20

Zum Beispiel:

2 Schreiber über gleichen Iterator:

zufällige Verschränkung der Ausgaben droht.

2 Schreiber über verschiedene Iteratoren:

Überschreiben von Daten droht !

Notwendigkeit der Sperrsynchronisation:

advisory locking (Programm sperrt explizit) oder mandatory locking (automatisches Sperren)

für ganze Dateien oder für Teilbereiche,mit Leser/Schreiber-Ausschluß

Page 21: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 21

Posix Standard: advisory lockingmittels fcntl()

Unix System V: mandatory locking über den Schutzstatus (chmod())

Solaris: ebenso

Linux: sowohl als auch;mandatory locking kann für einganzes Dateisystem an- und ab-geschaltet werden.

Page 22: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 22

lseek(channel,offset,whence) (vgl. 2.5)

setzt die Lese/Schreibposition in dem über channelerreichbaren Iterator.

Damit ist zusätzlich zum Standardzugriff – sequentiell –auch ein Direktzugriff möglich.

Manche Systeme unterscheiden

zwischen sequentiellen Dateien und Direktzugriffsdateien.

Page 23: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 23

6.1.3 Indexsequentielle Dateien(indexed-sequential files)

Modell: Abbildung Schlüssel Daten bzw. endliche Tabelle mit Einträgen (Bytes,Bytes)

Operationen: wie für tabellierte Abbildungen üblich:

Einträge einfügen, suchen, fortschreiben, löschen,ferner iterieren (genauer: sequentielles Lesen)

Historisch: „primitive Datenbank“. Die Bezeichnung „indexsequentiell“ reflektiert die Implementierung.

Page 24: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 24

6.1.4 Programmdateien

Einerseits:

Übersetzer/Binder erzeugt ein ausführbares Programm,indem er dessen Code + Daten + Verwaltungsinformationin eine sequentielle Datei schreibt.

Andererseits:

exec(name) soll nur für „Programmdateien“ erlaubt sein

Gibt es einen Dateityp „Programmdatei“und wie verhält sich dieser zum Typ „sequentielle Datei“ ?

Page 25: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 25

Vererbungshierarchie:

Datei link...

sequentiell indexsequentiell . . . . . . . . read...

Programmdatei exec...

Typischerweise weniger systematisch:„Typ Programmdatei“ wird durch speziellen Inhalt kenntlich gemacht, z.B. durch Beginn mit magic number

Page 26: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder

bs-6 26

Programmdatei enthält also

magic number

Beschreibung der Segmentstruktur

Code (Unix: „text“) + Konstanten

„statisch initialisierte“ Variable (Unix: „data“)

Startadresse