bs-61 6 dateiverwaltung. bs-62 datei (file) = abstraktes datenobjekt mit folgenden eigenschaften: ...
TRANSCRIPT
![Page 1: Bs-61 6 Dateiverwaltung. bs-62 Datei (file) = abstraktes Datenobjekt mit folgenden Eigenschaften: persistent ( = langzeitgespeichert auf Platte oder](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.pub/reader036/viewer/2022062411/570491c31a28ab14218d9baa/html5/thumbnails/26.jpg)
bs-6 26
Programmdatei enthält also
magic number
Beschreibung der Segmentstruktur
Code (Unix: „text“) + Konstanten
„statisch initialisierte“ Variable (Unix: „data“)
Startadresse