DbjFileManager Paul Fruntzek Michael Stanek
Überblick Unterste Ebene im Schichtenmodell Schnittstelle zum BS (Low-Level) Aufgabenbereich: Persistente Speicherung von Daten Benutzung durch BufferManager, sonst keine weiteren Komponenten Übergabe von Blöcken
Schnittstellen Grundfunktionen: –CREATE –READ –WRITE –DROP Erweiterte Funktionen: –OPEN –CLOSE
Schnittstellenbeschreibung CREATE –Erzeugt neue Datei –Filename == SegmentID (!= 0) DROP –Löschen einer existierenden Datei –Datei darf nicht geöffnet sein
Instanzisolation Instanz B dropt Segment 33 Instanz A liest Segment 33 Filestreams leisten diese Isolation
Schnittstellenbeschreibung READ –Liest Block aus Datei aus (wahlfrei) –Immer nur ein Block WRITE –Wahlfreies Schreiben eines Blocks in Datei –Einfügen von Leerblöcken (falls nötig) Arbeiten mit Binärdaten
Datenstruktur Problem: –meistens mehrere Dateien gleichzeitig geöffnet pro Instanz –OPEN und CLOSE sind teuere File-Operationen –Isolation der unterschiedlichen Instanzen des FileManagers Lösung: –Verwaltung der geöffneten Dateien in Datenstruktur –Verwendung von FileStreams
Verwaltung Aufbau: struct Verwaltung { SegmentId segment; void *handle; DbjFileManager::FileMode mode; }; Liste = new DbjFileManager::Verwaltung[ListSize];
Verwaltung Liste ist Instanzvariable und auf 2000 Einträge begrenzt Interne Zusatzfunktionen –void ADD_Verwaltung –bool EXISTS_Verwaltung
Verwaltung OPEN –Öffnet vorhandene Datei –darf noch nicht lokal geöffnet sein (EXISTS_Verwaltung) –Eintrag ans Ende der Verwaltungsliste (ADD_Verwaltung)
CLOSE –Schließen der Datei –Austragen aus Verwaltungsliste Problem: –ständiges OPEN und CLOSE lässt Fragmente in Liste entstehen
Verwaltung Lösung: –Eintrag wird aus Liste entfernt –Letztes Element wird an diese Stelle geschrieben
?