Das Konzept der geschachtelten dynamischen Aktionen für kooperative Anwendungen wird durch das kooperative Sperrverfahren realisiert. Genau wie dieses Konzept mit dem Ziel entwickelt wurde, die beiden Konzepte der geschachtelten dynamischen Aktionen und der dynamischen Aktionen für kooperative Anwendungen soweit wie möglich zu integrieren, sollen auch im kooperativen Sperrverfahren die zu diesen beiden Konzepten gehörenden Sperrverfahren - das flache kooperative und das geschachtelte Sperrverfahren - soweit wie möglich integriert werden. Dazu werden zuerst die beiden zugrundeliegenden Sperrverfahren verglichen und entstehende Probleme einer direkten Kombination herausgearbeitet. Anhand dieser Analyse werden die benötigten Eigenschaften des kooperativen Sperrverfahrens diskutiert und anschließend wird das kooperative Sperrverfahren anhand der Regeln zur Vergabe und Freigabe von Sperren vorgestellt.
Das flache kooperative Sperrverfahren (siehe Abschnitt 2.6.3) und das geschachtelte Sperrverfahren (Abschnitt 2.6.2) basieren beide auf der bekannten Schreib-Lese-Semantik. Das bedeutet, es gibt Schreib- und Lesesperren, wobei Schreibsperren mit anderen Sperren in Konflikt stehen und deshalb außer in den aufgeführten Ausnahmen nicht gleichzeitig mit anderen Sperren für dasselbe Objekt vergeben werden dürfen. Es gilt dabei die schon in Abbildung 2.3 gezeigte Kompatibilitätsmatrix. Schreibende oder lesende Objektzugriffe dürfen grundsätzlich nur durchgeführt werden, wenn die dynamische Aktion die entsprechende Sperre besitzt.
Obwohl beide Sperrverfahren grundsätzlich auf demselben Typ Sperren basieren, gibt es doch erhebliche Unterschiede zwischen ihnen:
Im flachen kooperativen Sperrverfahren gibt es eine Sperrenebene: Eine dynamische Aktion kann auf ein Objekt zugreifen, sofern sie die entsprechende Sperre hält.
Das geschachtelte Sperrverfahren hingegen enthält zwei Ebenen von Sperren. Nachdem eine dynamische Aktion eine Sperre für ein Objekt erworben hat, muß sie für dasselbe Objekt noch eine Benutzungssperre erwerben und darf dann auf das Objekt zugreifen. Die zweite Ebene der Benutzungssperren wurde eingeführt, da im geschachtelten Sperrverfahren Vor- und Nachfahren gleichzeitig zueinander in Konflikt stehende Sperren auf dasselbe Objekt bekommen dürfen, trotzdem aber sichergestellt werden soll, daß jeweils nur der letzte Nachfahre auf ein Objekt zugreifen kann. Dadurch ist für den Auftragnehmer gesichert, daß der Auftraggeber trotz gehaltener Sperre keine temporären Objektzustände sehen kann, sondern erst das Ergebnis bei Freigabe der Sperre durch den Auftragnehmer. Außerdem dienen die Benutzungssperren, die nicht gleichzeitig vergeben werden dürfen, wenn sie in Konflikt zueinander stehen, der Synchronisation von mehreren nebenläufigen Prozessen innerhalb einer dynamischen Aktion.
Die Sperren im geschachtelten Sperrverfahren werden nach dem nicht-strikten Zweiphasensperrprotokoll vergeben. Das bedeutet, daß eine dynamische Aktion eine Sperre in der ersten Phase einmal anfordern und anschließend in der zweiten Phase wieder freigeben darf. Die Zweiphasigkeit des Sperrverfahrens garantiert die Serialisierbarkeit von Toplevel-Aktionen und Brüdern, ohne daß eine dynamische Überprüfung durchgeführt werden muß. Außerdem verbirgt ein Auftraggeber die Ergebnisse seiner Auftragnehmer nach außen, indem er selbst Sperren für die Objekte hält, die die Auftragnehmer bearbeiten. Sperren von Sub-Aktionen werden bei ihrer Freigabe nicht sofort allgemein freigegeben, sondern an den nächsten Vorfahren vererbt, der sich noch in der ersten Phase befindet, um die Zweiphasigkeit von Aktionsbäumen und das Verbergen aller Objektänderungen des Auftragnehmers zu garantieren. Falls ein Auftragnehmer Objekte ändert, die der Auftraggeber nicht vorher gesperrt hat, würden ohne das Vererben der Sperren diese Änderungen ohne Kontrolle durch den Auftraggeber direkt allgemein sichtbar sein.
Das flache kooperative Sperrverfahren basiert auf dem Kriterium der dynamischen kooperativen Serialisierbarkeit. Hier wird die Serialisierbarkeit von dynamischen Aktionen aus unterschiedlichen Kooperationsgruppen zur Laufzeit dynamisch überprüft, indem Konfliktabhängigkeiten zwischen dynamischen Aktionen von der Aktionsverwaltung erkannt, gespeichert und überprüft werden. In den drei Phasen einer dynamischen Aktion wird die Menge der zugreifbaren Objekte so eingeschränkt, daß die bei Bildung der Kooperationsgruppe überprüfte und zugesicherte Serialisierbarkeit nicht mehr durch neu entstehende Abhängigkeiten verletzt werden kann. Sperren dienen in diesem Verfahren nicht der Durchsetzung von Serialisierbarkeit der dynamischen Aktionen, sondern verhindern die Sichtbarkeit von temporären Objektzuständen und vermeiden dadurch Nebenläufigkeitsanomalien. Sofern es aufgrund der Phase, in der sich die dynamische Aktion befindet, erlaubt ist, können dynamische Aktionen in diesem Sperrverfahren mehrfach Sperren auf dasselbe Objekt anfordern und freigeben.
Das kooperative Sperrverfahren basiert wie die zugrundeliegenden Sperrverfahren auch auf der Schreib-Lese-Semantik mit ensprechender Kompatibilitätsmatrix.
Das durch das kooperative Sperrverfahren umgesetzte Konzept der geschachtelten dynamischen Aktionen für kooperative Anwendungen hat als Konsistenzkriterium die dynamische kooperative Serialisierbarkeit. Dieses Konsistenzkriterium wird bereits im flachen kooperativen Sperrverfahren durchgesetzt, indem dynamische Aktionen drei Phasen durchlaufen, in denen die Menge der zugreifbaren Objekte, wie in Abbildung 2.4 dargestellt, entsprechend der Phase eingeschränkt wird, und indem bei den Phasenübergängen die Serialisierbarkeit dynamisch überprüft wird. Dieses Verfahren wird in das kooperative Sperrverfahren übernommen.
Die Betrachtung im vorherigen Abschnitt hat gezeigt, daß das Auftragsprinzip im geschachtelten Sperrverfahren dadurch realisiert wird, daß auch in Konflikt stehende Sperren gleichzeitig an Auftraggeber und -nehmer vergeben werden können. Ebenso wird durch die zusätzlichen Benutzungssperren eine Unterbrechung des Auftragnehmers durch den Auftraggeber verhindert. Die zwei Ebenen der Sperren werden auch in das kooperative Sperrverfahren übernommen. Da die Sperren aber nicht mehr zweiphasig vergeben werden, um so Serialisierbarkeit durchzusetzen, sondern zur Realisierung von Kooperation mehrfach angefordert und freigegeben werden können, werden sie kooperative Sperren genannt. Das kooperative Sperrverfahren hat also zwei verschiedene Arten von Sperren: kooperative Sperren und Benutzungssperren, wobei eine dynamische Aktion eine Benutzungssperre nur dann anfordern darf, wenn sie schon eine kooperative Sperre besitzt. Objektzugriffe sind nur erlaubt, wenn die dynamische Aktion sowohl eine kooperative als auch eine Benutzungssperre besitzt.
Im Gegensatz zum geschachtelten Sperrverfahren werden freigegebene Sperren von Subaktionen nicht vererbt, sondern allgemein freigegeben, sofern nicht ein Vorfahre diese Sperre ohnehin schon besitzt. Das Vererben hat im geschachtelten Sperrverfahren die Aufgabe, Zweiphasigkeit und das Verbergen von Auftragnehmern in jedem Fall zu garantieren. Beide Eigenschaften sind im kooperativen Sperrverfahren nicht mehr zwingend erforderlich.
Das Konzept der geschachtelten dynamischen Aktionen für kooperative Anwendungen enthält zur Steuerung der Sichtbarkeit von Objektänderungen und zur Vermeidung von Unterbrechungen den Mechanismus der Objektkontrolle. Die Objektkontrolle wird im kooperativen Sperrverfahren durch die kooperativen Sperren realisiert, wobei Anfordern und Freigeben von kooperativen Sperren dem Anfordern und Freigeben von Objektkontrollen entspricht. Wenn eine dynamische Aktion die Objektkontrolle über ein Objekt besitzt, bedeutet dies, daß nur sie selbst und ihre Nachfahren auf das Objekt zugreifen dürfen. Bei der Übertragung der Objektkontrolle in das kooperative Sperrverfahren muß beachtet werden, daß eine dynamische Aktion nur dann auf ein Objekt zugreifen darf, wenn sie die passende kooperative Sperre (und Benutzungssperre) für dieses Objekt hält. Die Beschränkung der Objektzugriffe bei der Objektkontrolle läßt sich also durch eine Beschränkung der gewährten kooperativen Sperren realisieren: Wenn eine dynamische Aktion eine kooperative Sperre auf ein Objekt hält, dürfen kooperative Sperren, die zu dieser in Konflikt stehen, nur an Nachfahren der haltenden dynamischen Aktion vergeben werden.
Der Mechanismus der Objektkontrolle wurde in Abschnitt 3.3.3 auf Kooperationsgruppen ausgedehnt, um Kooperation innerhalb von Kooperationsgruppen vor Unterbrechungen von außerhalb zu schützen. Zu diesem Zweck wurde die virtuelle Kooperationsgruppen-Aktion als Vater aller Toplevel-Aktionen dieser Kooperationsgruppe eingeführt. Die Kooperationsgruppen-Aktion kann die Objektkontrolle über ein Objekt besitzen. Dieses Vorgehen läßt sich auf die kooperativen Sperren, die die Objektkontrolle realisieren, übertragen, indem die Kooperationsgruppen-Aktion kooperative Sperren halten darf.
Da die Kooperationsgruppen-Aktion nicht real existiert, kann sie die gesperrten Objekte nicht wirklich bearbeiten und darf deshalb auch keine Benutzungssperren anfordern. Die Tatsache, daß die Kooperationsgruppen-Aktion nur virtuell ist, hat auch zur Folge, daß sie nicht selbst ihre kooperativen Sperren anfordern kann. Die kooperativen Sperren der Kooperationsgruppen-Aktionen können daher stellvertretend von den dynamischen Aktionen dieser Kooperationsgruppe angefordert werden. Dabei kann jede dynamische Aktion kooperative Sperren für die Kooperationsgruppe anfordern und muß sie auch selbst wieder freigeben. Die Kooperationsgruppen-Aktion hält eine kooperative Sperre auf ein Objekt, wenn mindestens eine dynamische Aktion stellvertretend für sie eine solche Sperre auf dieses Objekt hält.
Unabhängig davon, welche dynamische Aktion die kooperative Sperre für die Kooperationsgruppe anfordert, werden stets die normalen Regeln zur Vergabe von kooperativen Sperren bezüglich der Kooperationsgruppen-Aktion als Vater aller Toplevel-Aktionen angewandt.
Dabei wird von folgendem Anwendungsszenario ausgegangen: Zwei Autoren, modelliert durch die dynamischen Aktionen A1 und A2, erstellen gemeinsam einen englischen Text. Autor A1 ist in der Lage Englisch zu schreiben, während Autor A2 zwar Englisch lesen kann, seinen Text aber in Deutsch schreibt und einen Übersetzer, welcher durch die dynamische Aktion A2,1 modelliert wird, damit beauftragt, den Text ins Englische zu übersetzen. Der Text besteht aus Einleitung, Mittelteil und Schluß. Diese Teile werden durch die Objekte E, M und S repräsentiert. Die beiden Autoren haben sich die Texterstellung derart aufgeteilt, daß Autor A1 Einleitung und Schluß und Autor A2 den Mittelteil schreibt. Zur Abstimmung muß Autor A2 die Einleitung lesen können, bevor er den Mittelteil schreibt und Autor A2 benötigt wiederum den Mittelteil für den Schluß. Letztendlich wollen beide Autoren den gesamten Text lesen, bevor sie gemeinsam entscheiden, ob sie ihn freigeben.
In diesem Beispiel treten sowohl das Auftrags- als auch das Kooperationsprinzip auf: Die Einbeziehung des Übersetzers stellt eine Anwendung des Auftragsprinzips dar, wohingegen die gemeinsame Texterstellung und Entscheidung zur Freigabe durch beide Autoren dem Kooperationsprinzip entsprechen.
Die beiden Autoren bilden zu diesem Zweck eine Kooperationsgruppe K, der auch der Übersetzer als Auftragnehmer von Autor A2 angehört. Es ergibt sich also der in Abbildung 3.4 dargestellte Aufbau der dynamischen Aktionen.
Die Texterstellung läuft dann wie folgt beschrieben ab. In Abbildung 3.5 ist die Vergabe der Sperren an die dynamischen Aktionen zur Veranschaulichung graphisch dargestellt.
Autor A2 erwirbt eine kooperative Lesesperre und eine Lese-Benutzungssperre auf die Einleitung, um sie zu lesen. Er erwirbt außerdem eine kooperative Schreibsperre und eine Schreib-Benutzungsperre auf den Mittelteil M und schreibt ihn auf Deutsch. Nachdem Autor A2 die Einleitung gelesen hat, gibt er beide Lesesperren wieder frei. Über die Einleitung hat somit ein Informationsfluß von Autor A1 nach Autor A2 stattgefunden.
Dieser erwirbt darauf für die Zeit des Lesens die kooperative Lesesperre und die Lese-Benutzungssperre für den Mittelteil. Zum Schreiben des Schlusses erwirbt er kooperative Schreibsperre und Schreib-Benutzungssperre auf Objekt S. Typisch für das Kooperationsprinzip findet hier nun ein Informationsfluß von A2 nach A1 statt, wodurch diese beiden dynamischen Aktionen nicht mehr serialisierbar sind.
In diesem Beispiel findet die Bildung der Kooperationgruppe direkt zu Beginn statt, da davon ausgegangen wird, daß alle Partner inklusive des beauftragten Übersetzers bereits feststehen. Die Validierung kann hier zu einem beliebigen Zeitpunkt stattfinden, nachdem die kooperativen Sperren für die Kooperationsgruppe angefordert worden sind, da hierdurch für die dynamischen Aktionen der letzten Halter einer kooperativen Sperre garantiert innerhalb derselben Kooperationsgruppe liegt, wie es für Objektzugriffe nach der Validierung gefordert ist.
Dieses Beispiel zeigt neben der Realisierung von Kooperations- und Auftragsprinzip auch deutlich die Einsatzmöglichkeiten der Objektkontrolle, die durch die kooperativen Sperren realisiert ist: Beim Aufruf des Übersetzers wird mittels Objektkontrolle dessen Existenz durch den Auftraggeber vor anderen dynamischen Aktionen verborgen. Die Objektkontrolle auf Kooperationsgruppen-Ebene ermöglicht eine unterbrechungsfreie Kooperation zwischen den Partnern, indem dynamischen Aktionen außerhalb der Kooperationsgruppe der Zugriff auf die gesperrten Objekte verweigert wird.