RAMS-Metaobjekte
Schattenspeicher
Grundidee
Wenn sich eine Seite ändert, so wird sie nicht zurückgeschreiben, sondern auf
einen neuen Block geschrieben.
Das Umschalten von alten und neuen Block muß dann atomar passieren.
Die Verwaltung der Verwaltungsstruktur wird in einem hochverfügbaren Segment gemacht, die Daten selber werden in ganz normal in Blöcken in der Datei verwaltet.
Literatur
-
- K. Mayer-Wegner:"Aufbau von Datenverwaltungssystemen",Vorlesungsskriptum Uni Erlangen WS1991
- Loire 1977
- könnte der Erfinder sein
- TOSP
- Transaktion oriented Schattenspeicher Konzept
Algorithmen aus dem Vorlesungsscript
wichtige Begriffe:
- Schattenbit
- kennzeichnet einen Block als neu geschrieben
- Status
- Status ist 0 für geschlossen oder 1 für offen
Wird ein Segment als offen angetroffen, so muß das Recovery erfolgen
Öffnen eines Segmentes Si
- Kopiere Vi0 nach Vi1 auf der Platte
- Setze Status=1
- Schreibe Master auf Platte
- Für alle Seiten mit Schattenbit:
- Gebe alte Seite frei
- Lösche Schattenbit
(Vorlesungsscript sagt: Lösche alle Schattenbits in Vi0 - was passiert mit alter Seite ? )
- ggf. Erzeuge CM als Kopie von Mk (je nach Mapswitch)
Modifikation einer Seite j
- Seite Pij muß auf der Platte mit dem bisherigen Block ba=Vi0(j) stehen
- Finde neuen Block bn mit CM(bn)=0 (unbenutzter Block) und CM(bn):=1
- Vi0(j)=bn
- Schreibe Pij nach bn
- Setze Schattenbit in Vi0(j)
(Weitere Änderungen werden gleich in bn gemacht)
Sicherungspunkt
- Erzeuge Kopie von Mk
- Für alle Vi0(j)=bn mit gesetzten Schattenbit und Vi1(j)=b
- Setze M1(ba)=0
- Setze M1(bn)=1
- Schreibe Vi0 auf Platte
- Schreibe M1 auf Platte
- Status(i)=0;
- Mapswitch=1
- Sichere Master
- Zusicherung: Segment vollständig auf Platte
- für alle Vi0=bn mit gesetztem Schattenbit
- Setze CM(b):=0
- Lösche Schattenbit
- Kopiere Vi0 nach Vi1 auf der Platte
- Setze Status(i)=1
- Schreibe Master auf Platte
Zurücksetzen auf dem letzten Sicherheitspunkt bei laufendem System
- Für alle Vi0(j)=b mit gesetztem Schattenbit
- Setze CM(b):=0
- Setze Vi0(j):=Vi1(j)
Reperatur eines Segments nach Systemausfall
- Für alle Segmente Si mit Status(i)=1
- Kopiere Vi1 nach Vi0
- Setze STATUS(i)=0
- Schreibe Master auf Platte
Wichtige Bemerkungen
- Nur der Masterblock muß ein sicheres Segment sein
eigene Überlegungen zur Implementierung
Schutz mit mprotect und abfangen SEGV-Signal
Dieses wird mit dem PMSeg-Klasse realisiert.
Implementierung
Klasse ShadowSegment
Ideen:
Dimensionierung
BitMap: len=32 => 32*32bit=1024bit , for 4K Pages => 4 MB
Debugkonzept
Debuglevel
- 1
- Prozeduren und wichtige Schritte
- 2
- Anzeige wichtiger Datenstrukturen
- 3
- Operationsdetails
weitere Ideen
- Mehrere Segmente können in einer Datei verwaltet werden -> eventuell Fabrik-Muster: Fabrik verwaltet Resourcen
- Allokation neuer Seiten mit abgefangenen SIGSEGV
- Wie kann das mit dem RAMS::Growingmseg verbunden werden ?
Es sind ja auch Shadowsegmente fester größe dankbar, es wäre also mehrfache Vererbung oder so angebracht.
Andererseits könnte der Wunsch nach Wachstum über das SIGSEGV-Signal erkannt werden und dann über eine Strategieklasse gesteuert werden.
Informatik- und Netzwerkverein Ravensburg e.V Rudolf Weber