27.12.2012 Aufrufe

Vnode Schnittstelle - Frank Kardel

Vnode Schnittstelle - Frank Kardel

Vnode Schnittstelle - Frank Kardel

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

BackStage<br />

Diese Art der Auftragsbearbeitung ist allerdings mit dem Problem der verwaisten Aufrufe<br />

behaftet. Eine Transaktion kann nicht terminieren, bevor nicht alle ihre<br />

Untertransaktionen terminiert sind. Es kann vorkommen, daß die Kommunikation<br />

zwischen den Knoten längerfristig gestört ist, oder ein Knoten ganz außer Betrieb geht<br />

(Geräteausfall oder Verkauf). In diesem Falle würden Transaktionen übrigbleiben, die<br />

ohne weitere Maßnahmen bestehen bleiben. Um solche Transaktionen auch im verteilten<br />

Fall unter Kontrolle zu halten, erhält jede Transaktion eine Lebensdauer. Nach Ablauf<br />

der Lebensdauer wird die Transaktion mit abort() abgebrochen. Damit sterben verwaiste<br />

Transaktionen automatisch ohne (größere) Seiteneffekte aus [Nel81]. Hierbei ist<br />

zu bemerken, daß die Transaktionen nur als zuverlässiger Fernaufruf genutzt werden.<br />

Im allgemeinen gibt es kein gemeinsames commit oder abort. Jede Transaktion muß ihre<br />

voneinander unabhängigen Untertransaktionen selber überwachen. Werden die Untertransaktionen<br />

nicht mehr betreut, so beenden sie sich aufgrund der zeitlichen Lebensdauerbegrenzung<br />

selbst. Ist ein gemeinsames commit oder abort gewünscht, so<br />

muß dieses innerhalb der Transaktion programmiert werden. Bis jetzt erscheint es<br />

noch nicht notwendig, diese starke Forderung als Basismechanismus zu realisieren.<br />

Ein gemeinsames commit und abort wäre in diesem Falle nur schwer handhabbar, wenn<br />

man die korrekte Exterminierung aufrechterhalten möchte[GR93]. Weil die Ergebnisse<br />

einer Untertransaktion zuverlässig an die übergeordnete Transaktion übertragen werden<br />

müssen, kommt es hier in der Ergebnisübermittlungsphase grundsätzlich zu Exterminierungsproblemen.<br />

Solange eine begonnene Ergebnisübermittlung nicht korrekt<br />

bestätigt ist, kann die Transaktion nicht mehr automatisch terminiert werden,<br />

wenn eine commit-Entscheidung dieser Transaktion vorliegt. Diese kritische Phase des<br />

Kommunikationsprotokolls sollte so kurz wie möglich gehalten werden.<br />

3.3.1 Transaktionsimplementierung<br />

Wegen der geringen Verfügbarkeit von portierbaren Transaktionsbibliotheken für C/<br />

Unix wurde ein eigener Ansatz zur Realisierung der Transaktionssemantik in Verbindung<br />

mit dem Fernaufruf gewählt. Um eine weite Verbreitung (heterogene Systeme)<br />

zu erreichen, wurde C/Unix als Entwicklungsumgebung gewählt. Als sichere, atomare<br />

Systemaufrufe mit dauerhaftem Effekt gelten die Systemaufrufe creat(), link() und rename().<br />

Auf der Basis dieser Systemaufrufe lassen sich Daten stabil speichern. Weiterhin muß<br />

gewährleistet werden, daß alle geschriebenen Daten auch auf dem eigentlichen, nicht<br />

flüchtigen Datenträger hinterlegt sind. Ein Systemzusammenbruch kann somit toleriert<br />

werden. Bei BSD-Systemen bietet sich der fsync()-Systemaufruf an. Er gewährleistet,<br />

daß alle Daten der Datei auf dem Datenträger hinterlegt sind. Bei System V Varianten<br />

der Unix Betriebssysteme bietet sich hier die open()-Operation mit der Option<br />

O_SYNC an.<br />

Als Fehlermodell kommen für die Implementierung Betriebsmittelknappheit, Programmierfehler<br />

und Bedienfehler in Betracht.<br />

29

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!