DE69523015T2 - Transaktionsprotokoll und Vorrichtung zur Erzeugung dieses Protokolls - Google Patents
Transaktionsprotokoll und Vorrichtung zur Erzeugung dieses ProtokollsInfo
- Publication number
- DE69523015T2 DE69523015T2 DE69523015T DE69523015T DE69523015T2 DE 69523015 T2 DE69523015 T2 DE 69523015T2 DE 69523015 T DE69523015 T DE 69523015T DE 69523015 T DE69523015 T DE 69523015T DE 69523015 T2 DE69523015 T2 DE 69523015T2
- Authority
- DE
- Germany
- Prior art keywords
- transaction
- register
- write
- lock
- volatile memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000015654 memory Effects 0.000 claims abstract description 169
- 238000000034 method Methods 0.000 claims description 26
- 238000012546 transfer Methods 0.000 claims description 24
- 238000011084 recovery Methods 0.000 claims description 8
- 238000012986 modification Methods 0.000 abstract description 7
- 230000004048 modification Effects 0.000 abstract description 7
- 230000007717 exclusion Effects 0.000 abstract description 3
- 238000012360 testing method Methods 0.000 description 16
- 230000001934 delay Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 230000010365 information processing Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
- Communication Control (AREA)
Description
- Die Erfindung betrifft ein Protokoll zum Lesen und Schreiben von in einem flüchtigen Speicher und eventuelle auch in einem nichtflüchtigen Speicher gespeicherten Daten.
- Die Erfindung ist insbesondere auf ein Steuerungssystem für ein Telekommunikationsnetz anwendbar. Bei einem solchen System behandeln Anwendungen Variablen, die halbpermanent sind, d. h. deren Werte selten modifiziert werden. Die Lesevorgänge sind somit häufiger als die Schreibvorgänge. Außerdem müssen die Lesevorgänge in sehr kurzen Verzögerung ausgeführt werden. Es handelt sich insbesondere um das Lesen von Tabellen, die Variablen bezüglich der Teilnehmer enthalten.
- Eine Einheit für die Leseoperation und/oder Schreiboperationen, die Variablen betreffen, die von einer Anwendung in derselben Anfrage angefordert werden, wird Transaktion genannt. Wenn der Wert einer Variablen modifiziert werden soll, besteht ein herkömmliches Transaktionsprotokoll insbesondere darin, einer gegebenen Transaktion in einem gegebenen Register eine Schreibsperre zuzuweisen, die ein exklusives Recht ist, das dieser Transaktion und ihr allein gestattet, den in diesem Register gespeicherten Wert zu schreiben und zu lesen, solange diese Schreibsperre besteht. Die Lesetransaktionen müssen somit warten, wenn der Wert der Variablen, die sie lesen wollen, gerade durch eine weitere Transaktion modifiziert wird. Dieses Warten dauert bis zum Ende der Transaktion, die die Modifikation vornimmt. Die Schreiboperationen verringern somit ihre Leistung für die Leseoperationen.
- Bei einem System zur Verwaltung eines Telekommunikationsnetzes wird dieses Problem im Allgemeinen durch die Tatsache verschärft, dass der flüchtige Speicher mittels eines nichtflüchtigen Speichers unterstützt wird. Diese Daten werden einerseits für einen schnellen Zugriff in einem flüchtigen Halbleiterspeicher und andererseits in einem nichtflüchtigen Speicher gespeichert, der aber eine längere Zugriffszeit aufweist. Der flüchtige Speicher ist mit einem Prozessor verbunden. Dieser flüchtige Speicher und dieser Prozessor sind alle beide für Ausfälle anfällig und ein Ausfall des einen zieht einen Ausfall des anderen nach sich. Bei einem Ausfall sind alle in dem flüchtigen Speicher enthaltenen Daten verloren.
- Der nichtflüchtige Speicher besteht im Allgemeinen aus Speicherplatten, die mit einem Plattencontroller verbunden sind, der die Sicherheit der gespeicherten Daten sicherstellt. Auf ihn kann von jedem Programm, das auf dem Prozessor ausgeführt wird, über einen über einen Dienst für den Zugriff auf diesen nichtflüchtigen Speicher zugegriffen werden. Er ist deutlich weniger für Ausfälle anfällig als das Paar Prozessor/flüchtiger Speicher.
- Ein Ausfall des Paares Prozessorflüchtiger Speicher zieht keinen Ausfall des nichtflüchtigen Speichers nach sich. Außerdem ist der Dienst für den Zugriff auf den nichtflüchtigen Speicher verfügbar, so bald der Prozessor arbeitet. Dieser Dienst hat die folgenden Eigenschaften:
- - Die Lese- und Schreibanforderungen auf demselben Datum werden streng serialisiert;
- - jede Anfrage ist Gegenstand einer Antwort vom Dienst für den Zugriff auf den nichtflüchtigen Speicher, wenn diese Anfrage ausgeführt wurde;
- - der Dienst gewährleistet, dass im Falle eines Ausfalls des Prozessors die Anfrage entweder vollständig nicht ausgeführt oder vollständig ausgeführt wird.
- Die in den beiden Speichern gespeicherten Daten umfassen Werte einer Variablen, die gelesen oder geschrieben, werden können. Jeder Wert ist in einem logischen Register des flüchtigen Speichers und in einem logischen Register des nichtflüchtigen Speichers gespeichert. Es ist notwendig, zwischen den verschiedenen Variablen und für jede Variable die Kohärenz zwischen dem Wert, der sich im flüchtigen Speicher befindet, und demjenigen, der sich im nichtflüchtigen Speicher befindet, aufrechtzuerhalten.
- Wenn eine Anwendung ein Datum lesen muss, genügt es, es nur im flüchtigen Speicher zu lesen. Auf den nichtflüchtigen Speicher wird somit beim Lesen durch die Anwendungen nie zugegriffen.
- Wenn dagegen eine Anwendung ein Datum modifizieren will, ist es unerlässlich, sie im flüchtigen Speicher und im nichtflüchtigen Speicher zu modifizieren, um nach einem Ausfall den Inhalt des flüchtigen Speichers richtig wiederherstellen zu können. Es stellt sich dann ein Problem der Sequenzierung der beiden Schreiboperationen für den neuen Wert in Bezug auf eventuelle Leseoperationen für dieselbe Variable im flüchtigen Speicher, die beinahe zum selben Zeitpunkt von weiteren Anwendungen angefordert werden können.
- A priori erscheint es unerlässlich zu verbieten, dass eine Anwendung einen neuen Wert im flüchtigen Speicher lesen kann, bevor dieser tatsächlich zugleich in den flüchtigen Speicher und in den nichtflüchtigen Speicher geschrieben wurde. Wenn ein Ausfall direkt nach dem Schreiben eines heuen Wertes in den flüchtigen Speicher auftritt und bevor es ein Schreiben dieses neue Datum in den nichtflüchtigen Speicher gab, führt tatsächlich die Wiederherstellung des Inhaltes des flüchtigen Speichers zum erneuten Eintragen des alten Wertes in den flüchtigen Speicher. Wenn also ein Lesen im flüchtigen Speicher direkt nach dem Schreiben des neuen Wertes in diesen gestattet wird und ohne zu verifizieren, dass das Schreiben auch im nichtflüchtigen Speicher ausgeführt wurde, wird die lesende Anwendung nach einem Ausfall und einer Wiederherstellung einen Wert erfahren, der in Bezug auf den Inhalt des flüchtigen Speichers inkohärent ist.
- Um die Kohärenz der in diese beiden Speicher geschriebenen Daten aufrechtzuerhalten, scheint es somit notwendig, jede Anwendung warten zu lassen, die anfordert, den Wert einer Variablen zu lesen, die gerade von einer weiteren Anwendung modifiziert wird. Dieses Warten dauert jedoch lang, weil ein nichtflüchtiger Speicher im Allgemeinen aus Platten besteht und eine viel längere Zugriffszeit als diejenige der flüchtigen Speicher hat, die im Allgemeinen aus Halbleiterkippschaltungen bestehen. Dieses Warten ist bei Telekommunikationsanwendungen, wie der Verarbeitung von Anrufen, bei denen die Antwortverzögerung ein ausschlaggebendes Qualitätskriterium ist, nicht annehmbar.
- Die Transaktionsprotokolle, die früher bei Systemen zur Steuerung eines Telekommunikationsnetzes verwendet wurden, ließen dieses Warteproblem außer Acht. Dieses letztere musste also von jeder Anwendung behandelt werden, was so übermäßige Kosten für die Entwicklung und Bereitstellung jeder Anwendung nach sich zog.
- Das Problem der Aufrechterhaltung der Kohärenz einer Einheit aus Modifikation und/oder Lesevorgängen, die auf gemeinsamen Daten ausgeführt werden, wird auf dem Gebiet der Datenbasen angetroffen. Es wird durch einen Dienst gelöst, der Dienst für Transaktionen genannt wird.
- Die oben definierten Notwendigkeiten für Kohärenz können befriedigt werden, indem ein Dienst für atomar genannte Transaktionen angeboten wird. Wenn zwei Transaktionen gegeben sind, nennt man die Menge der Variablen, die auf die gleichzeitig von diesen beiden Transaktionen zugegriffen werden kann, kritische Variablen für dieses Paar von Transaktionen. Die Ausführung mehrerer Transaktionen wird atomar genannt, wenn:
- - für jedes Paar von Transaktionen ein Zugriff auf die kritischen Variablen für dieses Paar von Transaktionen durch eine dieser beiden Transaktionen vollständig vor einem Zugriff auf dieselben kritischen Variablen durch die andere Transaktion ausgeführt wird;
- - im Falle einer Konkurrenz von mehreren Transaktionen oder im Falle eines Ausfalls des Prozessors, oder auch wenn für jede Transaktion die Gesamtheit der Operationen, die diese Transaktion bilden, ausgeführt wird oder auch keine der Operationen ausgeführt wird.
- Jede Transaktion wird in drei Phasen zerlegt:
- - eine Eröffnungsphase;
- - eine Zugriffsphase, während der die Lese- oder Schreiboperationen angefordert werden und während der dieser Transaktion für jedes betroffene Register Rechte zugewiesen werden, die Lesesperren und Schreibsperren genannt werden;
- - eine Abschlussphase, während der die angeforderten Lesevorgänge und die Schreibvorgänge ausgeführt werden und die entsprechenden Sperren aufgehoben werden.
- Die Sperren gestatten, weitere Operationen zu verbieten, die die Kohärenz der Daten beeinträchtigen. Eine Lesesperre, die einer gegebenen Transaktion für ein gegebenes Register zugewiesen wird, ist ein dieser Transaktion zugewiesenes, nicht exklusives Recht, das diese Transaktion berechtigt, den in diesem Register gespeicherten Wert zu lesen. Seine wesentliche Funktion ist, die Zuweisung einer Schreibsperre für dasselbe Register an eine weitere Transaktion zu verbieten. Eine Schreibsperre, die einer gegebenen Transaktion für ein gegebenes Register zugewiesen wird, ist ein dieser Transaktion zugewiesenes, exklusives Recht, das diese Transaktion und sie allein berechtigt, einen Wert in dieses Register zu schreiben. Eine Lesesperre kann für ein Register nur unter der Bedingung zugewiesen werden, dass für dieses Register noch keine Schreibsperre zugewiesen ist. Eine Schreibsperre kann für ein Register nur zugewiesen werden, wenn für dieses Register noch keine Schreibsperre und keine Lesesperre zugewiesen ist.
- Das Erfordernis der Atomarität der Transaktionen kann die Leistung der Lesevorgänge bedeutend belasten. Tatsächlich ist bei dem vorher beschriebenen bekannten Transaktionsprotokoll der Ausschluss der Lesevorgänge schon vom Zugriff auf ein zu modifizierendes Datum durch eine Transaktion an und bis zum Ende dieses wirksam. Diese Ausschlusszeit kann lang sein und wird nicht durch das System zur Verwaltung der Datenbasis sondern durch den Benutzer festgelegt. Für bestimmte Datentypen, wie die Daten, die durch die Verarbeitung von Anrufen in einem Telekommunikationsnetz verwendet werden, ist eine solche Nichtverfügbarkeit beim Lesen unannehmbar.
- Die Druckschrift IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, Bd. 19, Nr. 10, Oktober 1993, New York US, S. 950-961, CABRERA ET AL, "Implementing Atomicity in Two Systems: Techniques, Tradeoffs, and Expérience." beschreibt ein Protokoll, dass Lesesperren, Schreibsperren und Sperren für die Schreibabsicht verwendet, um die Integrität der Daten unter Beibehaltung einer guten Schnelligkeit der Ausführung der Transaktionen aufrechtzuerhalten. Während eine Transaktion das Schreiben des neuen Wertes wenigstens einer in einem Register gespeicherten Variablen umfasst, besteht ein Lesezugriff für jede Variable darin:
- - dieser Transaktion für das Register eine Sperre, Lesesperre genannt, zuzuweisen, die die Durchführung eines Schreibens verbietet,
- - dann den Inhalt dieses Registers zu lesen.
- Ein Schreibzugriff besteht für jede Variable insbesondere darin:
- - dieser Transaktion für das Register eine Sperre, Sperre für die Schreibabsicht genannt, zuzuweisen, die in diesem Register für jede andere Transaktion als diese Transaktion ein Schreiben verbietet, aber ein Lesen zulässt;
- - mit dem Register ein Register, das Journal genannt wird, zu verbinden und dort den neuen Wert der Variablen zu speichern.
- Der Abschluss der Transaktion besteht im Wesentlichen darin:
- - jedes erste Register zu bestimmen, dem für die abzuschließende Transaktion eine Sperre für die Schreibabsicht zugewiesen wurde,
- - jede der abzuschließenden Transaktion zugewiesene Lesesperre aufzuheben;
- - dann für jedes Register, das für die abzuschließende Transaktion eine Sperre für die Schreibabsicht besitzt, zu prüfen, ob keine einer weiteren Transaktion für dieses Register zugewiesene Lesesperre weiterbesteht; und wenn während einer Dauer, die größer als eine festgelegte Grenze ist, wenigstens eine Lesesperre weiterbesteht, eine Fehlschlagprozedur für die abzuschließende Transaktion durchzuführen; und wenn nicht, diese Sperre für die Schreibabsicht in eine Schreibsperre umzuwandeln;
- - dann für jedes Register, das für die abzuschließende Transaktion eine Schreibsperre besitzt,
- -- den neuen Wert der Variablen vom Journal zum Register zu überführen;
- -- und für das Register die der abzuschließenden Transaktion zugewiesene Schreibsperre aufzuheben;
- - dann eine Nachricht "Transaktion als beendet angesehen" zu einer Anwendung zu senden, die den Abschluss der Transaktion angefordert hat.
- Die Fehlschlagprozedur für die abzuschließende Transaktion besteht für jedes Register, das eine Schreibsperre oder eine Sperre für die Schreibabsicht besitzt, darin:
- - den Inhalt jedes Journals zu löschen, das den durch die fehlgeschlagene Transaktion modifizierten Wert einer Variablen speichert;
- - dann die der fehlgeschlagenen Transaktion zugewiesenen Schreibsperren und die Sperren für die Schreibabsicht aufzuheben;
- - dann eine Nachricht "Transaktion fehlgeschlagen" zu der Anwendung zu senden, die den Abschluss der Transaktion angefordert hat.
- Das so gekennzeichnete Protokoll gestattet Zugriffe immer mit kurzen Verzögerungen, um im Speicher zu lesen, weil das Schreiben eines neuen Wertes in den Speicher nur bei Abschluss der Transaktion in der Zuweisung einer richtigen Schreibsperre besteht. Überdies ist die Zeit des Besitzes dieser Sperre auf die (kurze) Zeit des Kopierens des Journals in das Register begrenzt. So werden die Lesevorgänge durch die Schreibvorgänge nicht verlangsamt.
- Die vorliegende Erfindung betrifft Daten, die identisch in einem flüchtigen und in einem nichtflüchtigen Speicher gespeichert sind. Die Daten bleiben nach jedem vorübergehenden Ausfall des Prozessors und des flüchtigen Speichers verfügbar und kohärent. Genauer ist das Ziel der Erfindung zu definieren, welches die im nichtflüchtigen Speicher zu speichernden Daten sind und welches die im flüchtigen Speicher zu speichernden Daten sind; und das auszuführende Protokoll für den Zugriff auf diese Daten im Hinblick auf ein Lesen oder ein Schreiben oder für ein Wiederherstellen des Inhalts des flüchtigen Speichers nach einem Ausfall dieses oder des zugehörigen Prozessors zu definieren.
- Gegenstand der Erfindung ist ein Transaktionsprotokoll, das Daten betrifft, die identisch in einem nichtflüchtigen Speicher und in einem flüchtigen Speicher gespeichert sind, bei welchem während einer Transaktion, die ein Schreiben des neuen Wertes wenigstens einer in einem ersten Register des flüchtigen Speichers und in einem zweiten Register des nichtflüchtigen Speichers gespeicherten Variablen umfasst, ein Lesezugriff für jede Variable darin besteht:
- - dieser Transaktion für das erste Register eine Sperre, Lesesperre genannt, zuzuweisen, die die Durchführung eines Schreibens verbietet,
- - dann den Wert dieses Registers zu lesen;
- ein Schreibzugriff für jede Variable insbesondere darin besteht:
- - dieser Transaktion für das erste Register eine Sperre, Schreibsperre genannt, zuzuweisen, die im ersten Register für jede andere Transaktion als die abzuschließende Transaktion ein Schreiben verbietet, aber ein Lesen zulässt;
- - mit dem ersten Register ein Register, das erstes Journal genannt wird, zu verbinden und dort den neuen Wert der Variablen zu speichern.
- der Abschluss der Transaktion für jedes erste Register, dem für die abzuschließende Transaktion eine Sperre für die Schreibabsicht zugewiesen wurde, im Wesentlichen darin besteht:
- - das entsprechende zweite Register im nichtflüchtigen Speicher zu bestimmen;
- - diesem so bestimmten zweiten Register für die abzuschließende Transaktion eine Schreibsperre zuzuweisen, wobei diese Sperre jeder anderen Transaktion ein Lesen und ein Schreiben verbietet;
- - mit dem so bestimmten zweiten Register ein Register, das zweites Journal genannt wird, zu verbinden und dort den neuen Wert der Variablen zu speichern;
- das dadurch gekennzeichnet ist, dass der Abschluss der Transaktion dann darin besteht:
- - in eine Tabelle, Tabelle der Transaktionen genannt, die im nichtflüchtigen Speicher gespeichert ist, die Identität dieser Transaktion zu schreiben;
- - jede der abzuschließenden Transaktion zugewiesene Lesesperre aufzuheben;
- - dann für jedes erste Register, das für die abzuschließende Transaktion eine Sperre für die Schreibabsicht besitzt, zu prüfen, ob keine einer weiteren Transaktion für dieses Register zugewiesene Lesesperre weiterbesteht, und wenn während einer Dauer, die größer als eine festgelegte Grenze ist, wenigstens eine Lesesperre weiterbesteht, eine Fehlschlagprozedur für die abzuschließende Transaktion durchzuführen; und wenn nicht, diese Sperre für die Schreibabsicht in eine Schreibsperre umzuwandeln;
- - dann für jedes erste Register, das für die abzuschließende Transaktion eine Schreibsperre besitzt,
- -- den neuen Wert der Variablen vom Journal zum Register zu überführen;
- -- und für das erste Register (Rim), die der abzuschließenden Transaktion zugewiesene Schreibsperre aufzuheben;
- - dann eine Nachricht "Transaktion als beendet angesehen" zu einer Anwendung zu senden, die den Abschluss der Transaktion angefordert hat;
- - dann in die Tabelle einen Indikator einzutragen, der der Identität der Transaktion zugewiesen wird und angibt, das diese als beendet angesehen wird;
- - dann für jedes zweite Register, das für die abzuschließende Transaktion eine Schreibsperre besitzt,
- -- den neuen Wert der Variablen vom zweiten Journal zum zweiten Register zu überführen;
- -- dann für das erste Register die dieser Transaktion zugewiesene Schreibsperre aufzuheben;
- - und schließlich die Identität der Transaktion in der Tabelle zu löschen;
- dadurch, dass die Fehlschlagprozedur für die abzuschließende Transaktion für jedes erste Register darin besteht:
- - den Inhalt jedes ersten Journals zu löschen, das den durch die fehlgeschlagene Transaktion modifizierten Wert einer Variablen speichert;
- - dann für dieses erste Register die der fehlgeschlagenen Transaktion zugewiesenen Sperren für die Schreibabsicht und die Schreibsperren aufzuheben;
- - die Identität der fehlgeschlagenen Transaktion in der Tabelle zu löschen;
- - dann eine Nachricht "Transaktion fehlgeschlagen" zu der Anwendung zu senden, die den Abschluss der Transaktion angefordert hat;
- - dann den Inhalt jedes zweiten Journals zu löschen, das den durch die fehlgeschlagene Transaktion modifizierten Wert einer Variablen speichert;
- - dann für zweite Register die der fehlgeschlagenen Transaktion zugewiesenen Schreibsperren aufzuheben;
- und dadurch, dass sie zur Wiederherstellung des Inhalts des flüchtigen Speichers nach einem Ausfall dieses insbesondere darin besteht:
- - für jedes zweite Register des nichtflüchtigen Speichers zu prüfen, ob eine Schreibsperre auf diesem Register weiterbesteht, und
- -- wenn keine Schreibsperre weiterbesteht, dem ersten Register, das dem betrachteten zweiten Register entspricht, eine Schreibsperre zuzuweisen, dann den Inhalt dieses zweiten Registers in dieses erste Register zu überführen und diese Schreibsperre aufzuheben;
- -- wenn eine Schreibsperre weiterbesteht, zu bestimmen, ob diese Schreibsperre zu einer Transaktion gehört, deren Identität sich in der Tabelle der Transaktionen befindet; und
- --- wenn ja, den Inhalt des zweiten Journals in das zweite Register zu überführen, dann die Schreibsperre aufzuheben, dann dem ersten Register, das dem betrachteten zweiten Register entspricht, eine Schreibsperre zuzuweisen, dann den Inhalt dieses zweiten Registers in dieses erste Register zu überführen und diese letztere Schreibsperre aufzuheben;
- --- wenn nicht, den Inhalt des zweiten Journals zu löschen, dann die Schreibsperre aufzuheben;
- - schließlich alle in der Tabelle vorhandenen Transaktionsidentitäten zu löschen.
- Das so gekennzeichnete Protokoll gestattet für das Lesen im flüchtigen Speicher Zugriffe praktisch immer mit kurzen Verzögerungen, weil das Schreiben eines neuen Wertes in den nichtflüchtigen Speicher darin besteht, dem zweiten Register eine Schreibsperre zuzuweisen, aber nicht darin besteht, gleichzeitig dem ersten Register eine Schreibsperre zuzuweisen. Es ist nur eine Sperre für die Schreibabsicht, die dem ersten Register zugewiesen wird. Diese Sperre für die Schreibabsicht wird zum Zeitpunkt des Abschlusses der Transaktion in eine Schreibsperre umgewandelt. Diese Schreibsperre wird nur während der Zeit aufrechterhalten, die für die Überführung des Inhalts vom Journal in das Register des flüchtigen Speichers nötig ist. Diese Zeit ist kurz.
- Im Gegensatz zu einer herkömmlichen Schreibsperre verbietet eine Sperre für die Schreibabsicht nicht ein Lesen im ersten Register. Dieses Lesen gestattet nur, den alten Wert der Variablen zu erhalten, aber es hat den Vorzug, ohne Verzögerung die Anwendungen, die ein Lesen anfordern, zufriedenzustellen. Die Anwendungen, die ein Lesen anfordern, werden während der Dauer, die für die Aktualisierung des ersten Registers im flüchtigen Speicher notwendig ist, sehr kurz warten gelassen. Die Zeit für einen Zugriff auf diesen flüchtigen Speicher bleibt somit trotz der Aktualisierungen sehr kurz.
- Vom Standpunkt der Anwendungen wird die Transaktion, die die Aktualisierung einer Variablen zum Gegenstand hat, als beendet angesehen, sobald der flüchtige Speicher aktualisiert ist. Der nichtflüchtige Speicher wird danach aktualisiert, wobei man sich die Zeit nimmt, die zum Zugreifen auf diesen Speicher nötig ist, ohne dass die Anwendungen daran gehindert werden, auf den neuen Wert der Variablen im flüchtigen Speicher zuzugreifen.
- Es tritt ein Kohärenzproblem auf, wenn ein Ausfall des flüchtigen Speichers eintritt, bevor der nichtflüchtige Speicher aktualisiert wurde. Dieses Kohärenzproblem tritt bei einem Lesen durch eine Anwendung nicht auf, da ja die Anwendung nie direkt im nichtflüchtigen Speicher liest. Es tritt dagegen aber nach der Wiederherstellung des nichtflüchtigen Speichers auf, wenn keine Vorsichtsmaßnahmen für das Wiederherstellen des Inhalts des flüchtigen Speichers ausgehend vom Inhalt des nichtflüchtigen Speichers getroffen wurden.
- Das Vorhandensein der Identität einer Transaktion in der Tabelle der Transaktionen gemäß der Erfindung hat bei einer Wiederherstellung des Inhalts des flüchtigen Speichers die Auswirkung, momentan eine Wiederherstellung zu verbieten, solange die Aktualisierung des nichtflüchtigen Speichers nicht vollständig durchgeführt ist, d. h. wenn wenigstens ein neuer Wert in ein zweites Journal eingetragen ist und vor dem Zeitpunkt des Ausfalls nicht in das zu diesem zweiten Journal gehörige zweite Register überführt wurde. Die Tabelle der Transaktionen gestattet somit, eine richtige Entscheidung hinsichtlich des Inhalts der zu den zweiten Registern gehörigen zweiten Journale zu treffen.
- Der Inhalt eines zweiten Journals wird in ein zweites Register überführt, das mit ihm verbunden ist, wenn und nur wenn die Identität der Transaktion, die einen neuen Wert in dieses Journal eingetragen hat, noch in der Tabelle der Transaktionen weiterbesteht. Im gegenteiligen Fall kann der Inhalt dieses zweiten Journals gelöscht und ignoriert werden, weil das Nichtvorhandensein der Identität dieser Transaktion in der Tabelle eine Garantie ist, dass die Entscheidung eines Fehlschlages dieser Transaktion vor dem Ausfall getroffen wurde. So kann die Aktualisierung des nichtflüchtigen Speichers beendet werden, um eine Kohärenz mit den neuen Werten wiederzugewinnen, die früher in den flüchtigen Speicher eingetragen wurden und auf die die Anwendungen bereits vor dem Ausfall zugreifen konnten.
- Das erfindungsgemäße Protokoll gestattet unter anderen Anwendungen den Anwendungen zur Steuerung eines Telekommunikationsnetzes, voll aus den durch die herkömmlichen Transaktionsprotokolle für die Datenbasen verschafften Vorteilen (Eigenschaften der Atomarität, der Serialisierungsfähigkeit, der Isolation und der Dauerhaftigkeit) Nutzen zu ziehen, ohne auf ausschließende Wartezeiten zu treffen. Der einzige Fall, in dem es eine durch die Anwendungen wahrnehmbare Wartezeit gibt, ist der Fall, in dem der flüchtige Speicher in der Wiederherstellung in Foolge eines Ausfalls des Prozessors befindet, d. h. während der Überführung von Daten aus dem nichtflüchtigen Speicher zum flüchtigen Speicher. Dieser Fall ist sehr selten, weil er mit der Wahrscheinlichkeit verbunden ist, zum Zeitpunkt des Ausfalls des Prozessors eine Schreibtransaktion, die ein durch ein Register auf der Platte geschütztes Register modifiziert, zu haben; und die Schreibvorgänge auf dieser Art von Register sind selten.
- Die Erfindung hat auch ein System zur Durchführung des erfindungsgemäßen Protokolls zum Gegenstand.
- Die Erfindung wird besser verstanden und weitere Merkmale zeigen sich mit Hilfe der Beschreibung eines Ausführungsbeispiels dieses Protokolls unten und mit Hilfe der Figuren, die es darstellen:
- Fig. 1 stellt schematisch ein Informationsverarbeitungssystem dar, das das erfindungsgemäße Protokoll ausführt;
- Fig. 2a und 2b stellen ein Flussdiagramm für die Operationen dar, die während einer Transaktion in einem Ausführungsbeispiel des erfindungsgemäßen Protokolls in diesem Beispiel eines Informationsverarbeitungssystems ausgeführt werden;
- Fig. 3 stellt ein Flussdiagramm für die Operationen dar, die während einer Fehlschlagprozedur einer Transaktion ausgeführt werden; und
- Fig. 4 stellt ein Flussdiagramm für die Operationen dar, die zum Wiederherstellen des Inhalts des flüchtigen Speichers nach einem Ausfall dieses Speichers oder des Prozessors, mit dem er verbunden ist, ausgeführt werden.
- Das in Fig. 1 dargestellte Beispiel eines Informationsverarbeitungssystems umfasst nur eine Station 5 und einen nichtflüchtigen Speicher D, der aus einer Platteneinheit besteht, aber das erfindungsgemäße Protokoll ist bei jedem System irgendeiner Größe anwendbar. Die Station S weist einen Prozessor P, einen Plattencontroller CD und einen flüchtigen Speicher M auf, der ein Direktzugriffsspeicher ist, der beispielsweise aus Halbleiterkippschaltungen besteht.
- Die Verbindungen im Inneren der Station S sind nicht dargestellt, sind aber herkömmlich. Der Prozessor P und der nichtflüchtige Speicher D sind durch einen Kanal, der in herkömmlicher Weise gesichert ist, CS, verbunden. Jeder Ausfall des Prozessors P zieht einen Ausfall des flüchtigen Speichers M und somit den Verlust der Daten, die er enthält, nach sich. Dagegen bewirkt ein Ausfall des Prozessors P keinen Ausfall des nichtflüchtigen Speichers D, der insbesondere durch das herkömmliche System von Spiegelplatten und durch den gesicherten Kanal CS geschützt ist.
- Der Prozessor S führt ein Softwareprogramm aus, das das erfindungsgemäße Protokoll durchführt, und führt verschiedene Anwendungssoftwareprogramme aus. Anwendungen verwenden in einer gegebenen Transaktion n Variablen V1, ..., Vi, ..., Vn, deren Werte entsprechend einerseits in logischen Registern Rlm, R2 m, ..., Rim, ..., Rnm im flüchtigen Speicher und andererseits in Registern R1d, ..., Rid, ..., Rnd im nichtflüchtigen Speicher gespeichert werden. Diese Verdoppelung gestattet, diese Werte im Falle eines Ausfalls des flüchtigen Speichers M zu schützen, um den Inhalt dieses flüchtigen Speichers M wiederherzustellen. Ein Journal genanntes Register, das entsprechend mit L1m, L2 m, ..., Lim, ..., Lnm bezeichnet ist, ist entsprechend mit den Registern R1m, ..., Rnm verbunden. Ein Sperrenregister genanntes Register, das entsprechend mit V1m, V2 m, ..., Vim, ..., Vnm bezeichnet ist, ist entsprechend mit jedem der Register R1m, ..., Rmm verbunden und befindet sich im flüchtigen Speicher M. Das Journal speichert einen neuen Wert der Variablen vor dessen tatsächlichen Schreiben in das zugehörige Register.
- Ebenso ist ein Journalregister, das entsprechend mit L1d, ..., Lid, ..., Lnd bezeichnet ist, entsprechend mit jedem der Register R1d, ..., Rnd des nichtflüchtigen Speichers D verbunden und befindet sich im nichtflüchtigen Speicher D. Ein Sperrenregister, das entsprechend mit V1d, ..., Vid, ..., Vnd bezeichnet ist, ist entsprechend mit jedem der Register R1d, ..., Rnd verbunden und befindet sich im flüchtigen Speicher M. In diesem Beispiel eines Systems enthält der nichtflüchtige Speicher D auch eine Tabelle T, die Transaktionstabelle genannt wird, um Informationen bezüglich der Transaktionen zu speichern, die Schreiboperationen umfassen:
- - die Identität jeder Transaktion;
- - und einen Indikator für das Ende dieser Transaktion. In diesem Beispiel kann der Indikator zwei Werte annehmen:
- - "Ausgang unbekannt" (die Transaktion kann fehlgeschlagen sein);
- - "Transaktion als beendet angesehen" (aber tatsächlich hat ein Ausfall ihre Beendigung im nichtflüchtigen Speicher vielleicht verhindert).
- Wenn der Indikator gelöscht wird, ist die Transaktion im nichtflüchtigen Speicher tatsächlich beendet oder wurde auch die Entscheidung einer Beendigung getroffen und der Benutzeranwendung mitgeteilt.
- Die Anwendungen greifen beim Lesen und Schreiben auf die Register des flüchtigen Speichers M unter Kontrolle eines Softwareprogramms zu, das das erfindungsgemäße Transaktionsprotokoll durchführt. Dieses Protokoll weist einige Merkmale auf, die in einem Transaktionsprotokoll zum Zugreifen auf eine Datenbasis herkömmlich sind. Es besteht darin:
- - eine Transaktion auf Anforderung einer Anwendung zu eröffnen, indem dieser Transaktion eine eindeutige Identität zugewiesen wird; diese Identität gestattet dieser Anwendung dank der Zuweisung von Sperren, diese Transaktionsidentität tragen, um anzugeben, dass diese Sperren dieser Transaktion zugewiesen sind, einen Lese- oder Schreibzugriff in den Registern des flüchtigen Speichers M;
- - diese Transaktion abzuschließen, wenn es die Anwendung fordert, wobei dieser Abschluss die tatsächliche Durchführung der Lesevorgänge und Schreibvorgänge dieser Transaktion auslöst, dann die entsprechenden Sperren aufhebt.
- Die Erfindung betrifft insbesondere die Durchführung des Abschlusses einer Transaktion. Das erfindungsgemäße Protokoll setzt herkömmliche Lesesperren und Schreibsperren ein, deren Definition oben in Erinnerung gerufen wurde. Sie setzt außerdem einen neuen Sperrentyp ein, der Sperre für die Schreibabsicht genannt wird, die jedes Schreiben verbietet, das mit jeder anderen Transaktion konkurriert, die aber ein Lesen durch andere Transaktionen gestattet. Mit anderen Worten: eine Sperre für die Schreibabsicht kann gleichzeitig mit Lesesperren vorhanden sein. Es können gleichzeitig mehrere Lesesperren vorhanden sein, aber eine Schreibsperre kann mit keiner weiteren Sperre gleichzeitig vorhanden sein.
- Wenn eine Anwendung ein Register im flüchtigen Speicher unter einer Transaktion liest, muss sie zuvor für dieses Register eine Lesesperre erlangen. Wenn bereits einer anderen Transaktion für dieses Register eine Schreibsperre zugewiesen wurde, dann wird die Leseanforderung warten gelassen, bis die Schreibsperre aufgehoben wird. Die Dauer dieses Wartens ist begrenzt. Im Falle einer Überschreitung dieser Grenze wird der Anwendung die Zuweisung einer Lesesperre verwehrt. Für Anwendungen auf dem Gebiet der Telekommunikationen muss die Dauer für dieses Warten kurz sein und muss andererseits eine Zurückweisung der Leseanforderung sehr selten sein, um erträglich zu sein.
- Wenn eine Anwendung unter einer Transaktion einen neuen Wert in ein Register schreiben will, muss sie erfindungsgemäß zuvor für dieses Register eine Sperre für die Schreibabsicht erlangen. Wenn bereits einer anderen Transaktion für dieses Register eine Sperre für die Schreibabsicht oder eine Schreibsperre zugewiesen wurde, dann wird die Schreibanforderung warten gelassen, bis diese Sperre aufgehoben wird. Die Dauer dieses Wartens ist begrenzt. Im Falle einer Überschreitung dieser Grenze wird der Anwendung die Zuweisung einer Schreibsperre verwehrt und wird die Schreibanforderung zurückgewiesen.
- Wenn erfindungsgemäß einer gegebenen Transaktion für ein gegebenes Register eine Sperre für die Schreibabsicht zugewiesen wurde, wird der zu schreibende neue Wert im Journal gespeichert, das mit dem Register verbunden ist. Solange dieser Wert nicht in das Register überführt wird, können die anderen Transaktionen fortfahren, in diesem Register den alten Wert zu lesen. Nur die Transaktion, die die Sperre für die Schreibabsicht behält, hat das Recht, den im Register enthaltenen neuen Wert zu lesen. Diese Eigenschaft der Sperre für die Schreibabsicht ist wesentlich, um die Eigenschaft der Serialisierungsfähigkeit der Transaktionen aufrechtzuerhalten, wobei vermieden wird, die lesenden Anwendungen warten zu lassen.
- Fig. 2a und 2b stellen ein Flussdiagramm für die Operationen dar, die vor und während des Abschlusses einer gegebenen Transaktion a in einem Ausführungsbeispiel des erfindungsgemäßen Protokolls ausgeführt werden. Die Transaktion a umfasst Schreibvorgänge und Lesevorgänge. Sie wird durch eine Operation 0a eröffnet. Eine Transaktion b, die nur Lesevorgänge umfasst, wird gleichzeitig mit der Transaktion a durch eine Operation 0b eröffnet. Dieses Flussdiagramm betrifft nur den Abschluss der Transaktion a. Der Abschluss der Transaktion b findet unabhängig vom Abschluss der Transaktion a statt und ist nicht dargestellt.
- Die linke Hälfte der Fig. 2a, 2b, 3, 4 stellen die Operationen dar, die die Werte betreffen, die im flüchtigen Speicher M gespeichert sind, und der rechte Teil stellt die Operationen dar, die die Werte betreffen, die im nichtflüchtigen Speicher D gespeichert sind.
- Die Schreibvorgänge der abzuschließenden Transaktion, a, sollen in die Speicher M und D die neuen Werte von n Variablen V1, ..., Vn entsprechend eintragen. Am Anfang dieses Flussdiagramms wurde noch kein Zugriff im nichtflüchtigen Speicher D ausgeführt und wurde noch keine Schreibsperre zugewiesen, die verhindern, dass die Anwendungen im flüchtigen Speicher M lesen.
- Die Transaktion a greift beim Schreiben im flüchtigen Speicher M zu. Ein Schreibzugriff auf eine Variable Vi ist gekennzeichnet durch:
- - eine Operation 1, die der Transaktion a für das Register Rim, in welches diese Transaktion den neuen Wert der Variablen Vi im flüchtigen Speicher M eintragen soll, eine Sperre für die Schreibabsicht zuweist,
- - eine Operation 2, die den neuen Wert in das Journal Lim schreibt, das mit dem Register Rim im flüchtigen Speicher M verbunden ist.
- Die Sperre für die Schreibabsicht lässt außerdem die Möglichkeit, noch den alten Wert des Registers Rim zu lesen, um die Anwendungen, die Lesevorgänge anfordern, zufriedenzustellen. Verschiedene Transaktionen können somit im flüchtigen Speicher M den Alten Wert jeder Variablen lesen, die von der Transaktion a betroffen ist. Beispielsweise führt die Transaktion b die folgenden Operationen aus, um beim Lesen im flüchtigen Speicher M auf eine in Modifikation durch die Transaktion a befindliche Variable Vi zuzugreifen:
- - eine Operation 3b zur Erlangung von Lesesperren auf dem Register Rim, das den alten Wert des Registers enthält (vor der Berücksichtigung der Modifikation von a),
- - eine Operation 4b, die diesen Wert im Register Rim liest.
- In analoger Weise kann die Transaktion a beim Lesen auf diese Variable Vi zugreifen durch:
- - eine Operation 3a zur Erlangung von Lesesperren auf dem Register Rim, das den alten Wert des Registers enthält (vor der Berücksichtigung der Modifikation von a),
- - eine Operation 4a, die diesen Wert im Register Rim liest. Die Abschlussphase für die Transaktion a umfasst die folgenden Operationen:
- - das Empfangen 5a der Abschlussanforderung für diese Transaktion, die von einer Anwendung gesendet wird;
- - einen Test 6, der im flüchtigen Speicher M auf dem Inhalt der Register für Sperren V1m, ..., Vnm ausgeführt wird, die den Registern R1m, ..., Rnm entsprechen, um eine erste Sperre für die Schreibabsicht zu bestimmen, die der abzuschließenden Transaktion zugewiesen ist, und das erste Register Rim zu bestimmen, auf welches sich eine solche Sperre erstreckt;
- - wenn der Test 6 eine Sperre für die Schreibabsicht findet:
- -- bestimmt eine Operation 7 das Register Rid, das dem durch den Test 6 bestimmten Register Rim entspricht;
- -- dann wird ein Test 8 auf dem Inhalt des Registers für Sperren Vid ausgeführt, um zu bestimmen, ob es für dieses Register Rid eine Schreibsperre enthält, die einer anderen als der abzuschließenden Transaktion zugewiesen ist; wenn dies der Fall ist, wird die von der abzuschließenden Transaktion gesendete Schreibanforderung durch eine Operation 9 warten gelassen, bis diese Sperre aufgehoben wird;
- -- wenn dies nicht der Fall ist, weist eine Operation 10 der abzuschließenden Transaktion für das Register Rid eine Schreibsperre zu, wobei dieses Sperre in das Register Vid eingetragen wird;
- -- dann schreibt eine Operation 11 den neuen Wert der Variablen Vi in das Journal Lid;
- -- dann speichert eine Operation 12, dass dieses Register Rid bearbeitet wurde und es werden die Operationen 6 bis 12 bis zum Aufbrauchen der Sperren für die Schreibabsicht wiederholt, die in den Registern für Sperren Vim vom Test 6 gefunden wurden;
- - wenn die Sperren für die Schreibabsicht, die im Test 6 gefunden wurden, aufgebraucht sind, schreibt eine Operation 13 in die Tabelle im nichtflüchtigen Speicher D: die Identität der abzuschließenden Transaktion und ein Indikator für den Ausgang, der "Ausgang unbekannt" angibt; und dieser Indikator besteht weiter, solange der Inhalt aller Journale L1d, ..., Lnd nicht vollständig entsprechend in die Register R1d, ..., Rnd überführt ist, d. h. solange die Transaktion nicht als tatsächlich beendet betrachtet werden kann;
- - dann hebt eine Operation 14 im flüchtigen Speicher M alle Lesesperren, die der abzuschließenden Transaktion zugewiesen waren, für die Register R1m, ..., R1n des flüchtigen Speichers M auf, um danach ein Schreiben von neuen Werten in diese Register zu gestatten.
- Fig. 2b stellt die Operationen dar, die der Operation 14 zur Aufhebung der Sperren, die die abzuschließende Transaktion besitzt, folgen:
- - Es wird ein Test 15 auf dem Inhalt der Register für Sperren Vim ausgeführt, um zu bestimmen, ob sie wenigstens eine Sperre für die Schreibabsicht enthalten, die der abzuschließenden Transaktion zugewiesen ist, und um das erste Register Rim zu bestimmen, auf das sich eine solche Sperre bezieht; wenn dieser Test 15 keine Sperre für die Schreibabsicht findet, wird ein später beschriebener Test 20 ausgeführt;
- - wenn der Test 15 eine erste Sperre für die Schreibabsicht findet, verifiziert ein Test 16 nach einer festgelegten Verzögerung, dass auf dem betrachteten Register Rim keine Lesesperre weiterbesteht, die irgendeiner Transaktion zugewiesen ist:
- -- wenn nach dem Ende der festgelegten Verzögerung wenigstens eine Lesesperre weiterbesteht, endet diese Abschlussphase mit einer Fehlschlagprozedur 17 für die Transaktion, einer Prozedur, die später beschrieben wird;
- -- wenn keine Lesesperre weiterbesteht, übersetzt eine Operation 18 die Sperre für die Schreibabsicht in eine Schreibsperre, die von nun an jedes Lesen im betrachteten Register Rim verbietet; dann speichert eine Operation 19, dass dieses Register Rim bearbeitet wurde, und werden die Operationen 15, 16, 17, 18 bis zum Aufbrauchen der Sperren für die Schreibabsicht wiederholt, die von der Operation 15 gefunden wurden.
- Der Test 20 besteht darin zu bestimmen, ob die Register für Sperren Vim wenigstens eine Schreibsperre enthalten, die der abzuschließenden Transaktion zugewiesen ist, und das erste Register Rim zu bestimmen, auf das sich eine solche Sperre bezieht; und wenn keine Sperre gefunden wird, wird eine später beschriebene Operation 24 ausgeführt;
- - wenn der Test 20 wenigstens eine Schreibsperre findet, überführt eine Operation 21 den Inhalt des Journals Lim in das entsprechende Register Rim, um den Inhalt dieses Registers mit dem neuen Wert zu aktualisieren;
- -- dann hebt eine Operation 22 die der abzuschließenden Transaktion zugewiesene Schreibsperre für das Register Rim auf;
- -- dann speichert eine Operation 23, dass das Register Rim bearbeitet wurde und es werden die Operationen 20, 21, 22 bis zum Aufbrauchen der Schreibsperren wiederholt, die von der Operation 20 gefunden wurden;
- - Wenn der Test 20 keine der abzuschließenden Transaktion zugewiesene Schreibsperre mehr findet:
- -- sendet eine Operation 24 eine Nachricht "Transaktion als beendet angesehen" zur Anwendung, die den Abschluss der Transaktion angefordert hat, wobei diese Anwendung von nun an Entscheidungen auf Grund der Vollständigkeit dieser Transaktion treffen kann, obwohl die Transaktion nicht wirklich beendet ist, da ja die Aktualisierung des nicht flüchtigen Speichers D noch nicht vorgenommen ist;
- -- dann schreibt eine Operation 25 in die Tabelle T einen neuen Wert des Indikators für den Ausgang, der mit der Identität der abzuschließenden Transaktion verbunden ist; dieser neue Wert gibt an "als beendet angesehen", er gestattet, nach einem eventuellen Ausfall zu wissen, dass die Anwendung die Nachricht erhalten hat, die für sie bedeutet, dass die Transaktion als beendet angesehen wird;
- -- dann besteht eine Operation 26 zu bestimmen, ob die Register für Sperren Vid wenigstens eine Schreibsperre enthalten, die der abzuschließenden Transaktion zugewiesen ist, und das erste Register Rid zu bestimmen, auf das sich eine solche Sperre bezieht.
- - Wenn die Operation 26 eine Schreibsperre findet:
- -- überführt eine Operation 27 den Inhalt des Journals Lid in das Register Rid des nicht flüchtigen Speichers D;
- -- dann hebt eine Operation 28 die zum betrachteten Register Rid gehörige Schreibsperre auf;
- -- dann speichert eine Operation 29, dass das Register Rid bearbeitet wurde und es werden die Operationen 26, 27, 28 bis zum Aufbrauchen der Schreibsperren wiederholt, die von der Operation 26 gefunden wurden.
- - Wenn die Operation keine Schreibsperre mehr findet, löscht eine Operation 30 den Bezeichner der abzuschließenden Transaktion und den zugehörigen Indikator in der Tabelle T; dieses Löschen bedeutet, dass die Aktualisierung des nicht flüchtigen Speichers D vollständig beendet ist.
- Es ist zu bemerken, dass die Operation 25 zum Schreiben des Wertes "Transaktion als beendet angesehen" in die Tabelle T kein unverzichtbares Merkmal des erfindungsgemäßen Protokolls ist. Dieser Eintrag dient einzig und allein der Verwaltung der Tabelle der Transaktionen im nicht flüchtigen Speicher, wo die Identität einer Transaktion aus dieser Tabelle (außer dem Falle eines Fehlschlags) gelöscht wird, wenn die Gesamtheit der Modifikationen beendet wurde.
- Es ist zu bemerken, dass dieses Protokoll nur die Lesevorgänge im flüchtigen Speicher M von der Operation 18 zur Transformation der Sperren für die Schreibabsicht in Schreibsperren aus und bis zur Operation 22 zum Löschen der Schreibsperren verbietet, d. h. während einer sehr kurzen Dauer, da ja die Zugriffsdauer für einen nicht flüchtigen Speicher sehr kurz ist. Die Dauer des Verbots hängt in keiner Weise von der Zugriffszeit auf den nicht flüchtigen Speicher D ab, da ja die Operation 11 zum Schreiben neuer Werte in die Journale Lid und die Operation 27 zur Überführung dieser neuen Wertein die Register Rid kein Verbot für das Lesen im flüchtigen Speicher M mit sich bringen.
- Ein Ausfall des flüchtigen Speichers M kann zu jedem Zeitpunkt während der Folge von Operationen eintreten, die oben beschrieben sind. Insbesondere kann er nach der Operation 24, die die Nachricht "Transaktion als beendet angesehen" an die Anwendung sendet, und vor der Operation 27 stattfinden, die die Inhalte der Journale Lid in die Register Rid überführt.
- Im Folgenden zeigt die Beschreibung der Wiederherstellungsprozedur, wie die Kohärenz der Daten wiederhergestellt wird: indem tatsächlich die Aktualisierung im nicht flüchtigen Speicher D beendet wird, wenn vor dem Ausfall keine Fehlschlagprozedur 17 ausgeführt wurde; oder auch indem die Vorbereitungen für eine Aktualisierung im nicht flüchtigen Speicher D widerrufen werden und indem die alten Werte im flüchtigen Speicher M wiederhergestellt werden, wenn vor dem Ausfall eine Fehlschlagprozedur 17 teilweise ausgeführt wurde.
- Fig. 3 stellt ein Flussdiagramm der Operationen der Fehlschlagprozedur 17 für eine Transaktion dar, die in der Abschlussphase angekommen ist. Diese Prozedur umfasst die folgenden Operationen:
- - eine Operation 61 löscht den Inhalt der von der fehlgeschlagenen Transaktion festgehalten Journale L1m, ... Lnm im flüchtigen Speicher M;
- - eine Operation 62 löscht die Schreibsperren und die Sperren für die Schreibabsicht, die mit den Registern R1m, ..., Rnm verbunden sind und von der fehlgeschlagenen Transaktion festgehalten werden;
- - dann löscht eine Operation 63 in der Tabelle T im nicht flüchtigen Speicher D die Identität der fehlgeschlagenen Transaktion und den zugehörigen Indikator;
- - dann sendet eine Operation 64 eine Nachricht "Transaktion fehlgeschlagen" zu der Anwendung, die den Abschluss der Transaktion angefordert hat;
- - dann löscht eine Operation 65 den Inhalt der von der fehlgeschlagenen Transaktion festgehalten Journale L1d, ... Lnd im nicht flüchtigen Speicher D;
- - und schließlicht hebt eine Operation 66 die von der fehlgeschlagenen Transaktion festgehaltenen Schreibsperren für die Register Rid, ..., Rnd im nicht flüchtigen Speicher D, um die Vorbereitung einer Aktualisierung der n Variablen zu löschen, die während der fehlgeschlagenen Transaktion modifiziert werden sollten.
- Es ist zu bemerken, dass im Falle eines Fehlschlags einer Transaktion die Anwendung, die ihren Abschluss angefordert hat, nur nach dem Löschen 63 der Identität von Transaktionen im flüchtigen Speicher D eine Nachricht "Transaktion fehlgeschlagen" erhält, die von der Operation 64 gesendet wird. Wie sich später zeigen wird, verbietet das Löschen der Identität der Transaktion die Aktualisierung des nicht flüchtigen Speichers D durch die Wiederherstellungsprozedur. Folglich ist der spätere Ablauf der Anwendung mit der späteren Situation der Daten im nicht flüchtigen Speicher D kohärent.
- Fig. 4 stellt ein Flussdiagramm dar, das ein Beispiel der Durchführung eines Teils des erfindungsgemäßen Transaktionsprotokolls darstellt, der eine Prozedur zur Wiederherstellung des Inhalts des flüchtigen Speichers M nach einem Ausfall dieses ist. Die in diesem Flussdiagramm dargestellten Operationen werden p-mal wiederholt, wenn es p Variablen gibt, deren Werte auf dem nicht flüchtigen Speicher geschützt sind. Diese Operationen sind die folgenden:
- - eine Operation 37 initialisiert den Wert eines Index i mit 1;
- - dann testet eine Operation 38 den Inhalt des Registers für Sperren Vid im nicht flüchtigen Speicher D:
- -- Wenn das Register für Sperren Vid keine Schreibsperren enthält, bedeutet dies, dass der Inhalt des Journals Lid in das Register Rid überführt wurde, somit dass die Aktualisierung des Wertes der Variablen Vi im nicht flüchtigen Speicher D vor dem Ausfall beendet wurde und dass es genügt, diesen neuen Wert im flüchtigen Speicher M wiederherzustellen; eine Operation 39 weist der Wiederherstellungsprozedur für das Register Rim eine Schreibsperre zu; darauf überführt eine Operation 40 dann den Inhalt des Registers Rid in das Register Rim, um den neuen Wert der Variable erneut in den flüchtigen Speicher einzutragen; danach hebt eine Operation 41 die Schreibsperre für Rim auf; dann wird eine Operation 50 ausgeführt, die später beschrieben wird.
- -- Wenn das Register für Sperren Vid eine Schreibsperre enthält, bedeutet dies, dass die Aktualisierung dieser Variablen im nicht flüchtigen Speicher D zum Zeitpunkt des Ausfalls noch nicht vorgenommen wurde; dann liest eine Operation 42 die Tabelle T, um zu bestimmen, ob sie noch die Identität der Transaktion enthält, der diese Schreibsperre zugewiesen ist:
- -- Wenn die Identität dieser Transaktion in der Tabelle T vorhanden ist, bedeutet dies, dass die Aktualisierung des nicht flüchtigen Speichers D für die Transaktion nicht vollständig beendet wurde; eine Operation 43 überführt dann den Inhalt des zu dieser Schreibsperre gehörigen Journals Lid in das zu dieser Schreibsperre gehörige Register Rid, um den Inhalt dieses Registers Rid zu aktualisieren; dann hebt eine Operation 44 die Schreibsperre auf, die von der Operation 40 im Register Vid gefunden wurde; danach weist eine Operation 45 dieser Wiederherstellungsprozedur eine Schreibsperre im Register für Sperren Vim zu; darauf überführt eine Operation 46 den Inhalt des Registers Rid in das Register Rim, das sich im flüchtigen Speicher M befindet, um ihn seinerseits zu aktualisieren; schließlich hebt eine Operation 47 die Schreibsperre auf, die von der Operation 45 zugewiesen wurde.
- -- Wenn diese Transaktionsidentität in der Tabelle T nicht vorhanden ist, bedeutet dies, dass vor dem Ausfall eine Fehlschlagprozedur 17 teilweise ausgeführt wurde und dass somit die Vorbereitungen für eine Aktualisierung des nicht flüchtigen Speichers D widerrufen werden müssen; eine Operation 48 löscht dann den Inhalt des Journals Lid; danach hebt eine Operation 49 die im Register für Sperren Vid gefundene Schreibsperre auf.
- Nach der Operation 41 oder der Operation 47 oder der Operation 49 testet die Operation SO den Wert des Index, i, der gestattet, jede der p Variablen zu unterscheiden, die von den Modifikationen betroffen sind, die von der abzuschließenden Transaktion ausgeführt werden:
- -- wenn i kleiner als p ist, erhöht eine Operation 51 den Index i um eine Einheit und wird die Prozedur von Operation 40 an wiederholt;
- -- wenn i gleich p ist, wird die Prozedur durch eine Operation 52 zum Löschen aller in der Tabelle T vorhandenen Transaktionsidentitäten im nicht flüchtigen Speicher D beendet.
- Es ist zu bemerken, dass wenn die Operation 42 feststellt, dass die Identität der Transaktion, die der von der Operation 40 gefundenen Schreibsperre entspricht, in der Tabelle T nicht vorhanden ist, dies notwendigerweise bedeutet, dass vor dem Ausfall eine Fehlschlagentscheidung getroffen wurde, was erklärt, dass die Identität gelöscht wurde. Die Inhalte der dieser Transaktion zugewiesenen Journale Lid müssen somit gelöscht werden, wenn sie vor dem Ausfall nicht gelöscht wetten konnten. Selbstverständlich darf der Inhalt dieser Journale nicht berücksichtigt werden, da ja eine Entscheidung getroffen wurde, die Transaktion vorzeitig abzubrechen.
- Wenn die Operation 42 feststellt, dass die Identität der Transaktion, die der von der Operation 40 gefundenen Schreibsperre entspricht, in der Tabelle T vorhanden ist, und wenn der Indikator den Wert "Transaktion als beendet angesehen" hat, bedeutet dies, dass vor dem Ausfall die Entscheidung getroffen wurde, die Transaktion abzuschließen. Die Inhalte der dieser Transaktion zugewiesenen Journale Lid müssen in dem Fall, in dem sie vor dem Ausfall nicht überführt werden konnten, in die entsprechenden Register Rid überführt werden. Dies gestattet anschließend, den Inhalt der Register Rid erneut in die entsprechenden Register Rim zu kopieren, um den Inhalt des flüchtigen Speichers M wiederherzustellen.
- Wenn die Operation 42 feststellt, dass der Indikator der Transaktion in der Tabelle T vorhanden ist, und wenn der Indikator den Wert "Ausgang unbekannt" hat, bedeutet dies, dass die Anwendung keine Nachricht "Transaktion fehlgeschlagen" erhalten haben konnte, da ja die Operation 63 zum Löschen der Transaktionsidentität immer der Operation 64 zum Senden dieser Nachricht vorhergeht. Dagegen kann die Anwendung eine Nachricht "Transaktion als beendet angesehen" erhalten haben, ohne dass die Identität der Transaktion gelöscht wurde, noch der Indikator den Wert "Transaktion als beendet angesehen" angenommen hat, da ja die Operation 10 zum Senden der Nachricht "Transaktion als beendet angesehen" eine gewisse Zeit vor der Operation 30 stattfindet, die die Identität der Transaktion in der Tabelle T löscht. Es ist dann notwendig, die Operationen auszuführen, die tatsächlich den Abschluss der Transaktion beenden, um eine Kohärenz der Daten in allen Fällen wiederzugewinnen: entweder dass die Anwendung eine Nachricht "Transaktion als beendet angesehen" wahrgenommen hat, oder dass sie keine Nachricht wahrgenommen hat. Im diesem letzteren Fall hat sie offensichtlicht keine mit der Beendigung des Bestands der Transaktion inkohärente Entscheidung getroffen.
- Im oben beschriebenen Ausführungsbeispiel befinden sich die Register für Sperren Vid, die zu den logischen Registern Rid des flüchtigen Speichers D gehören, im flüchtigen Speicher M und nicht im nicht flüchtigen Speicher D. Es ist notwendig, nach einem Ausfall das Vorhandensein einer Sperre Vid zu erfassen, die einem Register Rid zugewiesen ist (Operation 38 in Fig. 4). Wenn sich das Register Vid im flüchtigen Speicher M befindet, ist bei jedem Ausfall sein Inhalt verloren. Aber es gibt ein weiteres Mittel zu bestimmen, ob die Aktualisierung des Registers Rid beendet wurde oder nicht: die Operation 38 besteht dann darin zu erfassen, ob das Journal Lid einen Inhalt hat. Wenn der Inhalt der Register Lid systematisch gelöscht wird, wenn er in ein Register Rid überführt wurde, bedeutet das Vorhandensein eines Inhalts im Journal Lid, dass das Register Rid nicht aktualisiert wurde. In der Tat kann es keinen Inhalt mehr geben, der nach dem Ausfall in dieses Journal Lid eingetragen wurde.
- Der Inhalt des Registers für Sperren Vid kann außerdem im flüchtigen Speicher M wiederhergestellt werden, indem erneut eine Schreibsperre in dieses Register eingetragen wird, nachdem das Vorhandensein eines Inhalts im Journal Lid im nicht flüchtigen Speicher D erfasst wurde.
Claims (3)
1. Transaktionsprotokoll, das Daten betrifft, die
identisch in einem nichtflüchtigen Speicher und in
einem flüchtigen Speicher gespeichert sind, bei
welchem während einer Transaktion, die ein Schreiben
des neuen Wertes wenigstens einer in einem ersten
Register (Rim) des flüchtigen Speichers (M) und in
einem zweiten Register (Rid) des nichtflüchtigen
Speichers (D) gespeicherten Variablen umfasst:
ein Lesezugriff für jede Variable (Vi) darin besteht:
- dieser Transaktion für das erste Register (Rim)
eine Sperre, Lesesperre genannt, zuzuweisen, die
die Durchführung eines Schreibens verbietet,
- dann den Wert dieses Registers zu lesen (4a);
ein Schreibzugriff für jede Variable (Vi) insbesondere
darin besteht:
- dieser Transaktion für das erste Register (Rim)
eine Sperre, Schreibsperre genannt, zuzuweisen,
die im ersten Register. (Rim) für jede andere
Transaktion als die abzuschließende Transaktion
ein Schreiben verbietet, aber ein Lesen zulässt;
- mit dem ersten Register (Rim) ein Register, das
erstes Journal (Lim) genannt wird, zu verbinden
und dort den neuen Wert der Variablen zu
speichern (2);
dadurch, dass der Abschluss der Transaktion im
Wesentlichen darin besteht:
- (6) für jedes erste Register (Rim), dem für die
abzuschließende Transaktion eine Sperre für die
Schreibabsicht zugewiesen wurde,
-- das entsprechende zweite Register (Rid) im
nichtflüchtigen Speicher (D) zu bestimmen;
-- diesem so bestimmten zweiten Register (Rid)
für die abzuschließende Transaktion eine
Schreibsperre zuzuweisen, wobei diese Sperre
jeder anderen Transaktion ein Lesen und ein
Schreiben verbietet;
-- mit dem so bestimmten zweiten Register (Rid)
ein Register (Lid), das zweites Journal
genannt wird, zu verbinden und dort den
neuen Wert der Variablen zu speichern (11)
dadurch gekennzeichnet, dass dieser Schreibzugriff
dann darin besteht:
- in eine Tabelle (T), Tabelle der
Transaktionen genannt, die im
nichtflüchtigen Speicher (D) gespeichert
ist, die Identität dieser Transaktion zu
schreiben (13)
- jede der abzuschließenden Transaktion zugewiesene
Lesesperre aufzuheben (14);
- dann (15) für jedes erste Register (Rim), das für
die abzuschließende Transaktion eine Sperre für
die Schreibabsicht besitzt, zu prüfen (16), ob
keine einer Transaktion für dieses Register
zugewiesene Lesesperre weiterbesteht, und wenn
während einer Dauer, die größer als eine
festgelegte Grenze ist, wenigstens eine
Lesesperre weiterbesteht, eine Fehlschlagprozedur
(17) für die abzuschließende Transaktion
durchzuführen; und wenn nicht, diese Sperre für
die Schreibabsicht in eine Schreibsperre
umzuwandeln (18);
- dann (20) für jedes erste Register (Rim), das für
die abzuschließende Transaktion eine
Schreibsperre besitzt,
-- den neuen Wert der Variablen vom Journal
(Lim) zum Register (Rim) zu überführen (21);
-- und für das erste Register (Rim), die der
abzuschließenden Transaktion zugewiesene
Schreibsperre aufzuheben (22);
- dann eine Nachricht "Transaktion als beendet
angesehen" zu einer Anwendung zu senden (24), die
den Abschluss der Transaktion angefordert hat;
- dann in die Tabelle (T) einen Indikator
einzutragen (25), der der Identität der
Transaktion zugewiesen wird und angibt, das diese
als beendet angesehen wird;
- dann (26) für jedes zweite Register (Rid), das
für die abzuschließende Transaktion eine
Schreibsperre besitzt,
-- den neuen Wert der Variablen vom zweiten
Journal (Lid) zum zweiten Register (Rid) zu
überführen (27);
-- dann für das erste Register (Rid), die
dieser Transaktion zugewiesene Schreibsperre
aufzuheben (28);
- und schließlich die Identität der Transaktion in
der Tabelle (T) zu löschen (30);
dadurch, dass hier die Fehlschlagprozedur (17) für die
abzuschließende Transaktion für jedes erste Register
(Rim) darin besteht:
- den Inhalt jedes ersten Journals (Lim) zu löschen
(61), das den durch die fehlgeschlagene
Transaktion modifizierten Wert einer Variablen
speichert;
- dann für dieses erste Register (Rim), die der
fehlgeschlagenen Transaktion zugewiesenen Sperren
für die Schreibabsicht und die Schreibsperren
auf zuheben (62);
- die Identität der fehlgeschlagenen Transaktion in
der Tabelle (T) zu löschen (63)
- dann eine Nachricht "Transaktion fehlgeschlagen"
zu der Anwendung zu senden (64), die den
Abschluss der Transaktion angefordert hat;
- dann den Inhalt jedes zweiten Journals (Lim) zu
löschen (65), das den durch die fehlgeschlagene
Transaktion modifizierten Wert einer Variablen
speichert;
- dann für zweite Register (Rid) die der
fehlgeschlagenen Transaktion zugewiesenen
Schreibsperren aufzuheben (65);
und dadurch, dass sie zur Wiederherstellung des
Inhalts des flüchtigen Speichers (M) nach einem
Ausfall dieses darin besteht:
- für alle zweiten Register (Rid) des
nichtflüchtigen Speichers zu prüfen (38), ob eine
Schreibsperre auf diesem Register weiterbesteht,
und
-- wenn keine Schreibsperre weiterbesteht, dem
ersten Register (Rim), das dem betrachteten
zweiten Register (Rid) entspricht, eine
Schreibsperre zuzuweisen (39), dann den
Inhalt dieses zweiten Registers (Rid) in
dieses erste Register (Rim) zu überführen
(40) und diese Schreibsperre aufzuheben
(41);
-- wenn eine Schreibsperre weiterbesteht, zu
bestimmen (42) ob diese Schreibsperre zu
einer Transaktion gehört, deren Identität
sich in der Tabelle der Transaktionen
befindet; und
--- wenn ja, den Inhalt des zweiten Journals
(Lid) in das zweite Register (Rid) zu
überführen (43), dann die Schreibsperre
aufzuheben (44), dann dem ersten Register
(Rim), das dem betrachteten zweiten Register
entspricht, eine Schreibsperre zuzuweisen
(45), dann den Inhalt dieses zweiten
Registers (Rid) in dieses erste Register
(Rim) zu überführen (46) und diese letztere
Schreibsperre aufzuheben (47);
--- wenn nicht, den Inhalt des zweiten Journals
(Lid) zu löschen, dann die Schreibsperre
aufzuheben (49);
- schließlich alle in der Tabelle (T) vorhandenen
Transaktionsidentitäten zu löschen (52).
2. Protokoll nach Anspruch 1, dadurch gekennzeichnet,
dass in der Wiederherstellungsprozedur zum prüfen
(38), ob auf einem zweiten Register (Rid) eine
Schreibsperre weiterbesteht, sie darin besteht zu
bestimmen, ob mit diesem zweiten Register ein zweites
Journal (Lid) verbunden ist.
3. System zur Durchführung des Protokolls nach einem der
Ansprüche 1 oder 2, welches umfasst: wenigstens einen
Prozessor (P), einen flüchtigen Speicher (M), einen
nichtflüchtigen Speicher (D) und Mittel (P) zum
Durchführen einer Transaktion, die ein Schreiben des
neuen Wertes wenigstens einer in einem ersten Register
(Rim) des flüchtigen Speichers (M) und in einem
zweiten Register (Rid) des nichtflüchtigen Speichers
(D) gespeicherten Variablen umfasst; bei welchem die
Mittel (P) zum Durchführen einer Transaktion für einen
Schreibzugriff für jede Variable (Vi) umfassen:
- Mittel, um dieser Transaktion für das erste
Register (Rim), das dieser Variablen entspricht,
eine Sperre, Schreibsperre genannt, zuzuweisen
(1), die in diesem ersten Register (Rim) für jede
andere Transaktion als die abzuschließende
Transaktion ein Schreiben verbietet, aber ein
Lesen zulässt;
- Mittel, um mit dem ersten Register (Rim) ein
Register, das erstes Journal (Lim) genannt wird,
zu verbinden und dort den neuen Wert der
Variablen zu speichern (2);
und bei welchem die Mittel (P) zum Durchführen einer
Transaktion für den Abschluss der Transaktion
umfassen:
- Mittel, um jedes erste Register (Rim) zu
bestimmen (6), dem für die abzuschließende
Transaktion eine Sperre für die Schreibabsicht
zugewiesen wurde, und das entsprechende zweite
Register (Rid) im nichtflüchtigen Speicher (D) zu
bestimmen (7);
- Mittel, um jedem der so bestimmten zweiten
Register (Rid) für die abzuschließende
Transaktion eine Schreibsperre zuzuweisen (10)
wobei diese Sperre jeder anderen Transaktion ein
Schreiben verbietet;
- Mittel, um mit jedem der so bestimmten zweiten
Register (Rid) ein Register (Lid), das zweites
Journal genannt wird, zu verbinden und dort den
neuen Wert der Variablen zu speichern (11);
dadurch gekennzeichnet, dass die Mittel zum
Durchführen einer Transaktion außerdem umfassen:
- Mittel, um in eine Tabelle (T), Tabelle der
Transaktionen genannt, die im nichtflüchtigen
Speicher (D) gespeichert ist, die Identität
dieser Transaktion zu schreiben (13);
- Mittel, um jede der abzuschließenden Transaktion
zugewiesene Lesesperre aufzuheben (14);
- Mittel, um für jedes erste Register (Rim), das
für die abzuschließende Transaktion eine Sperre
für die Schreibabsicht besitzt, zu prüfen (15,
16), ob keine irgendeiner Transaktion auf diesem
Register zugewiesene Lesesperre weiterbesteht,
und wenn während einer Dauer, die größer als eine
festgelegte Grenze ist, wenigstens eine
Lesesperre weiterbesteht, eine Fehlschlagprozedur
(17) für die abzuschließende Transaktion
durchzuführen; und wenn nicht, diese Sperre für
die Schreibabsicht in eine Schreibsperre
umzuwandeln (18), dann (20) für jedes erste
Register (Rim), das für die abzuschließende
Transaktion eine Schreibsperre besitzt,
-- den neuen Wert der Variablen vom Journal
(Lim) zum Register (Rim) zu überführen (21);
-- und für das Register (Rim) die der
abzuschließenden Transaktion zugewiesene
Schreibsperre aufzuheben (22);
- Mittel, um eine Nachricht "Transaktion als
beendet angesehen" zu einer Anwendung zu senden
(24), die den Abschluss der Transaktion
angefordert hat;
- Mittel, um in die Tabelle (T) einen Indikator
einzutragen (25), der der Identität der
Transaktion zugewiesen wird und angibt, das diese
als beendet angesehen wird;
- für jedes zweite Register (Rid), das für die
abzuschließende Transaktion eine Schreibsperre
besitzt, Mittel, um:
-- den neuen Wert der Variablen vom zweiten
Journal (Lid) zum zweiten Register (Rid) zu
überführen (27);
-- dann für das erste Register (Rid), die
dieser Transaktion zugewiesene Schreibsperre
aufzuheben (28);
- und Mittel, um die Identität der Transaktion in
der Tabelle (T) zu löschen (30);
und dadurch, dass die Mittel zum Durchführen der
Fehlschlagprozedur (17) für die abzuschließende
Transaktion umfassen:
- Mittel, um den Inhalt jedes ersten Journals (Lim)
zu löschen (61), das den durch die
fehlgeschlagene Transaktion modifizierten Wert
einer Variablen speichert;
- Mittel, um die der fehlgeschlagenen Transaktion
zugewiesenen Sperren für die Schreibabsicht und
die Schreibsperren aufzuheben (62);
- Mittel, um die Identität der abzuschließenden
Transaktion in der Tabelle (T) zu löschen (63);
- Mittel, um eine Nachricht "Transaktion
fehlgeschlagen" zu der Anwendung zu senden (64)
die den Abschluss der Transaktion angefordert
hat;
- Mittel, um den Inhalt jedes zweiten Journals
(Lim) zu löschen (65), das den durch die
fehlgeschlagene Transaktion modifizierten Wert
einer Variablen speichert;
- Mittel, um für zweite Register (Rid) die der
fehlgeschlagenen Transaktion zugewiesenen
Schreibsperren aufzuheben (66);
und dadurch, dass das System außerdem Mittel zur
Wiederherstellung des Inhalts des flüchtigen Speichers
(M) nach einem Ausfall dieses umfasst, wobie diese
Mittel umfassen:
- Mittel, um für jedes zweite Register (Rid) des
nichtflüchtigen Speichers zu prüfen (37, 50, 51)
ob eine Schreibsperre auf diesem Register
weiterbesteht, und:
-- wenn keine Schreibsperre weiterbesteht, dem
ersten Register (Rim), das dem betrachteten
zweiten Register (Rid) entspricht, eine
Schreibsperre zuzuweisen (39), dann den
Inhalt dieses zweiten Registers (Rid) in
dieses erste Register (Rim) zu überführen
(40) und diese Schreibsperre aufzuheben
(41);
-- wenn eine Schreibsperre weiterbesteht, zu
bestimmen (42) ob diese Schreibsperre zu
einer Transaktion gehört, deren Identität
sich in der Tabelle der Transaktionen
befindet; und
--- wenn ja, den Inhalt des zweiten Journals
(Lid) in das zweite Register (Rid) zu
überführen (43), dann die Schreibsperre
aufzuheben (44), dann dem ersten Register
(Rim), das dem betrachteten zweiten Register
entspricht, eine Schreibsperre zuzuweisen
(45), dann den Inhalt dieses zweiten
Registers (Rid) in dieses erste Register
(Rim) zu überführen (46) und diese letztere
Schreibsperre aufzuheben (47);
--- wenn nicht, den Inhalt des zweiten Journals
(Lid) zu löschen (48), dann diese
Schreibsperre aufzuheben (49);
- schließlich alle in der Tabelle (T) Vorhandenen
Transaktionsidentitäten zu löschen (52).
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
FR9413900A FR2727222B1 (fr) | 1994-11-21 | 1994-11-21 | Protocole transactionnel, et systeme pour la mise en oeuvre de ce protocole |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69523015D1 DE69523015D1 (de) | 2001-11-08 |
DE69523015T2 true DE69523015T2 (de) | 2002-05-29 |
Family
ID=9468982
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69523015T Expired - Fee Related DE69523015T2 (de) | 1994-11-21 | 1995-11-17 | Transaktionsprotokoll und Vorrichtung zur Erzeugung dieses Protokolls |
Country Status (7)
Country | Link |
---|---|
US (1) | US5657474A (de) |
EP (1) | EP0713179B1 (de) |
AT (1) | ATE206538T1 (de) |
CA (1) | CA2163293A1 (de) |
DE (1) | DE69523015T2 (de) |
ES (1) | ES2161273T3 (de) |
FR (1) | FR2727222B1 (de) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5909682A (en) * | 1996-12-30 | 1999-06-01 | Mci Worldcom, Inc. | Real-time device data management for managing access to data in a telecommunication system |
FR2762418B1 (fr) * | 1997-04-17 | 1999-06-11 | Alsthom Cge Alcatel | Procede de gestion d'une memoire partagee |
FR2765003B1 (fr) * | 1997-06-19 | 1999-09-24 | Alsthom Cge Alcatel | Procede pour isoler un emplacement de memoire contenant une valeur obsolete |
US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7275246B1 (en) | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US6763452B1 (en) | 1999-01-28 | 2004-07-13 | Ati International Srl | Modifying program execution based on profiling |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US7254806B1 (en) | 1999-08-30 | 2007-08-07 | Ati International Srl | Detecting reordered side-effects |
US6553466B1 (en) * | 1999-10-01 | 2003-04-22 | Infraworks Corporation | Shared memory blocking method and system |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
CA2369621C (en) * | 2002-01-25 | 2009-06-09 | Ibm Canada Limited-Ibm Canada Limitee | Method and apparatus for handling resource transaction requests |
US6925928B2 (en) * | 2003-09-18 | 2005-08-09 | Anthony Fox | Trash compactor for fast food restaurant waste |
US8074030B1 (en) * | 2004-07-20 | 2011-12-06 | Oracle America, Inc. | Using transactional memory with early release to implement non-blocking dynamic-sized data structure |
US7703098B1 (en) | 2004-07-20 | 2010-04-20 | Sun Microsystems, Inc. | Technique to allow a first transaction to wait on condition that affects its working set |
TW201039131A (en) * | 2009-04-24 | 2010-11-01 | Silicon Motion Inc | Apparatus for controlling at least one electronic device and related method thereof |
US9524219B2 (en) * | 2013-09-27 | 2016-12-20 | Intel Corporation | Atomic transactions to non-volatile memory |
US9817693B2 (en) | 2014-03-14 | 2017-11-14 | International Business Machines Corporation | Coherence protocol augmentation to indicate transaction status |
US10459909B2 (en) * | 2016-01-13 | 2019-10-29 | Walmart Apollo, Llc | System for providing a time-limited mutual exclusivity lock and method therefor |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5220657A (en) * | 1987-12-02 | 1993-06-15 | Xerox Corporation | Updating local copy of shared data in a collaborative system |
US5247672A (en) * | 1990-02-15 | 1993-09-21 | International Business Machines Corporation | Transaction processing system and method with reduced locking |
DE69322057T2 (de) * | 1992-10-24 | 1999-06-10 | International Computers Ltd., Putney, London | Verteiltes Datenverarbeitungssystem |
US5596754A (en) * | 1992-10-29 | 1997-01-21 | Digital Equipment Corporation | Method for performing private lock management |
GB2276737A (en) * | 1993-03-30 | 1994-10-05 | Ibm | Fault-tolerant transaction-oriented data processing |
-
1994
- 1994-11-21 FR FR9413900A patent/FR2727222B1/fr not_active Expired - Fee Related
-
1995
- 1995-11-17 DE DE69523015T patent/DE69523015T2/de not_active Expired - Fee Related
- 1995-11-17 EP EP95402590A patent/EP0713179B1/de not_active Expired - Lifetime
- 1995-11-17 ES ES95402590T patent/ES2161273T3/es not_active Expired - Lifetime
- 1995-11-17 AT AT95402590T patent/ATE206538T1/de not_active IP Right Cessation
- 1995-11-20 CA CA002163293A patent/CA2163293A1/fr not_active Abandoned
- 1995-11-20 US US08/560,577 patent/US5657474A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE69523015D1 (de) | 2001-11-08 |
FR2727222A1 (fr) | 1996-05-24 |
ATE206538T1 (de) | 2001-10-15 |
EP0713179A1 (de) | 1996-05-22 |
FR2727222B1 (fr) | 1996-12-27 |
CA2163293A1 (fr) | 1996-05-22 |
ES2161273T3 (es) | 2001-12-01 |
EP0713179B1 (de) | 2001-10-04 |
US5657474A (en) | 1997-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69523015T2 (de) | Transaktionsprotokoll und Vorrichtung zur Erzeugung dieses Protokolls | |
DE69621841T2 (de) | Rechnersicherungssystem mit offenen Dateien | |
DE3854667T2 (de) | Datenbasissystem mit einer Baumstruktur. | |
DE69416591T2 (de) | Dateisicherungssystem | |
DE69119222T2 (de) | Datensicherung und Beseitigung in einem Datenverarbeitungssystem | |
DE68927142T2 (de) | Verriegelungs- und Lese-Minimierung in einem segmentierten Speicherraum | |
DE69802437T2 (de) | Feinkörniger übereinstimmungsmechanismus für optimistische parallelsteuerung mit verriegelungsgruppen | |
DE4216871C2 (de) | Ausführungsordnen zum Sicherstellen der Serialisierbarkeit verteilter Transaktionen | |
DE69427381T2 (de) | Backupsystem und -verfahren für eine Datenbank | |
DE112005002402B4 (de) | Hybride Hardware-/Software-Implementierung eines Transaktionsspeicherzugriffs | |
DE3611223C2 (de) | ||
DE69326186T2 (de) | Verfahren und Vorrichtung um eine verteilte Transaktion in einer verteilten Datenbank auszuführen | |
DE69730449T2 (de) | Erzeugung einer spiegeldatenkopie (bild) unter verwendung von referenzetiketten | |
DE69032685T2 (de) | Verfahren und system mit einem cache für offene dateien in einem netzwerkrechnersystem | |
DE69528339T2 (de) | Applikationspezifische Konfliktlösung für schwachkonsistente replizierte Datenbanken | |
DE69126067T2 (de) | Verfahren und Gerät zur Verwaltung von Zustandsidentifizierern zur effizienten Wiederherstellung | |
DE69322549T2 (de) | Verteilte Transaktionsverarbeitung mit einem Zwei-Phasen-Bindungsprotokoll mit erwarteter Bindung ohne Aufzeichnungspflicht | |
DE69617511T2 (de) | Verfahren und Gerät zum Verwalten von Objekten in einer verteilten Objektbetriebsumgebung | |
DE69617112T2 (de) | Informationsverarbeitungssystem zur Ermöglichen des Zugriffs auf verschiedene Typen von Dateien und Steuerungsverfahren | |
DE4420451A1 (de) | Sperrmechanismus für ein CHECK-IN/CHECK-OUT-Modell | |
DE4033336A1 (de) | Verfahren zum erzeugen einer ausfallmeldung und mechanismus fuer ausfallmeldung | |
DE4210126A1 (de) | Verfahren und system zur dynamischen dateierweiterung fuer online-datenbanksysteme | |
DE69818135T2 (de) | Verfahren zum Zugriff auf Datenbankinformation | |
EP0862123A2 (de) | Verfahren zur Regelung eines Zugriffs von Rechnern auf Daten eines zentralen Rechners | |
DE3439302A1 (de) | Speichersteuerungsvorrichtung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: ALCATEL LUCENT, PARIS, FR |
|
8339 | Ceased/non-payment of the annual fee |