-
Die
Erfindung betrifft ein Verfahren zur Isolierung eines Speicherplatzes
mit einem veralteten „Datum" (bzw. Wert), wobei
dieses Verfahren für
jede Echtzeit- und/oder im System integrierte Anwendung anwendbar
ist, die mit einem Datenverwaltungssystem arbeitet, das einen gemeinsam
genutzten, sogenannten Transaktionsspeicher verwaltet, und die den Datenzugriff
durch Zeiger (bzw. Pointer) ermöglicht. Ein
solcher Speicher ist der Hauptspeicher eines Computers, in dem gleichzeitig
mehrere Prozesse ausgeführt
werden. Jeder Prozess besteht seinerseits im allgemeinen aus mehreren
elementaren Tasks, die miteinander im Hinblick auf den Zugriff auf Daten,
die gelesen und geändert
werden sollen, konkurrieren können.
Der Speicher ist in Elemente mit fester Größe strukturiert, die im folgenden
als Speicherplätze
bezeichnet werden.
-
In
einem Computer unterscheidet man den Hauptspeicher, der eine begrenzte
Kapazität
hat, in dem jedoch auf alle Plätze
direkt und somit sehr schnell zugegriffen werden kann, und einem
Massenspeicher, der im allgemeinen aus einer Festplatte besteht,
die eine viel höhere
Kapazität
besitzt, auf die jedoch viel weniger schnell zugegriffen werden
kann, weil eine Spur ausgewählt
und anschließend
darauf gewartet werden muss, dass der auf einer Spur gesuchte Platz
vor einem Lesekopf erscheint. Klassischerweise lädt das Betriebssystem eines
Computers nur die Daten in den Hauptspeicher, die in einem bestimmten
Moment tatsächlich
benötigt
werden, und der Ladevorgang erfolgt mit Hilfe eines schnellen und
spezialisierten kleinen Speichers, der Cache-Speicher genannt wird und der eine merkliche Beschleunigung
des Zugriffs auf die Festplatte durch einen Vorwegnahme-Mechanismus
bewirkt, welcher sich den Umstand zu Nutze macht, dass die Daten von
den Anwendungen im allgemeinen sequentiell genutzt werden. Die klassischen
Datenverwaltungssysteme sind daher unter Berücksichtigung des Umstandes
optimiert werden, dass die Daten einen Cache-Speicher durchlaufen.
-
Die
Fortschritte in der Technologie der Halbleiterspeicher ermöglichen
nun die Realisierung eines Hauptspeichers, der eine ausreichende
Kapazität
besitzt, um sämtliche
von allen in einem Computer ausgeführten Prozessen gemeinsam genutzten
Daten in den Hauptspeicher zu laden, und dies sogar für Anwendungen,
die große
Datenmengen handhaben. Der Festplatte kommt dann nur noch die Aufgabe
der Sicherung der Daten zu, indem sie eine aktualisierte Kopie aller
Daten aufbewahrt, die sich im Hauptspeicher befinden. Das Laden
aller Daten in den Hauptspeicher ist besonders vorteilhaft für Anwendungen, welche
die Daten nicht sequentiell auswerten, da ein Cache-Speicher für diese
Anwendungen nur geringe Vorteile bietet. Dies ist insbesondere bei
Anwendungen der Fall, welche Telekommunikations-Vermittlungsanlagen
steuern.
-
Bekannt
sind Datenverwaltungssysteme für objektorientierte
Datenbanken und Datenverwaltungssysteme für relationale Datenbanken.
-
Es
gibt zwei Arten des Zugriffs auf einen Datenwert: den Lesezugriff
oder den Schreibzugriff. Für jeden
Zugriffstyp sind zwei Arten des Informationstransfers zwischen dem
Datenverwaltungssystem und einer elementaren Task bekannt: ein Transfermodus
basierend auf dem Wert und ein Transfermodus basierend auf einem
Zeiger.
-
Für einen
Lesezugriff (beziehungsweise Schreibzugriff) auf den Wert einer
Variablen besteht der auf dem Wert basierende Transfermodus darin, dass
ein Wert der Variablen an dem Speicherplatz gelesen (bzw. geschrieben)
wird, der den aktuellen Wert der Variablen enthält; dagegen besteht der auf einem
Zeiger basierende Transfermodus darin, dass der Task, die den Lese-
bzw. Schreibvorgang angefordert hat, eine als Zeiger bezeichnete
Adresse geliefert wird, welche den Speicherplatz bezeichnet, an dem
sich der zu lesende Wert befindet (bzw. den Ort, an den ein Wert
geschrieben werden soll); dabei steht es der Task anschließend frei,
an diesem Ort die ganze Zeit über,
in der sie diesen Zeiger besitzt, zu lesen bzw. zu schreiben. Wenn
eine Task auf eine Variable im Zeiger-Modus zugreift, ist bekannt,
dass dem Speicherplatz, der den aktuellen Wert dieser Variablen
enthält,
für diese
Task eine als "Hold" bezeichnete Sperrung
zugewiesen wird. Dieser Hold verbietet jeder anderen Task den Zugriff auf
diesen Platz, um die Konsistenz der von jeder einzelnen Task gesehenen
Daten zu wahren. Die Task, die einen Hold für einen Speicherplatz besitzt,
der einen Wert einer Variablen enthält, kann auf diesen Platz so oft
zugreifen, wie sie wünscht,
und zwar so lange, bis sie beschließt, diesen Hold freizugeben.
-
Der
auf einem Pointer basierende Transfermodus ist in objektorientierten
Datenverwaltungssystemen bekannt. Er hat den Vorteil, schnelle Zugriffe zu
ermöglichten.
Er gestattet es, einen Datenwert wie eine Variable einer Programmiersprache
zu manipulieren. Objektorientierte Datenverwaltungssysteme haben
jedoch folgenden Nachteil: Entweder bieten sie keine Multitasking-Transaktionen
(folglich gibt es keine konkurrierenden Tasks), oder sie bieten
keine auf ein Objekt bezogene Sperrung (jeder konkurrierende Zugriff
führt zur
Sperrung einer Seite und somit dazu, dass diese Seite vollständig in
ein Protokoll kopiert wird. Dieser Grad von Granularität führt somit
zu Mehrkosten).
-
Der
auf dem Wert basierende Transfermodus kann eingesetzt werden, ohne
konkurrierende Zugriffe auf der Ebene der Anwendungen zu verwalten.
Konkurrierende Zugriffe werden vor allem mit Hilfe von Schreib-
oder Lesesperren verwaltet, die vom Datenverwaltungssystem der Datenbank
zugewiesen werden.
-
Eine
Gruppe von Lese- und/oder Schreibvorgängen, die sich auf mehrere
Variablen beziehen, die von einer Task bei derselben Abfrage angefordert werden,
wird als Transaktion bezeichnet. Bei einer Transaktion kann jeder
Vorgang entweder mit dem auf dem Wert basierenden Transfermodus
oder mit dem auf einem Zeiger basierenden Transfermodus ausgeführt werden.
Jede Transaktion unterteilt sich in drei Phasen:
- – Eine Eröffnungsphase,
während
der das Datenverwaltungssystem der Task, welche die Transaktion
eröffnet
hat, eine einmalige Transaktionskennung liefert, wobei diese Kennung
einen Speicherplatz bezeichnet, der einen Deskriptor der Transaktion
enthält;
- – Eine
Zugriffsphase, während
der Lese- oder Schreibvorgänge
von der Task, welche die Transaktion eröffnet hat, ausgeführt werden,
die jedoch für
die anderen Benutzer, die nicht von dieser Transaktion betroffen
sind, unsichtbar bleiben; und während
der dieser Transaktion für
den betreffenden Speicherplatz als Lesesperren und Schreibsperren
bezeichnete Rechte zugewiesen werden. Nach einem der bekannten Zugriffsverfahren
schreibt eine Transaktion, wenn sie einen Schreibzugriff ausführt, den
neuen Wert der Variablen provisorisch an den als Zwischenspeicher („Journal") bezeichneten Speicherort,
der dieser Transaktion für
diese Variable zugewiesen wurde. Auf diesen Zwischenspeicher kann
nur von dieser Transaktion zugegriffen werden.
- – Eine
Abschluss- oder Bestätigungsphase,
während
der die Schreib- und Lesevorgänge
bestätigt werden.
Nach dem oben dargestellten bekannten Verfahren werden die neuen
Werte (die in den dieser Transaktion zugewiesenen Zwischenspeicherplätzen enthalten
sind), an die Orte geschrieben, die die jeweiligen aktuellen Werte
enthalten, und sie werden für
alle Tasks sichtbar. Die zu lesenden Werte werden tatsächlich gelesen.
Die dieser Transaktion zugewiesenen Zwischenspeicher, Sperren und
Holds werden freigegeben.
-
Es
kann jedoch vorkommen, dass eine Transaktion abgebrochen wird, entweder
auf Anforderung der Task, die die Eröffnung dieser Transaktion angefordert
hat, oder aufgrund eines Konflikts mit einer anderen Transaktion
oder aufgrund einer Inkohärenz
einer Abfrage, die diese Transaktion bildet.
-
Dem
Speicherplatz, der den aktuellen Wert oder den neuen Wert einer
Variablen enthält,
welche Gegenstand einer Transaktion ist, kann eine Sperre zugewiesen
werden, um andere Vorgänge
zu unterbinden, welche die Konsistenz der Daten beeinträchtigen
würden.
Eine Sperre kann einer gesamten Datentabelle zugewiesen werden.
-
Bestimmte
Transaktionsprotokolle bieten die Möglichkeit, eine Transaktion
unter Gewährleistung von
vier als "ACID" bezeichneten Eigenschaften durchzuführen:
-
- – Atomizität („atomicité") (entweder werden
sämtliche
von einer Transaktion angeforderten Zugriffe bearbeitet oder keiner);
- – Konsistenz
(„consistance") (sämtliche
Daten gehen von einem stabilen Zustand in einen anderen stabilen
Zustand über);
- – Isolation
(„isolation") (die neuen Werte
der Variablen sind außerhalb
der Transaktion nicht sichtbar, bevor diese abgeschlossen ist);
- – Dauerhaftigkeit
(„durabilité") (sobald eine Transaktion
bestätigt
ist, bleiben die neuen Werte auch bei Ausfällen des Arbeitsplatzes, auf
dem sie gespeichert sind, erhalten; diese Werte werden auf einer
Festplatte oder auf einem anderen betriebsfähigen Arbeitsplatz gesichert);
- – Serialisierung
(wenn mehrere Transaktionen parallel ablaufen, ist ihr Ergebnis
dasselbe, wie wenn sie nacheinander ablaufen würden).
-
Die
Patentanmeldung FR 2 727 222 beschreibt ein solches Transaktionsprotokoll.
Die bekannten Datenverwaltungssysteme gewährleisten die ACID-Eigenschaften, sie
haben jedoch den Nachteil, keinen auf einem Zeiger basierenden Zugriff
zu bieten, der einen schnelleren Zugriff ermöglichen würde. Sie sind daher nicht vollkommen
zufriedenstellend.
-
Im
Rahmen eines Systems, bei dem sämtliche
Daten in einen Halbleiter-Hauptspeicher
geladen werden, ist es möglich,
auf Zeigern basierende Zugriffe in einer Transaktion oder außerhalb
einer Transaktion durchzuführen,
doch die Verwendung von Zeigern und somit auch von Holds bringt
einen Nachteil mit sich: Wenn die erste Transaktion abgebrochen
wird, kann die Zuweisung eines Holds zu einem Speicherplatz erhalten
bleiben, obwohl der an diesem Platz enthaltene Wert veraltet ist.
Dieser Wert ist veraltet, weil dieser Ort der Zwischenspeicher ist, der
den aktuellen Wert einer Variablen enthält, oder den neuen Wert, den
diese erste Transaktion dieser Variablen geben wollte.
-
Dieser
Hold verbietet weiterhin den Zugriff auf diesen Platz und verbietet
somit weiterhin den Zugriff auf diese Variable, weil dieser Speicherplatz dieser
Variablen zugewiesen bleibt, um ihren aktuellen Wert bzw. ihren
neuen Wert zu speichern. Auf diese Variable kann folglich unnötigerweise
weiterhin so lange nicht zugegriffen werden, bis die Anwendung, die
diesen Hold besitzt, beschließt,
ihn freizugeben. Während
dieser Zeit versuchen eine oder mehrere andere Transaktionen vielleicht,
auf diese Variable zuzugreifen. Dieser nutzlose Versuch belastet
die gesamten Leistungen des Systems.
-
Ziel
der Erfindung ist es, für
diesen Nachteil Abhilfe zu schaffen. Gegenstand der Erfindung ist
ein Verfahren zur Isolierung eines Speicherplatzes, der einen veralteten
Wert einer Variablen enthält,
im gemeinsam genutzten Speicher eines Computers, wobei auf diesen
Platz durch einen Zeiger für
einen Zugriff im Rahmen einer ersten Transaktion verwiesen wird,
wobei eine als Hold bezeichnete Sperre auf diesen Platz gesetzt
ist und einer einzigen Task zugewiesen ist, und wobei dieser Hold
den Zugriff auf diesen Speicherplatz für alle anderen Tasks untersagt; dadurch
gekennzeichnet, dass
- – wenn diese erste Transaktion
eine abgebrochene Transaktion ist und:
- – wenn
der veraltete Wert ein neuer Wert dieser Variablen ist, besteht
das Verfahren darin, im Deskriptor dieser Variablen die Identität der abgebrochenen
Transaktion und die Adresse dieses Speicherplatzes zu löschen und
diese Adresse in den Deskriptor der genannten Transaktion zu schreiben;
anschließend
diesen Hold freizugeben;
- – wenn
der veraltete Wert zuvor der aktuelle Wert der Variablen war, besteht
das Verfahren darin, im Deskriptor dieser Variablen die Identität der abgebrochenen
Transaktion und die Adresse dieses Speicherplatzes zu löschen und
sie in den Deskriptor der genannten Transaktion zu schreiben; anschließend den
dem Zeiger zugewiesenen Hold freizugeben; anschließend dem
aktuellen Wert einen freien Speicherplatz zuzuweisen, diesen aktuellen
Wert an diesen Speicherplatz zu schreiben und die Adresse dieses
Speicherplatzes in den Deskriptor dieser Variablen zu schreiben;
- – wenn
diese erste Transaktion eine Transaktion ist, die aufgrund einer
zweiten Transaktion abgebrochen wurde, die den Zugriff auf diese
Variable anfordert, um einen neuen Wert zu schreiben, und die diesen
Zugriff bestätigt,
und wenn der veraltete Wert zuvor der aktuelle Wert der Variablen
war, besteht das Verfahren darin, die Adresse der Speicherplätze, die
den veralteten aktuellen Wert (Vcou) und den neuen Wert enthalten,
im Deskriptor dieser Variablen auszutauschen; und es besteht darin,
einen Hold auf den Speicherplatz zu setzen, der den veralteten Wert
enthält,
um eine Änderung
des veralteten Wertes zu verhindern; die Identität der zweiten Transaktion zu
löschen; anschließend den
Hold freizugeben, der dem Zeiger für diesen neuen Wert zugewiesen
wurde, sofern einer vorhanden war.
-
Das
auf diese Weise gekennzeichnete Verfahren macht den Speicherplatz,
der den veralteten Wert enthält,
nicht frei, isoliert ihn aber gegenüber anderen Transaktionen als
derjenigen, die den ersten Zeiger besitzt. Dies ermöglicht der
Task, die Eigentümerin
des ersten Zeigers ist, weiterhin auf diese veraltete Variable zuzugreifen.
Dagegen können
beliebige Transaktionen auf einen anderen Wert der Variablen zugreifen,
ohne zu warten, weil der Deskriptor dieser Variablen diese Transaktionen
auf einen Speicherplatz verweist, auf den ein freier Zugriff möglich ist
und der diesen anderen Wert enthält.
-
Anhand
der nachfolgenden Beschreibung eines Ausführungsbeispiels und der dazugehörigen Zeichnungen
wird die Erfindung besser verständlich, und
weitere Merkmale werden ersichtlich werden: Die 1 bis 3 stellen
jeweils einen der drei Fälle dar,
die auftreten können.
-
Gemäß der Erfindung
weist ein Datenverwaltungssystem jeder Variablen einen Variablendeskriptor
zu, der die folgenden Informationen enthält, die von diesem Datenverwaltungssystem
ausgewertet werden:
- – Die Identität TR der
Transaktion, die einen Schreibzugriff auf diese Variable angefordert
hat, wenn diese Zugriffsanforderung im Rahmen einer Transaktion
erfolgt.
- – Die
Adresse ADvc eines Speicherplatzes, der den aktuellen Wert dieser
Variablen enthält.
- – Einen
Binärindikator
Hvc, der angibt, ob einem Zeiger, welcher auf den Platz verweist,
der den aktuellen Wert dieser Variable enthält, ein Hold zugewiesen wurde.
- – Die
Adresse ADvn eines Speicherplatzes, der den neuen Wert enthält, welcher
den aktuellen Wert dieser Variablen ersetzen soll.
- – Einen
Binärindikator
Hvn, der angibt, ob ein Hold für
den Platz des neuen Wertes dieser Variablen zugewiesen wurde.
-
Das
Datenverwaltungssystem weist jeder Transaktion einen Transaktionsdeskriptor
zu, der die folgenden Informationen enthält, die vom Datenverwaltungssystem
ausgewertet werden:
- – Die Identität IT dieser
Transaktion.
- – Die
Adressen ADV der Deskriptoren der Variablen, auf die ein Schreibzugriff
durch diese Transaktion erfolgt.
- – Die
Adressen AVO der Speicherplätze,
welche die jeweiligen veralteten Werte der Variablen enthalten,
auf die ein Schreibzugriff durch diese Transaktion erfolgt.
-
1 veranschaulicht die Anwendung
des Verfahrens gemäß der Erfindung
in einem Fall, in dem eine Transaktion T1 abgebrochen wurde und
wo ein dieser Transaktion T1 zugewiesener Zeiger auf den Speicherplatz
ADR1 eines Wertes Vnou verweist, welcher der neue Wert einer Variablen
V1 ist. Der Deskriptor DV1 der Variablen V1 enthält: die Identität T1 dieser
Transaktion, die Adresse ADR1 des Speicherplatzes, der diesen neuen
Wert enthält, die
Adresse ADR0 des (nicht dargestellten) Speicherplatzes, der den
aktuellen Wert dieser Variablen enthält, und einen Indikator Hvn
= 1, der angibt, dass dieser Transaktion T1 ein Hold zugewiesen
wurde. Dieser Hold verbietet es, den neuen Wert Vnou dieser Variablen
zu lesen oder zu verändern,
außer
für die
Transaktion T1, die diesen Hold besitzt.
-
Der
Wert Vnou ist veraltet, weil die Transaktion T1 abgebrochen wurde.
Das Datenverwaltungssystem löscht
im Deskriptor V1 diese Variable, die Identität T1 der abgebrochenen Transaktion
und die Adresse ADR1 dieses Speicherplatzes. Es schreibt diese Adresse
ADR1 in den Deskriptor T1 der genannten Transaktion. Anschließend gibt
es den Hold frei, indem es den Wert des Indikators Hvn im Deskriptor
DV1 der Variablen auf Null zurücksetzt.
So können
von nun an andere Benutzer auf diese Variable zugreifen und ihr
einen beliebigen neuen Wert geben, während die Transaktion T1 weiterhin
während der
Zeit, die sie benötigt,
um den Abbruch der Transaktion festzustellen, auf ihren neuen Wert
zugreifen kann.
-
2 veranschaulicht die Anwendung
des Verfahrens gemäß der Erfindung
in einem Fall, in dem eine Transaktion T1 abgebrochen wurde und
wo ein dieser Transaktion T1 zugewiesener Zeiger auf den Speicherplatz
ADR1 eines Wertes Vcou verweist, welcher der aktuelle Wert einer
Variablen V1 ist. Das Datenverwaltungssystem löscht im Deskriptor DV1 der
Variablen die Identität
T1 der abgebrochenen Transaktion und die Adresse ADR2 dieses Speicherplatzes.
Es schreibt diese Adresse ADR2 in den Deskriptor der Transaktion
T1; anschließend
gibt es den dem Zeiger zugewiesenen Hold frei, indem es den Wert
des Indikators Hvc im Deskriptor der Transaktion T1 auf Null zurücksetzt.
Anschließend
weist es dem aktuellen Wert einen freien Speicherplatz zu, indem
es der Adresse ADvc des Speicherplatzes, der den aktuellen Wert
dieser Variablen enthält,
im Deskritpor DV1 dieser Variablen einen Wert ADR3 gibt. So wird
der Zugriff auf den aktuellen Wert Vcou für alle Benutzer möglich, weil
sie frei auf die Adresse ADR3 zugreifen können, während die Transaktion T1 während der
Zeit, die sie für
die ausdrückliche
Zurücknahme
des Holds benötigt,
weil sie ihre Hold-Verarbeitung beendet hat oder weil sie bemerkt hat,
dass sie abgebrochen wurde, weiterhin auf den aktuellen Wert zugreifen
kann.
-
3 veranschaulicht die Anwendung
des Verfahrens gemäß der Erfindung
in einem Fall, in dem eine erste Transaktion T1 wegen einer zweiten Transaktion
T2 abgebrochen wurde, die den Zugriff auf die betreffende Variable
anfordert, um einen neuen Wert Vnou zu schreiben, und die diesen
Zugriff bestätigt.
Der aktuelle Wert Vcou der Variablen ist folglich veraltet. Das
Datenverwaltungssystem tauscht im Deskriptor DV1 dieser Variablen
die Adressen ADR0 und ADR1 der Speicherplätze aus, die den veralteten
aktuellen Wert Vcou und den neuen Wert Vnou enthalten; es setzt
einen Hold auf den Speicherplatz ADR0, der den aktuellen Wert Vcou enthält, indem
es dem Indikator Hvn im Deskriptor DV1 der Variablen den Wert Eins
gibt, um eine Änderung
des veralteten Wertes zu verhindern. Anschließend gibt es den Hold frei,
der dem Zeiger für
den Speicherplatz zugewiesen wurde, welcher den aktuellen Wert enthalten
sollte und der von nun an diesen neuen Wert Vnou enthält, indem
es dem Indikator Hvc den Wert Eins gibt. Andererseits löscht es
in diesem Deskriptor DV1 die Identität T2 der zweiten Transaktion.
Auf diese Weise können
alle Benutzer auf den neuen aktuellen Wert Vnou am Speicherplatz ADR1
zugreifen. Die Deskriptoren T1 und T2 der Transaktionen sind unverändert. Die
Verarbeitung des Abbruchs von T1 erfolgt analog zu jener, die unter
Bezugnahme auf 1 beschrieben
wurde.