Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften:  persistent ( = langzeitgespeichert auf Platte oder."—  Präsentation transkript:

1 bs-61 6 Dateiverwaltung

2 bs-62 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)

3 bs-63 Spezielle Dateitypen z.B.  sequentiell  indexsequentiell  Programm  Bibliothek  Verzeichnis ..... haben gemeinsamen Obertyp Datei mit Dateiattributen (file attributes) wie Dateigröße, Schutzstatus etc.

4 bs-64 Modell: DateiverzeichnisDateien fileCatalog: Map Attribute eigentliche Daten

5 bs Schnittstelle des Dateisystems ist Teil der Systemschnittstelle für Benutzerprozesse, vgl. 2.5 2.5

6 bs 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

7 bs 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 (  ) (d.h. erzeugt Dateiobjekt und Eintrag im Dateiverzeichnis). (Wenn Datei bereits vorhanden, Löschen des Dateiinhalts.) delete(name) gibt es nicht – sondern: Unix

8 bs-68 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 nicht in Benutzung ist). Fehler, wenn name im Verzeichnis nicht vorkommt link(name,alias)[link] generiert einen neuen Eintrag mit dem Namen alias für die bereits unter dem Namen name erreichbare Datei. Fehler, wenn name im Verzeichnis nicht vorkommt oder alias bereits im Verzeichnis vorkommt

9 bs-69 file = lookup(name) liefert Verweis auf die Datei name. Fehler, wenn name im Verzeichnis nicht vorkommt Achtung: diese Operation steht dem Benutzer nicht zur Verfügung; sie wird nur innerhalb des Betriebssystems benutzt. update(name,file) ist nicht vorgesehen.

10 bs 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;.....

11 bs-611 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  ) 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 Fall size auf 0, Zeiten auf aktuelle Zeit.

12 bs-612 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 !

13 bs Sequentielle Dateien Modell: endliche Folge von Bytes Operationen:keine (an der Systemschnittstelle) – ausschließlich indirekter Zugriff über Kanal (2.3  ) (Unix: „open file description“),2.3 der als externer Iterator („Lese/Schreibfenster“) auf der Datei realisiert ist. In Pseudocode:

14 bs-614 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); }...}

15 pos (Benutzerprozess) (Betriebssystem) Kanalnummern Kanallisten Iteratoren Dateien Verzeichnis Prozess p Prozess q file descriptor open file list* file table Unix-Terminologie

16 bs-616 Benutzung sequentieller Dateien in Unix: fd = open(name,flags) (vgl. 2.5  )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 der Kanalliste eingetragen; deren Index wird als Ergebnis geliefert.

17 bs-617 close(channel) macht die Kanalnummer channel ungültig. Falls dies die letzte gültige Nummer (auch von anderen Prozessen) für den dahinterstehenden Iterator war, wird dieser gelöscht. Falls in diesem Fall auch im Verzeichnis kein Eintrag für die Datei mehr vorliegt, wird die Datei gelöscht. fstat(channel,&buffer) wie stat(name,&buffer)

18 bs-618 Operationen des Iterators: read(channel,buffer,n) (vgl. 2.3  )2.3 liest maximal n Bytes, beginnend bei der aktuellen Position, versetzt die aktuelle Position um n und 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!

19 bs-619 write(channel,buffer,n) (vgl. 2.3  )2.3 schreibt n Bytes, beginnend bei der aktuellen Position, und versetzt die aktuelle Position um n Fehler, 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 !!

20 bs-620 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ß

21 bs-621 Posix Standard:advisory locking mittels fcntl() Unix System V:mandatory locking über den Schutzstatus ( chmod() ) Solaris:ebenso Linux:sowohl als auch; mandatory locking kann für ein ganzes Dateisystem an- und ab- geschaltet werden.

22 bs-622 lseek(channel,offset,whence) (vgl. 2.5  )2.5 setzt die Lese/Schreibposition in dem über channel erreichbaren Iterator. Damit ist zusätzlich zum Standardzugriff – sequentiell – auch ein Direktzugriff möglich. Manche Systeme unterscheiden zwischen sequentiellen Dateien und Direktzugriffsdateien.

23 bs 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.

24 bs Programmdateien  Einerseits: Übersetzer/Binder erzeugt ein ausführbares Programm, indem er dessen Code + Daten + Verwaltungsinformation in 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“ ?

25 bs-625  Vererbungshierarchie: Datei link... sequentiellindexsequentiell read... Programmdatei exec... Typischerweise weniger systematisch: „Typ Programmdatei“ wird durch speziellen Inhalt kenntlich gemacht, z.B. durch Beginn mit magic number

26 bs-626 Programmdatei enthält also  magic number  Beschreibung der Segmentstruktur  Code (Unix: „text“) + Konstanten  „statisch initialisierte“ Variable (Unix: „data“)  Startadresse


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

Ähnliche Präsentationen


Google-Anzeigen