DE69603180T2 - Verfahren und vorrichtung zur freispeicherverwaltung und zum datenstrukturintegritätsschutz in nichtflüchtigen speichern - Google Patents
Verfahren und vorrichtung zur freispeicherverwaltung und zum datenstrukturintegritätsschutz in nichtflüchtigen speichernInfo
- Publication number
- DE69603180T2 DE69603180T2 DE69603180T DE69603180T DE69603180T2 DE 69603180 T2 DE69603180 T2 DE 69603180T2 DE 69603180 T DE69603180 T DE 69603180T DE 69603180 T DE69603180 T DE 69603180T DE 69603180 T2 DE69603180 T2 DE 69603180T2
- Authority
- DE
- Germany
- Prior art keywords
- memory
- block
- list
- allocated
- blocks
- 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
- 238000000034 method Methods 0.000 title claims description 94
- 230000015654 memory Effects 0.000 claims description 450
- 230000008569 process Effects 0.000 claims description 42
- 230000006870 function Effects 0.000 claims description 20
- 230000004044 response Effects 0.000 claims description 18
- 239000003990 capacitor Substances 0.000 claims description 10
- 238000011084 recovery Methods 0.000 claims description 8
- 238000012360 testing method Methods 0.000 claims description 7
- 230000008859 change Effects 0.000 claims description 5
- 238000005192 partition Methods 0.000 claims description 5
- 230000008929 regeneration Effects 0.000 claims 3
- 238000011069 regeneration method Methods 0.000 claims 3
- 230000006386 memory function Effects 0.000 claims 2
- 238000007726 management method Methods 0.000 description 27
- 238000012790 confirmation Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000010420 art technique Methods 0.000 description 1
- 238000003339 best practice Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1441—Resetting or repowering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Storage Device Security (AREA)
Description
- Die Erfindung bezieht sich allgemein auf ein Verfahren und eine Vorrichtung, die zur Durchführung der Freispeicherverwaltung in einem nicht-flüchtigen Speicher verwendet werden, worunter verstanden werden soll, daß nach Anforderung eines Benutzers Speicherblocks zugewiesen und/oder freigegeben werden, in einer Art und Weise, die die Integrität der in dem Speicher gespeicherten Datenstruktur der Freispeicherverwaltung schützt.
- Insbesondere betrifft die Erfindung ein Verfahren und eine Vorrichtung zur Durchführung der Freispeicherverwaltung in programmierbaren Aufzeichnungsgeräten zur Aufzeichnung von Prozeßdaten; und zum Schutz der Datenstrukturintegrität in einem nicht-flüchtigen Speicher, der in solchen Geräten enthalten ist, in dem Fall, in dem ein Stromfehler oder Stromausfall stattfindet, während die Freispeicherverwaltungs-Betriebsarten in der Ausführung sind. Weiterhin werden im Sinne der Erfindung Verfahren und Vorrichtungen bereitgestellt zur (a) Validierung der Integrität der zuvor erwähnten Datenstrukturen, schnell nach einem Einschalten der Aufzeichnungsgeräte; (b) Beendigung gewisser vorbestimmter Verfahren, die beim Eintritt eines Spannungsausfalls durchgeführt wurden, zu einer Zeit, zu der das Aufzeichnungsgerät wieder mit Strom versorgt wird; (c) Ermitteln jedes einem Benutzer vor dem Eintritt eines Stromfehlers oder Stromausfalls zugeordneten Speichers; und (d) für den Benutzer sicherstellen, daß dann, wenn eine Stromversorgung für das System wieder hergestellt ist, nur solche Pointer von zuvor zugeordneten Datenblocks in Antwort auf Anfragen von Benutzern im Hinblick auf solche Pointer bereitgestellt werden, die gültige Daten aufweisen.
- Verfahren und Vorrichtungen zur Freispeicherverwaltung sind gut bekannt, z. B. bei flüchtigen Random Access Speichern (VRAM). So sind z. B. den hier angesprochenen Fachleuten käuflich verfügbare, Standard-C-Malloc (Speicherzuordnung) und freie (Speicherfreigabe) Hilfsmittel bekannt, die zur VRAM-Freispeicherverwaltung verwendet werden.
- Insbesondere kann Freispeicherverwaltung für VRAM durch den Benutzer durch Aufrechterhalten von zwei Listen durchgeführt werden. Eine Liste ist eine Liste für alle Speicherblocks, die nicht benutzt werden, die häufig auch als "freie Liste" der Speicherblocks bezeichnet wird; eine zweite Liste, die eine Liste für alle Speicherblocks ist, die in Benutzung sind, wird häufig als "genutzte" oder "zugewiesene" Liste der Speicherblocks bezeichnet.
- Verfahren zum VRAM-Listenmanagement, die Prozeduren zum Hinzufügen und Entfernen von Speicherblocks zu den zuvor erwähnten Listen; Prozeduren zum effizienten Lokalisieren von zur Zuordnung geeigneten Speicherblocks; Prozeduren zum Aufteilen oder Verbinden von Blocks zur Vergrößerung der Zuordnungsmöglichkeiten und zur Vereinfachung der effizienten Verwendung der Speicherresourcen usw.; aufweisen, sind im Stand der Technik gut bekannt.
- Im Zusammenhang mit einem VRAM wird, falls das Aufzeichnungsgerät zufällig oder infolge eines Stromversorgungsfehlers ausgeschaltet wird, kein Speicher gestützt, ohne daß eine alternative Versorgungsquelle existiert. Unter der Annahme, daß keine alternative Versorgungsquelle existiert, ist der gesamte Freispeicher verfügbar (verfügbar, um diesen wiederum zuzuordnen), falls die Maschine wieder mit Spannung versorgt wird. In diesem Zusammenhang gibt es keine Notwendigkeit, sich über Veränderungen der Datenstruktur zu sorgen oder zuvor zugeordneten Speicher bei erneuter Stromversorgung zu bestimmen.
- In Anwendungen, in denen es wichtig ist, die Integrität der Datenstrukturen in der Freispeicherverwaltung, oder andere in einem Speicher gespeicherte Daten sicherzustellen, umfassen hinreichend bekannte Lösungswege zur Erreichung dieses Ziels die Verwendung einer nicht-unterbrechbaren Spannungsversorgungsquelle, um sicherzustellen, daß dem Aufzeichnungsgerät selbst zu jeder Zeit Spannung zur Verfügung gestellt wird; und/oder die Verwendung einer Art von "nicht-flüchtigem" oder "festem" Speicher in einem solchen Gerät, z. B. die Verwendung eines Speichers, der die Datenstruktur und die darin gespeicherten Daten für wenigstens eine vorbestimmte Zeitdauer sichert.
- Beispiele von nicht-flüchtigen (festen) Speichern umfassen kondensatorgestütze Random- Access-Speicher (RAM), die darin gespeicherte Daten über einen Zeitrahmen speichern, während dessen sich der Kondensator entlädt (und hierbei Spannung dem Speicher bereitstellt); ebenso wie batteriegestütze RAM, usw.
- Für diese Arten von Aufzeichnungsgeräten (solche, die eine Art von nicht-flüchtigem Speicher zur Speicherung der Freispeicherverwaltung-Datenstrukturintegrität und Verfahrensdaten aufweisen) sind die Speicherzuordnungen und Speicherfreigaben nach dem Stand der Technik problematisch, da: (a) dann, wenn die Leistungsversorgung während dem Entfernen oder dem Hinzufügen eines Eintrags in eine Liste stattfindet, Teile der Liste verloren gehen können oder die Listen untereinander verknüpft werden können, abhängig davon, welche Listen-Management-Technik verwendet wird; (b) dann, wenn die Spannungsversorgung während dem Auftrennen oder dem Verbinden von Blocks abfällt, die Blockgröße falsch sein kann; und (c) es keinen Weg gibt, einen Speicher, der vor dem Spannungsabfall zugeordnet wurde, dem Benutzer wieder zuzuführen und zur gleichen Zeit die Integrität des zuvor zugeordneten Speichers sicherzustellen, nachdem sich ein Spannungsabfall oder Reset ereignet hat.
- Eine andere Technik nach dem Stand der Technik zur Sicherung der Integrität von Datenstrukturen und der in einem nicht-flüchtigen Speicher gespeicherten Daten, während die zuvor erwähnten Probleme, die beim Aufteilen und Zusammenfügen von Speicherblocks entstehen, vermieden werden, liegt in der Verwendung von Speicherblocks, die eine feste, zuvor zugeordnete Größe zur Speicherung von Daten aufweisen. Diese Technik verschwendet oft den begrenzten, nicht-flüchtigen Speicher, obwohl einige der zuvor erwähnten Probleme behoben werden können.
- Die vorliegende Erfindung stellt ein Verfahren bereit, wie dieses im Patentanspruch 1 definiert ist.
- Die vorliegende Erfindung kann auch den Schritt des Freigebens eines in der Liste der zugewiesenen Speicherblocks enthaltenen Speichersblocks umfassen, in Antwort auf eine Benutzeranfrage hinsichtlich einer Speicherfreigabe, unter ausschließlicher Verwendung atomischer Befehle zur Veränderung der Speicherkopfadresse und des zugewiesenen Kopfadressen-Speicherblocks.
- Nach einem weiteren bevorzugten Gesichtspunkt der Erfindung wird ein Zustandsanzeiger in der zuvor erwähnten Speicher-Kopfadresse aufrechterhalten, der durch einen atomischen Befehl verändert werden kann. Zu jeder Zeit, zu der eine Liste verändert wird oder ein Kopfadressen-Speicherblock verändert wird (aufgeteilt oder zusammengefaßt), wird der Zustand gesetzt, um anzuzeigen, was vor sich geht.
- Falls die Leistung nach unten geht, während ein Freispeicher-Verwaltungsbetrieb durchgeführt wird, und danach die Leistung zurückkommt, wird der Zustand benutzt, um die Funktion zu bestimmen, die zuletzt ausgeführt wurde, um einen Indikator dahingehend bereitzustellen, ob die Datenstrukturen des nicht-flüchtigen Speichers, die die Freispeicherverwaltung unterstützen, "stabil" sind oder nicht. Falls sie "instabil" sind, kann die Stabilität durch Vollendung gewisser vorbestimmter Prozesse, die beim Auftreten des Spannungsausfalls in Bearbeitung waren, erzielt werden, nämlich zu der Zeit, zu der das Aufzeichnungsgerät wieder mit Spannung versorgt wird. Datenstrukturen des nicht- flüchtigen Speichers können dann durch Verwendung anderer Eintragungen in der Speicherkopfadresse (was später in größerem Detail beschrieben werden wird) wiedergewonnen werden.
- Im Hinblick auf die Beendigung von Funktionen, die im Hinblick auf z. B. eine Wiederherstellung nach einem Spannungsverlust in Bearbeitung waren, werden die Freispeicherverwaltungs-Techniken im Sinne des bevorzugten Ausführungsbeispiels der Erfindung, Blocks niemals in die Liste der verwendeten Blocks einordnen (Liste der zugewiesenen Speicherblocks). Falls die Versorgung während des Versuchs der Zuweisung eines Speicherblocks abfällt, ist bekannt, daß dem Benutzer dieser Speicher niemals zugewiesen wurde. Falls jedoch die Spannung während des Versuchs der Freigabe eines Speicherblocks abfällt, wird das durch die Erfindung bereitgestellte Verfahren dort weitermachen, wo aufgehört wurde (z. B. beim Versuch, freie Speicherblocks zusammenzulegen, usw.), und den angemessenen Speicherblock in die freie Liste legen.
- Nach einem weiteren bevorzugten Aspekt der Erfindung ist die Reihenfolge, in welcher Datenstrukturen manipuliert werden, wichtig, so daß zu jedem Zeitpunkt ein Pointer auf alle Speicherblocks vorhanden ist.
- Nach einem weiteren bevorzugten Aspekt der vorliegenden Erfindung werden zur Vermeidung von Kreuzverbindungs-Listen in einer vorbestimmten Reihenfolge folgende Schritte ausgeführt: (a) Einträge werden immer komplett aus einer Liste entfernt, bevor sie einer anderen Liste hinzugefügt werden; (b) das Entfernen eines Eintrags aus einer Liste wird immer durch Verwendung eines atomischen Befehls ausgeführt; und (c) Hinzufügen eines Eintrags in eine Liste wird durch Ausführung zwei atomischer Befehle (die nachfolgend in großerem Detail beschrieben werden) ausgeführt.
- Zur Vermeidung, daß nach dem Auftreten eines Spannungsverlusts oder eines Resets falsche Blockgrößen vorhanden sind, wird bei einem bevorzugten Ausführungsbeispiel der Erfindung ein "Zerteilungs-Pointer" aufgerufen, um auf einen Block zu zeigen, der zusammengefügt wird, oder um auf den Ort in einem Block zu zeigen, in dem eine Teilung stattfinden wird. Ein "Arbeits-Pointer" wird bereits auf einen anderen Block zeigen, der verbunden werden wird, oder auf einen zu teilenden Block. Diese beiden Pointer können, wie nachfolgend gezeigt werden wird, zusammen verwendet werden, um zu bestimmen, ob die Kopfgröße in einem Block richtig ist.
- Ein anderer bevorzugter Aspekt der vorliegenden Erfindung betrifft das Problem, daß nur gültig zugewiesener Speicher einem Benutzer während dem Wiederanlegen von Versorgungsspannung zurückgeführt werden dort, durch Hinzufügen einer einzigartigen Benutzer-ID auf jeden Block des Speichers; und daß nur solche Speicherblocks, die zuvor durch einen Benutzer "gesperrt" wurden, wieder in die Liste der zugewiesenen Speicherblocks zurückgeführt werden (um die Gültigkeit eines Blocks anzuerkennen). Wenn das Aufzeichnungsgerät wieder mit Spannung versorgt wird, wird dieses nach einem bevorzugten Ausführungsbeispiel der Erfindung alle unerkannten ("ungesperrten") Speicherblocks aus der Liste der benutzten Blocks entfernen und diese zurück in die Liste der freien Blocks legen.
- Die Erfindung stellt auch eine Vorrichtung bereit, wie diese in Patentanspruch 14 definiert ist.
- Fig. 1 stellt exemplarisch ein programmierbares Prozeßdaten-Aufzeichnungsgerät nach einem Aspekt der Erfindung dar, welches einen nicht-flüchtigen Speicher in Form eines kondensator-gestützten RAM enthält, um wenigstens temporär Prozeßdaten zu speichern, die durch das Gerät aufgezeichnet wurden.
- Fig. 2 stellt die Form und den Inhalt einer exemplarischen Speicher-Kopfadressen- Datenstruktur dar, nämlich im Sinne nach einem bevorzugten Ausführungsbeispiel der Erfindung, geeignet zur Verwendung bei der Ausführung einer Freispeicherverwaltung eines Run-Time nicht-flüchtigen Speichers und der einem Spannungsabfall oder Reset folgenden Datenstruktur- Wiederherstellung.
- Fig. 3 zeigt den Form und den Inhalt einer exemplarischen zugewiesenen Speicherblock-Kopfadresse, nämlich nach einem bevorzugten Ausführungsbeispiel der Erfindung, die in Verbindung mit der in Fig. 2 dargestellten Speicher-Kopfadresse (jedoch auf einer pro Block-Basis) verwendet werden kann, nämlich bei der Ausführung einer Freispeicherverwaltung eines nicht-flüchtigen Speichers und einer einem Spannungsabfall oder Reset folgenden Datenstruktur-Wiederherstellung.
- Fig. 4 stellt in Übereinstimmung mit der Lehre nach einem Ausführungsbeispiel der Erfindung einen illustrativen Satz von Verfahrensschritten dar, zur Initialisierung eines nicht-flüchtigen Speichers, der in einem programmierbaren Aufzeichnungsgerät enthalten ist, wie z. B. das in Fig. 1 dargestellte, beispielhafte Aufzeichnungsgerät, immer dann, wenn das Aufzeichnungsgerät hochgefahren wird.
- Fig. 5 stellt in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung einen illustrativen Satz von Verfahrensschritten zur Zuweisung von Speicher dar, nämlich aus einem der Speicherblocks, die in der Liste der freien Speicherblocks enthalten sind, und zwar in Antwort auf eine Benutzeranfrage im Hinblick auf eine Speicherzuweisung, wobei nur atomische Befehle zur Modifizierung der examplarischen, in Fig. 2 dargestellten Speicher- Kopfadresse und der in Fig. 3 dargestellten, exemplarischen zugeordneten Speicherblock-Kopfadresse verwendet werden.
- Fig. 6 stellt in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung einen illustrativen Satz von Verfahrensschritten zum Freigeben eines Speicherblocks dar, der in der Liste der zugewiesenen Speicherblocks enthalten ist, nämlich in Antwort auf eine Benutzeranfrage zum Freigeben von Speicher, wobei nur atomische Befehle verwendet werden, um die in Fig. 2 dargestellte, exemplarische Speicher-Kopfadresse und die in Fig. 3 dargestellte, exemplarische Speicherblock-Kopfadresse zu verändern.
- Fig. 7 stellt in Übereinstimmung mit der Lehre eines bevorzugten Ausführungsbeispiels einen illustrativen Satz von Verfahrensschritten dar, um einen zugewiesenen Speicherblock in eine Liste von zugewiesenen Speicherblocks einzuschließen, und zwar in Antwort auf die Anfrage eines Benutzers diesen Block einzuschließen.
- Fig. 8 stellt in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der vorliegenden Erfindung einen illustrativen Satz von Verfahrensschritten bereit, zur Bereitstellung eines Pointers auf einen einem Benutzer zugewiesenen Speicherblock, in Antwort auf die Anfrage eines Benutzers im Hinblick auf einen solchen Pointer, und zwar nur dann, wenn der Speicherblock gültige Daten enthält.
- Fig. 9 stellt in Übereinstimmung mit der Lehre der Erfindung einen exemplarischen Satz von Schritten dar, zum Entfernen eines Eintrags aus einer Liste und zum Einfügen desselben in eine andere Liste, in einer Art und Weise, die kreuzverweisende Listen vermeidet.
- Fig. 10 stellt in Übereinstimmung mit der Lehre der Erfindung einen exemplarischen Satz von Schritten dar, die verdeutlichen, wie ein Zerteilungs-Pointer verwendet werden kann, um einen Speicherblock zu zerteilen, in einer Art und Weise, die die Integrität der Datenstruktur sichert.
- Bevor die Details der Vorrichtung und der Verfahrensschritte nach der vorliegenden Erfindung beschrieben werden, soll erwähnt werden, daß bestimmte Anforderungen und Annahmen im Hinblick auf die Betriebsumgebung, in welcher die Erfindung angewendet werden kann, gemacht wurden. Die gemachten Annahmen wurden aus dem Grund vorgenommen, um eine einheitliche Darstellung der Prinzipien der Erfindung zu ermöglichen, und sie sollen den Umfang der in den Patentansprüchen definierten Erfindung nicht beschränken.
- Die Aufzeichnungsgeräte, in denen die Erfindung ausgeführt werden soll, sollen als "programmierbare" Einrichtungen ausgebildet sein; das bedeutet, daß die Einrichtungen mit Zugriff auf (und Ausführung von) Programme ausgestattet sind, die verschiedene, nachfolgend beschriebene Prozesse implementieren, um die Freispeicherverwaltung auszuführen, und um die Integrität der Datenstrukturen zu schützen, die in einem nicht- flüchtigen Speicher erzeugt und gespeichert sind, der in dem Gerät enthalten ist.
- Spezielle Beispiele von kommerziell verfügbaren Aufzeichnungsgeräten von einem für die Erfindung geeigneten Typ (die zur Aufzeichnung von Prozeßdaten verwendet werden) sind Bild-Aufzeichnungsgeräte auf Mikroprozessorbasis sowie Kontroller, die von der Leeds & Northrup Company verfügbar sind.
- Die hier angesprochenen, einschlägigen Fachleute werden im Stande sein, das hier beschriebene Verfahren in Form von geeigneten Programmen zur Ausführung auf einem Mikrocomputer zu implementieren, nachdem sie die nachfolgende Beschreibung unter Bezugnahme auf die unterschiedlichen Flußdiagramme, die in der Zeichnung dargestellt werden, durchgesehen haben.
- Weiterhin wird zur Ausübung des bevorzugten Ausführungsbeispiels der vorliegenden Erfindung angenommen, daß:
- (1) Alle Einträge in jede der hier definierten Datenstrukturen nur durch Verwendung eines einzigen Zusammenstellungs-Befehls (diese müssen atomische Befehle sein) verändert werden.
- (2) Es einen Mechanismus geben muß, der die Aufzeichnungseinheit vom Beginn der Ausführung eines Befehls abhält, falls die Stromversorgung beginnt sich abzubauen. Dies kann z. B. dadurch verwirklicht werden, indem ein Interrupt dann abgeschickt wird, falls die Spannung beginnt sich abzubauen, durch Überwachung einer nicht- überdeckbaren Interrupt-Leitung und durch Nicht-Bedienung des Interrupts bis der letzte durch das Instrument ausgeführte Befehl vollendet ist (unter der Annahme, daß genug Zeit zur Beendigung des letzten Befehls zur Verfügung steht, und zwar vom Abschicken des Interrupts bis zu der Zeit, zu der die Spannung zu gering wird, um den Prozessorbetrieb aufrechtzuerhalten).
- (3) Ein externer Timer existieren muß, der die Zeit auch dann hält, falls das Aufzeichnungsgerät spannungslos ist.
- Gemäß dem nachfolgend beschriebenen Ausführungsbeispiel der Erfindung, welches in Fig. 1 dargestellt ist, wird ein kondensator-gestützter RAM für die Zwecke zur Beschreibung der Erfindung benutzt, wobei der Kondensator sicherstellt, daß dann, falls die externe Versorgung des Aufzeichnungsgeräts unterbrochen wird, der RAM-Inhalt für die Zeitdauer der Entladung des Kondensators aufrechterhalten wird (im Beispiel des kondensator-gestützten RAM, z. B. für eine Zeitdauer von 90 Minuten in einem Ausführungsbeispiel der Erfindung). Es soll nochmal wiederholt werden, daß es für den im Aufzeichnungsgerät vorliegenden RAM nicht unbedingt erforderlich ist, daß dieser kondensator-gestützt ist (er kann z. B. auch batterie-gestützt sein).
- Letztendlich soll angemerkt werden, bevor auf Fig. 1 Bezug genommen wird, daß in dem Zusammenhang, in dem die Erfindung dargestellt wird:
- (1) Die Freispeicherverwaltung den Zweck der Zuweisung und des Freigebens von Speicherblöcken in Antwort auf eine Benutzeranfrage hat. Diesbezüglich werden zwei Listen verwaltet. Eine erste Liste ist eine Liste aller der Blocks des Speichers, die nicht in Benutzung sind und daher als freie Liste bezeichnet wird. Die andere Liste ist eine Liste der Speicherblocks, die gerade in Benutzung sind, und die daher als benutzte Liste bezeichnet wird.
- (2) Daß angenommen wird, daß die freie Liste eine sortierte Liste ist, und zwar derart organisiert, daß sie nach der Größe der freien Blocks sortiert ist. Daß der größte Block der erste Eintrag in dieser Liste ist. Daß die benutzte Liste nicht sortiert ist. Daß alle neuen Einträge in die Liste an dem Anfang der Liste plaziert werden.
- (3) Es wird angenommen, daß dann, falls ein Benutzer Speicher anfordert, die Freispeicherverwaltung gemäß der Erfindung die freie Liste durchsucht, um festzustellen, ob ein Block von freiem Speicher existiert, der exakt dieselbe Größe aufweist, wie der Speicher, der angefordert wurde. Falls ein exakter Treffer gefunden wird, dieser Speicherblock ausgewählt wird. Falls kein exakter Treffer gefunden wird, der größte Block in zwei Blocks aufgeteilt wird, wobei einer die exakte Größe des angeforderten Speichers aufweist, und der übrig bleibende Speicher den anderen ausmacht. Der übrig bleibende Speicherblock gemäß seiner Größe in die freie Liste plaziert wird, und der neue Block von exakter Größe nun ausgewählt wird. Der ausgewählte Block aus der Liste der freien Blocks entfernt wird und in die Liste der benutzten Blocks hinzugefügt wird. Ein Pointer auf den Speicher dem Benutzer zurückgeführt wird (direkt nach der zugeordneten Speicherblock-Kopfadresse angeordnet, was im Zusammenhang mit Fig. 3 in größerem Detail beschrieben werden wird).
- (4) Zum Freigeben eines Speichers der Block aus der Liste der verwendeten Blocks entfernt wird und in die freie Liste hinzugefügt wird. Bei der Hinzufügung in die freie Liste zuerst nachgeprüft wird, ob es freie Speicherblocks auf der einen oder anderen Seite des freizugebenden Speicherblocks gibt. Falls dies der Fall ist, diese Blocks mit dem zu befreienden Speicherblock vereinigt werden, alle zu vereinigenden Blocks temporär aus der freien Liste entfernt werden. Der freizugebende Block (umfassend jeden zusammengefügten Speicher) dann in die freie Liste hinzugefügt wird, abhängig von der Größe des Blocks.
- Es soll nun auf Fig. 1 Bezug genommen werden, wobei Fig. 1 ein beispielhaftes programmierbares Prozeßdaten-Aufzeichnungsgerät 100 zeigt, welches einem Aspekt der Erfindung Rechnung trägt, und welches einen nicht-flüchtigen Speicher 101 aufweist, in Form eines kondensatorgestützten RAM, um wenigstens temporär Prozeßdaten zu speichern, die durch das Gerät 100 aufgezeichnet werden.
- Insbesondere umfaßt das in Fig. 1 dargestellte, beispielhafte programmierbare Prozeßdaten-Aufzeichnungsgerät 100: (a) Programmierbare Daten- Bearbeitungseinrichtungen 102 (als Mikroprozessor dargestellt), die (gemäß einem bevorzugten Ausführungsbeispiel der Erfindung) Zugriff auf Programmbausteine aufweisen, die unterschiedliche Verfahren implementieren, welche zur Durchführung der Freispeicherverwaltung und zum Schutz der Integrität der Datenstrukturen, die im nicht- flüchtigen Speicher 101 erzeugt und gespeichert sind, notwendig sind. Der nicht-flüchtige Speicher 101 ist, wie in Fig. 1 dargestellt, an die programmierbaren Daten- Bearbeitungseinrichtungen 102 angekoppelt, nämlich über die Verbindung 150, und er kann verwendet werden, um wenigstens temporär unbearbeitete Prozeßdaten zu speichern, die vom Gerät 100 empfangen und/oder abgeleitet werden.
- Nach der Erfindung umfaßt der nicht-flüchtige Speicher 101 zwei wichtige Datenstrukturen für die Zwecke der Freispeicherverwaltung. Erstens eine Speicher- Kopfadresse-Datenstruktur (die nachfolgend in Verbindung mit Fig. 2 in größerem Detail beschrieben wird), zur Verwaltung der Laufzeit des Aufzeichnungsbetriebs und zur Unterstützung der Wiedergewinnung jeglicher Datenstrukturen, die verändert werden, wenn oder falls die Stromversorgung zum Gerät 100 verloren geht; und zweitens eine zugewiesene Speicherblock-Kopfadresse, die in dem zugewiesenen Speicherblock gespeichert ist (was in Verbindung mit Fig. 3 in größerem Detail beschrieben), die zur Bestimmung der Blockeigenschaften verwendet wird, umfassend einen Indikator zur Anzeige, falls ein gegebener Speicherblock in die Liste der zugewiesenen Speicherblocks eingeschlossen wurde, ebenso wie einen Block-Zuweisungs-Indikator und einen Pointer auf den nächsten zugewiesenen Speicherblock, falls einer vorliegt.
- Wie bereits zuvor erwähnt wurde und wie nachfolgend in größerem Detail erklärt werden wird, kann der Inhalt der Speicher-Kopfadressen-Datenstruktur und der zugewiesenen Speicherblock-Kopfadresse nur durch Verwendung atomischer Befehle verändert werden.
- Die zuvor erwähnten Programmfunktionen nach dem bevorzugten Ausführungsbeispiel der vorliegenden Erfindung sind vorzugsweise, jedoch nicht notwendigerweise, über Software implementiert, die durch die Daten-Bearbeitungseinrichtungen 102 ausgeführt werden kann. Wenn diese den Daten-Bearbeitungseinrichtungen 102 zur Verfügung gestellt werden und durch diese ausgeführt werden (im Zusammenhang mit einem programmierbaren Aufzeichnungsgerät wie das Gerät 100), wird das Gerät 100 in eine Vorrichtung gemäß der vorliegenden Erfindung überführt.
- Jede der nachfolgenden Programmfunktionen sind spezifische Implementierungen der nachfolgenden allgemeinen Funktionen, die durch die hier angesprochenen Fachleute unter Bezugnahme auf die Flußdiagramme gemäß Fig. 4 bis 8 bereits implementiert werden können, und die nachfolgende Beschreibung mit Bezug auf diese Figuren: (1) Mittel zum Initialisieren eines nicht-flüchtigen Speichers, der wenigstens zur temporären Speicherung von Prozeßdaten verwendet wird; (2) Mittel zum Zuweisen von Speicherblocks auf eine Anfrage; (3) Mittel zum Freigeber von Speicher auf eine Anfrage; (4) Mittel zum Einschließen von Datenblocks in zugewiesenen Speicher auf eine Anfrage; und (5) Mittel zum Erhalten und Rückführen von Pointern auf zuvor eingeschlossene zugewiesene Speicherblocks auf Anfrage im Anschluß an eine Wiederherstellung der Stromversorgung für das Aufzeichnungsgerät. Diese unterschiedlichen Einrichtungen sind zusammengenommen geeignet, um die vorstehenden Ziele der Erfindung zu erfüllen; und unterschiedliche Ausführungsbeispiele als Aspekte hiervon, wie zuvor unter der Zusammenfassung der Erfindung beschrieben.
- Die Datenbank, auf der die bevorzugten Programmfunktionen arbeiten, umfaßt die zuvor erwähnte Speicher-Kopfadressen-Datenstruktur und zugewiesene Speicherblock- Kopfadressen, welche nachfolgend in Verbindung mit Fig. 2 und Fig. 3 beschrieben werden.
- Es soll nun auf Fig. 2 Bezug genommen werden, die, wie zuvor angedeutet, den Form und den Inhalt einer beispielhaften Speicher-Kopfadressen-Datenstruktur 200 zeigt, gemäß einem bevorzugten Ausführungsbeispiel der Erfindung, die verwendet werden kann, zur Durchführung der Freispeicherverwaltung eines Run-Time nicht-flüchtigen Speichers und zur Wiederherstellung der Datenstruktur folgend auf einen Spannungsabfall oder Reset.
- Insbesondere zeigt Fig. 2 die bevorzugte Speicher-Kopfadresse 200, umfassend die folgenden Einträge, die bei dem erfindungsgemäßen Verfahren in der nachfolgend beschriebenen Art und Weise verwendet werden:
- (a) Ein Initialisierungs-(Init)-Anzeiger 201 kann benutzt werden, um zu bestimmen, falls ein nicht-flüchtiger Speicher initialisiert wurde. Falls ein Wert (z. B. ein vorbestimmter Initialisierungscode) nicht Teil dieser Speicher-Kopfadresse ist, wenn der nicht- flüchtige Speicher initialisiert wird, so wird angenommen, daß nach einem Ausführungsbeispiel der Erfindung der gesamte Speicher in die zuvor erwähnte freie Liste zurückgeführt werden muß.
- (b) Eine Zeitmarke 202, ein Speicherort, der in festen Intervallen fortgeschrieben wird, wobei die Zeitmarke, die optional ist, zur Bestimmung benutzt wird oder benutzt werden kann, wie lange die Leistung während eines Leistungsausfalls abgeschaltet war, wenn das Gerät neu gebootet wird. Die hier angesprochenen Fachleute werden bereits erkennen, daß in Fällen, in denen der nicht-flüchtige Speicher ein Fenster innerhalb des gestützten Speichers aufweist (so z. B. wenn ein Kondensator zur Stützung des Speichers verwendet wird), der Eintrag der Zeitmarke in die Speicher- Kopfadresse eingefügt werden sollte, um zu bestimmen, ob gültige Daten im gestützten Speicher übrig geblieben sind, wenn die Leistung dem Gerät wieder zugeführt wird. Im Gegensatz muß dieser Eintrag nicht notwendig sein, falls z. B. ein batteriegestützter RAM im nicht-flüchtigen Speicher verwendet wird. Falls der Init- Anzeiger 201 gültig ist, gemäß einem Ausführungsbeispiel der Erfindung, kann angenommen werden, daß die Zeit in der Zeitmarke 202 eine gültige Zeit für die Leistungsversorgung ist. Gemäß einem bevorzugten Ausführungsbeispiel der Erfindung muß die Zeit in die Zeitmarke 202 zu festen Intervallen geschrieben werden. Die Länge der Intervalle hängt davon ab, wie genau die Zeitdifferenz- Berechnungen sein müssen, die zur Bestimmung verwendet werden, um zu bestimmen, wie lang die Einheit ohne Leistung war (wie das Auffinden der Differenz zwischen der Zeit in der Zeitmarke 202 und der Zeit, zu der die Leistung am Gerät wieder anlag).
- (c) Ein aktueller Arbeits-Pointer 203, der auf einen Speicherblock zeigt, der zugewiesen oder frei ist. Dieser Pointer wird einen Block bestimmen, der beim Abfallen der Spannung verändert wurde.
- (d) Ein aktueller Zerteilungs-Pointer 204 zeigt auf einen Speicherblock, der von einem größeren Speicherblock abgetrennt wird, oder der mit einem anderen Speicherblock verbunden werden wird. Insbesondere zeigt der aktuelle Zerteilungs-Pointer 204 auf einen Speicherblock, der von einem Speicherblock abgetrennt werden soll, auf den ein aktueller Arbeits-Pointer 203 während der Speicherzuweisung zeigt. Er kann auch auf einen Speicherblock zeigen, der mit einem Speicherblock kombiniert wird, auf den ein aktueller Arbeits-Pointer 203 während einer Freigabe zeigt.
- (e) Ein Pointer 205 für die verwendete Liste, der auf den ersten Eintrag in die Liste der Speicherblocks zeigt, die in Benutzung sind. Die Liste, auf die gezeigt wird, ist die zuvor erwähnte Liste der zugewiesenen Speicherblocks im nicht-flüchtigen Speicher.
- (f) Ein Pointer 206 auf die freie Liste, der auf den ersten Eintrag in der Liste der Speicherblocks zeigt, die nicht verwendet werden (freie Speicherblocks in der zuvor erwähnten freien Liste) im nicht-flüchtigen Speicher.
- (g) Ein Zustandsanzeiger 207 ist ein Wert eines vorbestimmten Wertesatzes, der zur Bestimmung der Stabilität des nicht-flüchtigen Speichers nach einer Wiederherstellung nach einem Spannungsverlust verwendet wird, und zur Bestimmung der letzten durchgeführten Operation im Freispeicherverwaltungs- Verfahren, bevor die Spannung verloren ging, wie dies nachfolgend in größerem Detail beschrieben werden wird.
- Es soll nun auf Fig. 3 Bezug genommen werden, die - wie bereits angedeutet - die Form und den Inhalt eines exemplarischen zugewiesenen Kopf-Speicherblocks 300 zeigt, nach einem bevorzugten Ausführungsbeispiel der Erfindung, der in Verbindung mit dem in Fig. 2 dargestellten Speicherkopf 200 verwendet werden kann (jedoch auf einer Pro- Block-Basis für jeden zugewiesenen Block), nämlich bei der Ausführung der Freispeicherverwaltung eines nicht-flüchtigen Speichers und der Wiederherstellung der Datenstruktur folgend auf einen Leistungsverlust oder Reset. Wie bereits oben angedeutet wurde, beschreiben die Eintragungen in einen zugewiesenen Kopf-Speicherblock 300 Eigenschaften über den Block, den Benutzer und einen Pointer auf den nächsten zugewiesenen Block, falls einer vorliegt.
- Insbesondere zeigt Fig. 3 eine bevorzugte zugewiesene Speicherblock-Kopfadresse 300, die die folgenden Einträge aufweist, die bei dem Verfahren der vorliegenden Erfindung Verwendung finden, nämlich in der nachfolgend beschriebenen Art und Weise:
- (a) ID 301 ist ein einzigartiger Identifizierer, der durch den Benutzer eines jeden Blocks definiert wird. Gemäß einem Ausführungsbeispiel der Erfindung wird a 301 durch den Benutzer spezifiziert, wenn der Block zugewiesen wird. Weiterhin müssen nach dem dargestellten Ausführungsbeispiel der Erfindung alle Benutzer des nicht- flüchtigen Speichers dahingehend übereinstimmen, unterschiedliche Identifizierer zu benutzen.
- (b) Die Blockgröße 302 ist ein Wert, der die aktuelle Größe des Speicherblocks anzeigt, der zugewiesen wurde, jedoch nicht die Kopfadresse umfaßt. Gemäß dem dargestellten Ausführungsbeispiel der Erfindung ist dies ein Vielfaches der minimalen Blockgröße, die benutzt wird, um die Fragmentierung der zugewiesenen Speicher zu steuern.
- (c) Der Pointer auf den nächsten Block 303 ist ein Eintrag, der auf den nächsten Block in der Liste zeigt. Falls der Eintrag sich in der benutzten Liste befindet, zeigt er auf den nächsten Block, der in Benutzung ist. Falls der Eintrag in der freien Liste vorliegt, zeigt er auf den nächsten freien Block.
- (d) Die Bestätigungsmarke 304 ist ein Eintrag, der nach dem bevorzugten Ausführungsbeispiel der Erfindung verwendet wird, um einen Speicherblock in die verwendete Liste einzuschließen. Falls ein Block zuerst einem Benutzer zugewiesen wird, ist der Inhalt dieses Speicherblocks nicht definiert. Falls dem Benutzer ein Block gegeben wird, muß dieser den Speicher mit bekannten Werten auffüllen, und kann dann den in Verbindung mit Fig. 7 beschriebenen Prozeß aufrufen, um den Eintrag der Bestätigungsmarke 304 mit einem Wert zu füllen, der anzeigt, daß dieser bestätigt wurde. Dieser Mechanismus erlaubt es dem im Zusammenhang mit Fig. 8 beschriebenen Prozeß, Pointer Benutzern zurückzuführen, nachdem Spannung vorliegt, und zwar mit einiger Sicherheit, daß die zurückgeführten Pointer auf gültige Daten zeigen.
- (e) Die Größeneinstellung 305 ist ein Wert, der die Differenz zwischen einer aktuellen Blockgröße und dem Speicherbetrag anzeigt, der von einem Benutzer angefordert wird. Der Eintrag ist gemäß einem Ausführungsbeispiel der Erfindung dann in Benutzung, wenn ein Pointer nach einer Wiederherstellung der Leistung einem Benutzer zurückgeführt wird. Diese Zahl, die nach Subtraktion von der aktuellen Blockgröße die Größe des Blocks erzeugen wird, die der Benutzer wirklich anfordert, und dieses Ergebnis werden gemäß dem dargestellten Ausführungsbeispiel der Erfindung zusammen mit dem Pointer dem Benutzer zurückgeführt.
- (f) Der Speicher 306 ist ein aktueller Speicherblock, der durch die zugewiesene Speicherblock-Kopfadresse 300 verwaltet wird.
- Bevor auf Fig. 4 bis 8 für spezielle Ausführungsbeispiele des erfindungsgemäßen Verfahrens Bezug genommen wird, soll in Erinnerung gerufen werden, daß gemäß der Erfindung die Ordnung, in der die Datenstrukturen verändert werden, wichtig ist, so daß zu jeder Zeit ein Pointer auf alle Speicherblocks zeigt. Dies ist ein Grund für die zuvor erwähnten Pointer, in den zuvor im Zusammenhang mit Fig. 2 und 3 beschriebenen Kopfadressen.
- Weiterhin soll in Erinnerung gerufen werden, daß gemäß der Erfindung der letzte "Zustand" eines nicht-flüchtigen Speichers, wie im Zustands-Anzeiger 207 gespeichert (zuvor beschrieben in Zusammenhang mit der Speicher-Kopfadresse 200), dahingehend wichtig ist, daß die Stabilität eines nicht-flüchtigen Speichers folgend auf einen Leistungsabfall sichergestellt wird. Falls die Leistung während der Veränderung der Freispeicherverwaltung-Datenstrukturen nach unten geht, führt der Zustands-Anzeiger 207 eine schnelle und einfache Säuberung nach einem Wiederanliegen der Leistung durch, wie dies unter Bezugnahme auf die nachfolgend beschriebenen Verfahren erkannt werden kann. Es soll auch in Erinnerung gerufen werden, daß nach einer bevorzugten Ausführungsform der Erfindung der Zustands-Anzeiger 207 nur durch einen atomischen Befehl verändert werden kann; und daß zu jeder Zeit eine Liste verändert wird oder eine zugewiesene Speicherblock-Kopfadresse verändert wird (wegen der Aufteilung oder Zusammenführung), und daß der Zustands-Anzeiger 207 dahin gehend gesetzt wird, daß dieser anzeigt, was stattfindet. Folgt man diesem Verfahren, so wird, falls die Leistung während der Durchführung der Freispeicherverwaltungs-Funktionen nach unten geht, und dann die Leistung wieder nach oben geht, der Zustands-Anzeiger 207 zur Bestimmung der letzten durchgeführten Funktion verwendet werden.
- Es soll nun auf Fig. 4 Bezug genommen werden, die, wie bereits zuvor angedeutet, (in Übereinstimmung mit der Lehre eines bevorzugten Ausführungsbeispiels der Erfindung) einen illustrativen Satz von Verfahrensschritten zur Initialisierung eines nicht-flüchtigen Speichers zeigt, der in einem programmierbaren Aufzeichnungsgerät, wie z. B. den Aufzeichnungsgerät der Fig. 1 enthalten ist, immer dann, wenn das Aufzeichnungsgerät angeschaltet wird.
- Wenn das Aufzeichnungsgerät angeschaltet wird, wird der nicht-flüchtige Speicher initialisiert. Gemäß dem dargestellten Ausführungsbeispiel der Erfindung gibt es vier beispielhafte Bedingungen (Reset-Bedingungen, die verursachen, daß die gesamte Struktur gelöscht wird und der gesamte Speicher freigegeben wird):
- (1) Der Init-Indikator 201 ist nicht auf den richtigen Wert gesetzt. Dies zeigt an, daß der Speicher niemals initialisiert wurde oder daß die Spannungsquelle, die den nicht- flüchtigen Speicher stützte, entfernt war.
- (2) Die Differenz zwischen der laufenden Zeit und der Zeitmarke 202 in der Speicher- Kopfadresse 200 (dann, wenn die Zeitmarke benutzt wird) ist größer als das erlaubte Maximum der Zeit, oder die laufende Zeit ist geringer als die Zeitmarke.
- (3) Der externe Timer hat nicht funktioniert.
- (4) Der Benutzer hat ausdrücklich angefordert, daß der nicht-flüchtige Speicher gelöscht werden soll.
- Falls keine der obigen Bedingungen erfüllt wird, muß der Initialisierungsprozeß der vorliegenden Erfindung die Stabilität der Datenstrukturen, die für die Freispeicherverwaltung verwendet werden, verifizieren, insbesondere, falls die Freispeicherverwaltungs-Datenstrukturen bei einem Abfallen der Versorgungsleistung verändert wurden.
- Die zuvor erwähnte Stabilität kann durch Checken des zuvor erwähnten Zustands- Anzeigers 207 (in der Speicher-Kopfadresse 200) bestimmt werden, um zu sehen, ob ein vorbestimmter Wert, der den Zustand stabil repräsentiert, vorliegt. Falls er nicht stabil ist, versucht der Initialisierungsprozeß der vorliegenden Erfindung die Struktur wiederherzustellen und diese in eine stabile Bedingung zu bringen, nämlich durch Vollendung gewisser Operationen, die beim Auftreten des Spannungsabfalls durchgeführt wurden, wie dies zuvor diskutiert wurde.
- Unter Bezugnahme auf Fig. 4 kann erkannt werden, daß der Initialisierungsprozeß des nicht-flüchtigen Speichers, der beim dargestellten Ausführungsbeispiel der Erfindung durchgeführt wird, im Schritt 401 durch eine Root-Task aufgerufen wird.
- Als nächstes wird das Flußdiagramm in zwei wesentliche Bereiche geteilt, wobei dies beim Schritt 402 in Fig. 4 stattfindet: Ein Abzweig ist ein Prozeß zum Rücksetzen (Löschen) des Speichers, falls einer der zuvor erwähnten beispielhaften Speicher- Rücksetzbedingungen vorliegt; ein anderer Abzweig ist ein Prozeß zur Überprüfung der Stabilität der Datenstrukturen im gestützten Speicher, falls ein Reset nicht durchgeführt werden soll.
- Der exemplarische Reset-Prozeß, der in Fig. 4 dargestellt ist, umfaßt die folgenden Schritte:
- (1) Durchführung eines Hardware-Integritätstests für den flüchtigen Speicher (gezeigt beim Schritt 403), was ein Hardware-Test bedeuten soll, zur Bestimmung, ob die Speicher-Chips weiterhin in Ordnung sind, so daß Lese/Schreib-Befehle auf den Speicher gut ausgeführt werden können, usw.
- (2) Rückführung einer Fehler-Anzeige (bei Schritt 405), falls bei Schritt 404 festgestellt wurde, daß ein Speicher-Integritätstest nicht bestanden wurde.
- (3) Löschen des nicht-flüchtigen Speichers (gezeigt bei Schritt 406), der im Sinne des bevorzugten Ausführungsbeispiels der Erfindung die Schritte (in Fig. 4 nicht dargestellt) zur Erzeugung (Initialisierung) der zuvor erwähnten nicht-flüchtigen Speicher-Kopfadressen und das Setzen des Init-Anzeigers 201 in der Speicher- Kopfadresse 200 umfaßt, um anzuzeigen, daß die Initialisierung durchgeführt wurde.
- Der exemplarische Stabilitäts-Verifikationsprozeß, der Schritte zur Sicherstellung der Integrität der zuvor erwähnten Datenstrukturen im nicht-flüchtigen Speicher umfaßt, ist in Fig. 4 dargestellt und umfaßt die folgenden Schritte:
- (1) Durchführung eines Hardware-Integritätstests für den nicht-flüchtigen Speicher (gezeigt in Schritt 407), welcher ein Hardware-Test zur Bestimmung ist, ob die Speicher-Chips noch gut arbeiten, so daß Lese/Schreib-Funktionen auf den Speicher gut ausgeführt werden können, usw.
- (2) Rückführung einer Fehler-Anzeige (bei Schritt 405), falls beim Schritt 408 bestimmt wurde, daß der Speicher-Integritäts-Test nicht bestanden wurde.
- (3) Untersuchen des Zustands-Anzeigers 207 in der Speicher-Kopfadresse 200 (Schritt 409), um die Stabilität des nicht-flüchtigen Speichers zu bestimmen (Schritt 410).
- (4) Beendigung jeder in Bearbeitung befindlichen Operation zur Zeit des Spannungsverlusts, die die Stabilität des nicht-flüchtigen Speichers beeinflussen würde (Schritt 411), wenn immer in Schritt 410 erkannt wird, daß der nicht-flüchtige Speicher nicht stabil ist; und
- (5) Entfernen aller zugewiesenen Speicherblocks, die zuvor nicht in der Liste der zugewiesenen Speicherblocks enthalten waren, Zurückführen der freigegebenen zugewiesenen Speicherblocks in die Liste der freien Blocks (Schritt 412).
- Es soll nun auf Fig. 5 Bezug genommen werden, die, wie zuvor angedeutet, einen illustrativen Satz von Verfahrensschritten (in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung) zeigt, zum Zuweisen eines Speichers aus einem der Speicherblöcke, die in der Liste der freien Speicherblöcke enthalten sind, in Antwort auf die Anfrage eines Benutzers im Hinblick auf eine Speicherzuweisung. Wie zuvor erwähnt wurde, ist es im Sinne der Erfindung notwendig, daß nur atomische Befehle zur - Durchführung der Zuweisungsfunktion verwendet werden, wenn die beispielhafte in Fig. 2 dargestellte Speicher-Kopfadresse 200 verändert wird, und wenn die beispielhafte zugewiesene Speicher-Kopfadresse 300 gemäß Fig. 3 verändert wird.
- Bevor die Details des in dem Flußdiagramm dargestellten Verfahrens beschrieben werden, wird eine Übersicht des Zuweisungsprozesses im Sinne der Erfindung vorangestellt.
- Um einen Block von gestütztem Speicher zuzuweisen, stellt der Benutzer zwei Parameter dem Freispeicherverwaltungs-Verfahren im Sinne der Erfindung bereit; die Größe des angeforderten Blocks und die zuvor erwähnte einzigartige Benutzer-Identifikation.
- Der beispielhafte, in Fig. 5 dargestellte Prozeß findet dann das am nächsten liegende Vielfache der minimalen Blockgröße. Der aktuelle Arbeits-Anzeiger 203 und der aktuelle Zergliederungs-Anzeiger 204 (gezeigt in der Speicher-Kopfadresse 200 und beschrieben im Zusammenhang mit Fig. 2) werden dann auf Null gesetzt.
- Nachdem dies durchgeführt wird, wird die freie Liste nach einem Speicherblock durchsucht, der zugewiesen werden kann. Falls ein Block mit exakter Größe gefunden werden kann, wird dieser Block verwendet. Falls eine exakte Größe nicht gefunden werden kann, wird der größte verfügbare Block verwendet. Die freie Liste ist nach Blockgröße (von der größten zur kleinsten) sortiert. Falls alle Blocks zu klein sind, wird eine Null dem Benutzer zurückgeführt.
- Falls ein Block erkannt wird, wird der aktuelle Arbeits-Anzeiger 203 ausgefüllt, um auf diesen Block zu zeigen. Falls der Block größer als die geforderte Größe ist, muß der Block aufgeteilt werden. Der Teil des Blocks, der größer ist als das, was zur Ausführung benötigt wird, wird ein eigener Speicherblock und in die freie Liste eingefügt.
- Der verwendete Block wird aus der Liste der freien Blocks entfernt und an den Beginn der Liste der verwendeten Blocks hinzugefügt, die nicht sortiert ist.
- Unter Bezugnahme auf Fig. 5 kann erkannt werden, daß der Zuweisungsprozeß des nicht- flüchtigen Speichers, der im dargestellten Ausführungsbeispiel verwendet wird, folgende Schritte umfaßt: (a) Durchsuchen der Listen der freien Speicherblocks nach einem Speicherblock der zugewiesen wird (Schritt 501); (b) Bestimmen, ob ein gefundener Speicherblock größer als benötigt ist, immer dann, wenn ein zuzuweisender Speicherblock gefunden wurde (Schritt 502); Rückführung der zuvor erwähnten Null, wenn alle verfügbaren Speicherblocks zu klein sind (Schritt 503); (c) Falls der gefundene Speicherblock nicht größer als benötigt ist (wie in Schritt 504 bestimmt), Entfernen des gefundenen Speicherblocks aus der freien Liste (Schritt 505); (d) Aufteilen des gefundenen Speicherblocks, falls dieser größer als benötigt ist, in einen ersten Blockabschnitt zur Zuweisung und einen zweiten Blockabschnitt zum Zurückgeben in die freie Liste (Schritt 506); (e) Zurückführen des zweiten Blockbereichs in die freie Liste, immer dann, wenn ein zweiter Blockbereich erzeugt wurde (Schritt 507); und (f) Entfernen des ersten Blockbereichs aus der freien Liste, immer dann, wenn der zweite Blockbereich erzeugt wurde (Schritt 508); und (g) Hinzufügen des geeignet bemessenen Blocks, der zuzuweisen ist, in die Liste der zugewiesenen Speicherblocks (Schritt 509).
- Im folgenden soll nun auf Fig. 6 Bezug genommen werden, die, wie zuvor angedeutet, einen illustrativen Satz von Verfahrensschritten zeigt (in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung), um einen in der Liste der zugewiesenen Speicherblocks enthaltenen Block freizugeben, nämlich in Antwort auf eine Anfrage eines Benutzers zur Freigabe des Speichers. Wie zuvor erwähnt wurde, ist es notwendig, im Sinne der Erfindung, daß nur atomische Befehle verwendet werden, um die Freigabe- Funktionen durchzuführen, bei der Veränderung der in Fig. 2 gezeigten, exemplarischen Speicher-Kopfadresse 200 und bei der Veränderung der in Fig. 3 gezeigten, exemplarischen zugewiesenen Speicherblock-Kopfadresse 300.
- Nach dem dargestellten Ausführungsbeispiel der Erfindung wird zum Freigeben (Zurückführen) eines Speicherblocks in die Liste der freien Speicherblocks dieser zuerst aus der Liste der benutzten Speicherblocks entfernt und dann in die freie Liste plaziert. Alle Speicherblocks, die kombiniert werden können (benachbarte freie Speicherblocks), werden kombiniert, wenn ein Eintrag in die freie Liste erfolgt.
- Unter Bezugnahme auf Fig. 6 kann erkannt werden, daß der Freigabeprozeß des nicht- flüchtigen Speichers im Sinne des dargestellten illustrativen Ausführungsbeispiels der Erfindung folgende Schritte umfaßt: (a) Durchsuchen der benutzten Liste (Liste der zugewiesenen Speicherblocks) nach dem freizugebenden Speicherblock (Schritt 601); und, falls dieser nicht gefunden wird (wie in Schritt 602 dargestellt), Anzeigen eines Fehlers (Schritt 603); (b) Entfernen des freizugebenden Speicherblocks aus der Liste der zugewiesenen Speicherblocks (Schritt 604); (c) Bestimmen, ob der freigegebene Speicherblock mit einem anderen freien Block in der Liste der freien Speicherblocks vereinigt werden kann (Schritt 605); (d) Verbinden der freien Speicherblocks miteinander, immer dann, wenn bestimmt wurde, daß wenigstens zwei freie Speicherblocks miteinander vereinigt werden können (Schritt 606); und (e) Hinzufügen des freien Blocks in die freie Liste abhängig von der Blockgröße (entsprechend dem bevorzugten Ausführungsbeispiel der Erfindung; was per se jedoch nicht erforderlich ist) beim Schritt 607 (wenn keine Verbindung durchgeführt wurde) oder beim Schritt 608 (nachfolgend der Verschmelzung von Speicherblocks).
- Im nachfolgenden soll nun auf Fig. 7 Bezug genommen werden, die, wie zuvor angedeutet, einen illustrativen Satz von Verfahrensschritten (in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung) zeigt, zum Einschließen eines zugewiesenen Speicherblocks in die Liste der zugewiesenen Speicherblocks in Antwort auf die Anfrage eines Benutzers, diesen Block einzuschließen.
- Wie zuvor erwähnt wurde, ist es wünschenswert zu wissen, ob ein zugewiesener Speicherblock bekannte Werte enthält; und daß, falls die Versorgungsspannung abfällt, der Benutzer zu einer beliebigen Zeit in der Lage ist, Pointer auf von den Benutzer in Anspruch genommene, zugewiesene Speicher nach einem Wiederanlegen der Spannung zu erhalten, und zwar mit einiger Sicherheit, daß die in den zugewiesenen Speichern enthaltenen Daten gültig sind.
- Das Problem, das beim einfachen Rückführen eines Pointers auf einen zuvor zugewiesenen Speicher an einen Benutzer ohne Durchführung der Kenntnisnahme-Funktion im Sinne der Erfindung (um einen zugewiesenen Speicherblock in die Liste der benutzten Speicherblocks einzuschließen) liegt, besteht darin, daß der Benutzer nicht die Gelegenheit gehabt haben kann, den zugewiesenen Speicher zu initialisieren. Ohne den in Zusammenhang mit Fig. 7 beschriebenen Prozeß (oder einen ähnlichen Prozeß) würde es keinen Weg geben, mit Sicherheit zu verifizieren, daß der zugewiesene Speicher vom Benutzer initialisiert wurde.
- Der Mechanismus zur Sicherstellung, daß nur Pointer auf richtig initialisierte Speicherblocks an Benutzer zurückgegeben werden, ist der zuvor erwähnte Bestätigungsprozeß, der als Teil der vorliegenden Erfindung durchgeführt wird.
- Der Bestätigungsprozeß gemäß dem bevorzugten Ausführungsbeispiel der Erfindung arbeitet wie folgt: Wenn ein Benutzer einen angefragten zugewiesenen Speicher empfängt, initialisiert der Benutzer den Speicher und ruft dann den Bestätigungs-Prozeß auf. Die Bestätigungsmarke 304, zuvor im Zusammenhang mit Fig. 3 beschrieben, wird in der entsprechend zugewiesenen Speicherblock-Kopfadresse gesetzt (z. B. in der zugewiesenen Speicherblock-Kopfadresse 300), nämlich unter Verwendung atomischer Befehle.
- Wie bereits zuvor unter Bezugnahme auf den in Fig. 4 dargestellten Initialisierungsprozeß beschrieben wurde, werden folgend auf ein Einschalten alle unbestätigten Speicherblocks aus der Liste der verwendeten Speicherblocks entfernt, und sie werden zurück in die Liste der freien Speicherblocks gesetzt (Schritt 412 in Fig. 4).
- Unter Bezugnahme auf Fig. 7 kann erkannt werden, daß der Bestätigungs-Prozeß des nicht-flüchtigen Speichers, in Übereinstimmung mit dem dargestellten illustrativen Ausführungsbeispiel der Erfindung, folgende Schritte umfaßt: (a) Empfangen eines benutzerspezifizierten Pointers im Speicher, der in einem gegebenen Speicherblock enthalten ist (Schritt 701); (b) Bestimmen des gegebenen Speicherblocks in der Liste der zugewiesenen Speicherblocks (Schritt 702), Zurückgeben einer Fehlermeldung, falls dieser nicht in der Liste der zugewiesenen Speicherblocks vorhanden ist (Schritt 703); und (c) Setzen der Bestätigungsmarke 304 (des Einschließ-Anzeigers) im zugewiesenen Kopf- Speicherblock, der dem gegebenen Speicherblock zugeordnet ist, um anzuzeigen, daß der gegebene Speicherblock in die Liste der zugewiesenen Speicherblocks eingeschlossen wurde (Schritt 704).
- Im folgenden soll nun auf Fig. 8 Bezug genommen werden, die, wie bereits erwähnt, einen illustrativen Satz von Verfahrensschritten (in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung) zeigt, zur Bereitstellung eines Pointers auf einen durch den Benutzer verwendeten Speicherblock, nämlich in Antwort auf die Anfrage eines Benutzers nach einem solchen Pointer, nur dann, wenn der Speicherblock gültige Daten enthält.
- Gemäß dem bevorzugten Ausführungsbeispiel der Erfindung versucht ein Benutzer nach einem Einschalten alle Speicherblocks zu bekommen, die zugewiesen waren, bevor die Versorgungsspannung verloren ging. Um dies zu tun, muß der Benutzer seine einzigartige ID (wie zuvor diskutiert) bereitstellen, zusammen mit einem Index (was nachfolgend beschrieben werden wird) für die Freispeicherverwaltung im Sinne der Erfindung, die für das Zurückgeben von Pointern auf zuvor zugewiesene Speicher zu dem Benutzer verantwortlich ist.
- Die ID wird zur Identifizierung der Blocks benutzt, die der Benutzer verwendet. Der Index wird zur Bestimmung benutzt, welche Speicherblocks der Benutzer wünscht. Falls z. B. der Benutzer immer drei Blocks aufweist, wird der Benutzer den Prozeß aufrufen (in Übereinstimmung mit dem dargestellten Ausführungsbeispiel der Erfindung), der die Pointer (wie beispielhaft in Fig. 8 dargestellt) dreimal zurückgibt, unter entsprechender Verwendung der Indices 0, 1 und 2. Falls eine Null zurückgegeben wird, bedeutet dies, daß keine weiteren Speicherblocks dem Benutzer zugewiesen waren.
- Demgemäß wird dies bedeuten, falls der Benutzer den exemplarischen, in Fig. 8 dargestellten Prozeß dreimal aufruft, jedoch eine Null bekommt, wenn der Index 1 benutzt wird, dies bedeuten, daß den Benutzern nur ein Speicherblock vor dem Spannungsabfall zugewiesen war (Index 0).
- Es soll angemerkt werden, daß zu der Zeit, zu der es einem Benutzer erlaubt wird, Pointer von zuvor zugewiesenen Speicherblocks zu erfragen und zu erlangen, angenommen wird, daß der zuvor erwähnte Initialisierungsprozeß (unter Bezugnahme auf Fig. 4 beschrieben) durchgeführt wurde. Demgemäß wird jeder zugewiesene, jedoch nicht in die Liste der zugewiesenen Speicherblocks eingeschlossene Speicher, in die Liste der freien Speicherblocks zurückgeführt werden.
- Unter Bezugnahme auf Fig. 8 kann erkannt werden, daß das Verfahren zur Bereitstellung eines Pointers auf einem von einem Benutzer verwendeten Speicherblock (oder Speicherblocks, falls wiederholt aufgerufen, in Antwort auf die Anfrage eines Benutzers nach einem solchen Pointer (nur falls der den Speicher enthaltende Speicherblock in die Liste der zugewiesenen Speicherblocks eingeschlossen wurde) im Anschluß an ein Einschalten folgende illustrative Schritte umfaßt: (a) Durchsuchen der verwendeten Liste nach dem Benutzer zugeordnetem Speicher (Schritt 801); und, falls nichts gefunden wurde, (wie in Schritt 802 dargestellt) Ausgeben eines Fehlers (Schritt 803); und, falls etwas gefunden wurde, Zurückgeben des Pointers an Speicherblock des Benutzers (Schritt 804) mit der Sicherheit, daß der Pointer des Speichers durch den Benutzer initialisiert wurde (dadurch, daß das Einschließ-Bit gesetzt wurde und daß der zugewiesene Speicher in der Liste der zugewiesenen Blocks gehalten wurde, folgend dem Initialisierungsprozeß, der zuvor unter Bezugnahme auf Fig. 4 beschrieben wurde).
- Im folgenden soll nun auf Fig. 9 Bezug genommen werden, die, wie zuvor angedeutet, einen exemplarischen Satz von Schritten (in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung) zeigt, zum Entfernen eines Eintrags aus einer Liste und zum Einfügen in eine andere Liste, in einer Art und Weise, die kreuzverbundene Listen vermeidet.
- Um kreuzverbundene Listen zu vermeiden (die verwendete Liste und die freie Liste), werden Eintragungen immer komplett aus einer Liste entfernt, bevor diese in eine andere Liste eingetragen werden.
- Die Entfernung aus einer Liste stellt einen atomischen Befehl dar. Bevor ein Eintrag aus einer gegebenen Liste entfernt wird, muß der aktuelle Arbeits-Anzeiger 203 (im Speicherkopf 200) auf den Eintrag zeigen, der verschoben werden soll. Dies erlaubt der Initialisierungsprozeß im Sinne der Erfindung (wie zuvor unter Bezugnahme auf Fig. 4 beschrieben), der einem Spannungsabfall folgt, um so den Eintrag zu lokalisieren, falls die Spannung abfällt, in der Mitte der Durchführung dieser Funktionen, und zur Vollendung der Entfernungs-Funktion beim Schritt 411 in Fig. 4.
- Das Hinzufügen in eine neue Liste gemäß dem bevorzugten Verfahren der vorliegenden Erfindung, erfordert zwei Befehle, die in der folgenden Reihenfolge ausgeführt werden müssen:
- (1) Der hinzuzufügende Block muß seinen Pointer auf den nächsten Block setzen (beispielhaft durch den Pointer 303 in Fig. 3 dargestellt), auf einen Block, der in der Liste folgen wird.
- (2) Der Block, der dem neuen Block folgen wird, muß nun so gesetzt werden, um auf den neuen Block zu zeigen (ein atomischer Befehl), z. B. muß der Pointer auf den nächsten Block (Pointer 303) in dem Block, der dem neuen Block folgt, nun so gesetzt werden, daß er auf den neuen Block zeigt.
- Unter Bezugnahme auf Fig. 9 kann erkannt werden, daß ein exemplarisches Verfahren nach der Art der hier vorliegenden Erfindung zur Entfernung eines Eintrags B von der Liste der verwendeten Blocks 901 und das Einfügen desselben in die freie Liste 902 die folgenden Schritte umfaßt, wobei Pointer innerhalb der Liste (und/oder Pointer auf die Liste) verändert werden.
- Zuerst (Schritt 1) wird der aktuelle Arbeits-Pointer in der Speicher-Kopfadresse 202 so gesetzt, daß er auf den Eintrag B (den zu entfernenden Eintrag) in der Liste der zugewiesenen Speicherblocks 901 zeigt.
- Als nächstes (Schritt 2) wird zum Entfernen des Eintrags B aus der verwendeten Liste 901 der Pointer auf den nächsten Block im Eintrag A der zugewiesenen Speicherblock- Kopfadresse derart geändert (durch einen einzelnen atomischen Befehl), daß dieser auf den Eintrag C anstelle auf den Eintrag B zeigt.
- Der Einfüg-Prozeß (zwei atomische Befehle) kann in Fig. 9 als im Schritt 3 begonnen angesehen werden, wobei der Pointer auf den nächsten Block im Eintrag B in der zugewiesenen Speicherblock-Kopfadresse derart verändert wird (über den ersten atomischen Befehl), um auf den Eintrag E anstelle auf den Eintrag C zu zeigen; und (in Schritt 4) wird die Einfügung des Eintrags B in die freie Liste 901 vollendet durch die Veränderung des Pointers auf den nächsten Block im Eintrag D der zugewiesenen Speicherblock-Kopfadresse (wieder über den ersten atomischen Befehl), so daß dieser auf den Eintrag B anstelle auf den Eintrag E zeigt.
- Unter Bezugnahme auf Fig. 9 soll erkannt werden, daß die Schritte 2 und 3 den Risikobereich darstellen, falls die Lehre der Erfindung nicht eingesetzt wird, um die zuvor erwähnten Entfernungs- und Einsetz-Funktionen auszuführen. Insbesondere würde, falls der aktuelle Arbeits-Pointer 203 nicht in der Speicher-Kopfadresse 200 vorhanden wäre, der Eintrag B verloren gehen, falls die Stromversorgung nach unten gehen würde, bevor der Schritt 4 beendet worden wäre.
- Im folgenden soll nun auf Fig. 10 zugenommen werden, welche, wie zuvor angedeutet, einen exemplarischen Satz von Schritten (in Übereinstimmung mit der Lehre eines Ausführungsbeispiels der Erfindung) zeigt, in welchen dargestellt wird, wie ein Zergliederungs-Pointer zur Zergliederung eines Speicherblocks verwendet werden kann, in einer Art und Weise, die die Datenstruktur-Integrität sichert.
- Gemäß der Lehre der vorliegenden Erfindung wird, zur Vermeidung falscher Blockgrößen, der zuvor erwähnte aktuelle Zergliederungs-Pointer 204 in der Speicher-Kopfadresse 200 aufrechterhalten, um auf eine Zergliederung zu zeigen. Der aktuelle Zergliederungs- Pointer 204 wird auf einen vereinigten Block zeigen, oder auf einen Ort in einem Block, an dem eine Teilung stattfinden wird. Der zuvor erwähnte aktuelle Arbeits-Pointer (Pointer 203 in Fig. 2) wird bereits auf einen anderen vereinigten Block oder den geteilten Block zeigen. Diese beiden Pointer zusammen können benutzt werden, um zu bestimmen, ob die Kopfgröße im Block richtig bemessen ist.
- Unter Bezugnahme auf Fig. 10 kann erkannt werden, daß das exemplarische Verfahren zum Aufteilen eines Speicherblocks (der gezeigte Block A mit 100 Bytes an Speicher), der in der freien Liste 1001 positioniert ist, die folgenden Schritte umfaßt, wobei (beim Schritt 1 in Fig. 10) der Block A auf dem Block B zeigt (der, wie dargestellt 30 Bytes an Speichern umfaßt):
- Zuerst (Schritt 1) ist der aktuelle Arbeitspointer 203 in der Speicher-Kopfadresse 200 derart dargestellt, daß er auf den Block zeigt, der für das Aufteilen ausgewählt ist (Block A). Block A ist so dargestellt, daß dieser auf den Block B in der freien Liste 1001 zeigt.
- Als nächstes, im Schritt 2, wird der Ort im Block A, an dem die Blockteilung stattfinden wird, durch den aktuellen Zergliederungs-Pointer 204 angezeigt. Die Größe des exemplarischen, abzugliedernden Blocks (25 Byte innerhalb des Blocks A) ist als Block C in Fig. 10 bestimmt, und eine zugewiesene Speicherblock-Kopfadresse wird für den neuen Block erzeugt (z. B. die in Fig. 3 gezeigte Speicherblock-Kopfadresse 300).
- Schritt 3 in Fig. 10 zeigt den zergliederten Block (Block C mit darin eingeschlossenen 25 Byte), der der freien Liste 1001 hinzugefügt ist. Dies wird durch den in Fig. 10 gezeigten Schritt 3 bewerkstelligt, durch Veränderung des Pointers von Block B auf den nächsten Block in der freien Liste, nämlich zum Zeigen auf Block C (wobei in Erinnerung gerufen werden muß, daß die freie Liste 1001 vorzugsweise nach der Größe sortiert ist).
- Letztendlich wird in Schritt 4, in Fig. 10 gezeigt, daß die zugewiesene Speicherblock- Kopfadresse für Block A verändert werden muß, um die Tatsache anzuzeigen, daß Block A von einer Größe von 100 Byte auf 75 Byte reduziert wurde.
- Es sollte vermerkt werden, daß der aktuelle Arbeitspointer 203 zu allen Zeiten auf Block A zeigt (den Block, der, wie in Schritt 4 gezeigt, verändert werden muß), und daß der aktuelle Zergliederungs-Pointer in der Lage ist, die Zergliederungsfunktion sicher auszuführen.
- Insbesondere kann im Zusammenhang mit Fig. 10 erkannt werden, daß Schritt 3 kritisch ist, falls der aktuelle Zergliederungs-Pointer im Sinne der Erfindung bei der Durchführung der exemplarischen Zergliederungsfunktion nicht benutzt wurde. Zu der Zeit, zu der Schritt 3 durchgeführt wird, bestand keine Gelegenheit, den Blockgrößen-Anzeiger 302 von Block A (der Block, auf den der aktuelle Arbeits-Pointer zeigt) in der beispielhaft zugewiesenen Speicherblock-Kopfadresse 300 einzustellen (diese sollte nach dem Aufsplitten von Block A in die Blöcke A und C 75 sein); der zergliederte Block (Block C) wurde jedoch bereits in die freie Liste 1001 eingefügt. Da der aktuelle Zergliederungs-Pointer in der Speicher- Kopfadresse 200 der vorliegenden Erfindung ist, kann man prüfen (nachdem die Leistung zum Aufzeichnungsgerät wiederhergestellt wurde), ob die Adresse des aktuellen Arbeits- Pointers zuzüglich der Blockgröße (die Blockgröße von Block A) die Adresse überlappt, auf die der aktuelle Zergliederungs-Pointer zeigt.
- Die hier einschlägigen Fachleute werden erkennen, daß das Verfahren zum Verbinden von Speicher essentiell ist, um jeden Prozeß rückgängig zu machen, der zum Aufteilen von Speicher verwendet wurde. Gemäß der Erfindung müssen die Zergliederungen aus der Liste der freien Speicher in derselben Art und Weise gelöscht werden, wie wenn sie von einer Liste in eine andere Liste bewegt werden.
- Was hier weiter oben im Detail beschrieben wurde, sind Verfahren und Vorrichtungen, die alle vorerwähnten Ziele erfüllen. Wie zuvor angedeutet, werden die einschlägigen Fachleute erkennen, daß die vorstehende Beschreibung nur aus Gründen der Illustration und Beschreibung präsentiert wurde. Diese soll nicht erschöpfend sein oder die Erfindung auf dieses spezielle Ausführungsbeispiel beschränken, und im Lichte der obigen Lehre sind selbstverständlich viele Modifikationen und Veränderungen möglich.
- Die Ausführungsbeispiele und weiteren dargestellten Beispiele wurden präsentiert, um die Grundlagen der vorliegenden Erfindung am besten zu erklären, und um deren praktische Anwendung zu zeigen, um so andere einschlägige Fachleute in die Lage zu versetzen, die vorliegende Erfindung am besten auszuführen, nämlich in unterschiedlichen Ausführungsbeispielen und in unterschiedlichen Modifikationen, die für den hier vorliegenden Zweck geeignet sind.
- Es muß daher verstanden werden, daß die nachfolgenden Ansprüche alle solchen Modifikationen und Veränderungen abdecken sollen, die in den Umfang der Erfindung fallen, der durch die nachfolgenden Patentansprüche definiert wird.
Claims (18)
1. Verfahren zur Freispeicherverwaltung und zum Schutz der in einem nicht-flüchtigen
Speicher (101) erzeugten und gespeicherten Datenstrukturintegrität, wobei der
Speicher in einem programmierbaren Aufnahmegerät enthalten ist, welches zur
Aufnahme von Prozeßdaten verwendet wird, wobei das Verfahren durch folgende
Schritte gekennzeichnet ist
a) Definieren eines Kopfdatenstruktur-Speichers, welcher zur Verwaltung der
Laufzeit-Speicherfunktionen und zur Unterstützung der Regenerierung jeglicher
Datenstrukturen verwendet wird, die sich bei einem Stromausfall zum
Aufnahmegerät verändern, wobei der Kopfspeicher (200) einen Zustandsanzeiger
(207) zur Bestimmung der in der Freispeicherverwaltung zuletzt ausgeführten
Funktion umfaßt, und weiterhin einen ersten Pointer (206) zu einer Liste von
freien Speicherblöcken und einen zweiten Pointer (205) zu einer Liste von
zugewiesenen Speicherblöcken umfaßt;
b) Definieren eines zugewiesenen Speicher-Kopfblocks (300), der in jedem
zugewiesenem Speicherblock gespeichert ist, und der zur Bestimmung von
Blockattributen verwendet wird, der weiterhin einen Anzeiger umfaßt, der
anzeigt, falls ein gegebener Speicherblock in diese Liste von zugewiesenen
Speicherblöcken eingeschlossen wurde, und der einen Blockbesitz-Anzeiger und
einen Anzeiger auf den nächsten zugewiesenen Speicherblock aufweist, falls ein
solcher da ist;
c) Initialisieren des nicht-flüchtigen Speichers immer dann, wenn das
Aufnahmegerät eingeschaltet ist, umfassend einen Bestimmungsschritt, falls der
nicht-flüchtige Speicher zurückgesetzt werden muß, und umfassend einen Schritt
zur Stabilitätsverifizierung des nicht-flüchtigen Speichers immer dann, wenn der
nicht-flüchtige Speicher nicht zurückgesetzt wird, durch Prüfen eines
vorbestimmten Werts, der durch den Zustandsanzeiger gespeichert wird, und
durch Vervollständigung einer jeden Funktion im Zuge eines Spannungsausfalls,
der die Stabilität des nicht-flüchtigen Speichers beeinflußt, falls der vorbestimmte
Wert anzeigt, daß der Speicher instabil ist, und umfassend den Schritt der
Entfernung aller zugewiesenen Speicherblocks, die vorher nicht in der Liste der
zugewiesenen Speicherblocks eingeschlossen waren, und Zurückkehren der nicht-
eingeschlossenen Blocks in die freie Liste;
d) Zuordnen eines Speichers eines der in der Liste der freien Speicherblocks
enthaltenen Speicherblocks, in Antwort auf eine Benutzeranfrage zur
Speicherzuordnung, unter anschließlicher Verwendung atomischer Befehle, um
den Speicherkopf und den zugeordneten Kopfspeicherblock zu verändern; und
e) Einschließen eines zugewiesenen Speicherblocks in die Liste der zugewiesenen
Speicherblocks in Antwort auf eine Benutzeranfrage im Hinblick auf das
Einschließen, Initialisieren des Blocks und Setzen des Einschließ-Anzeigers mit
atomischen Befehlen.
2. Verfahren nach Anspruch 1, gekennzeichnet durch Freigeben eines in
der Liste der zugewiesenen Speicherblocks enthaltenen Speicherblocks, in Antwort
auf eine Benutzeranfrage hinsichtlich einer Speicherfreigabe, unter ausschließlicher
Verwendung atomischer Befehle zur Veränderung des Speicherkopfs und des
zugewiesenen Kopfspeicherblocks.
3. Verfahren nach Anspruch 1 oder 2, gekennzeichnet durch
a) komplettes Entfernen eines Vermerks aus der Liste der freien Speicherblocks,
bevor der Vermerk in die Liste der zugewiesenen Speicherblocks hinzugeführt
wird, beim Ausführen des Schritts der Speicherzuordnung; und
b) komplettes Entfernen eines Vermerks aus der Liste der zugewiesenen
Speicherblocks, bevor dieser Vermerk der Liste der freien Speicherblocks
hinzugefügt wird, beim Ausführen des Freigabeschritts eines Speicherblocks, um
hierdurch kreuzverweisende Listen beim Speicherzuordnen und/oder beim
Freigeben eines Speicherblocks zu vermeiden.
4. Verfahren nach jedem der vorherstehenden Ansprüche, dadurch
gekennzeichnet, daß der Schritt des Einschließens weiterhin folgende Schritte
umfaßt:
a) Empfangen eines benutzerspezifizierten Anzeigers zum Speicher in einem
gegebenen Speicherblock;
b) Bestimmen, ob der gegebene Speicherblock in der Liste der zugewiesenen
Speicherblocks enthalten ist; und
c) Setzen des Anzeigers im zugewiesenen Kopfspeicherblock, der dem gegebenen
Speicherblock zugeordnet ist, um anzuzeigen, daß der gegebene Speicherblock in
die Liste der zugewiesenen Speicherblocks eingeschlossen wurde.
5. Verfahren nach jedem der vorherstehenden Ansprüche, gekennzeichnet
durch die Bereitstellung eines Pointers zu einem von einem Benutzer benutzten
Speicherblock in Antwort auf eine Anfrage des Benutzers im Hinblick auf einen
solchen Pointer nur dann, falls der Speicherblock, der diesen Speicher enthält, in die
Liste der zugewiesenen Speicherblocks eingeschlossen wurde.
6. Verfahren nach jedem der vorherstehenden Ansprüche, dadurch
gekennzeichnet, daß der Schritt der Definierung eines Speicherkopfs weiterhin
den Schritt aufweist, daß in den Speicherkopf (200) folgendes aufgenommen wird:
a) einen Anzeiger (201), der zur Bestimmung benutzt wird, ob der nicht-flüchtige
Speicher initialisiert wurde;
b) einen aktuellen Arbeits-Pointer (203) zu einem Speicherblock, der zugewiesen
oder freigegeben wurde;
c) einen aktuellen Verteilungs-Pointer (204) zu einem Speicherblock, der von einem
größeren Speicherblock abgetrennt wird, oder der mit einem anderen
Speicherblock verbunden wird; und
d) einen Zustandsanzeiger (207), der zur Bestimmung der Stabilität des nicht-
flüchtigen Speichers auf eine Regenerierung aus einem Stromausfall verwendet
wird.
7. Verfahren nach jedem der vorherstehenden Ansprüche, dadurch
gekennzeichnet, daß der Schritt der Definierung eines Kopfspeichers den Schritt umfaßt,
daß in den Kopfspeicher eine Zeitmarke (202) eingeschlossen wird, die zu
festgesetzten Intervallen aktualisiert wird, wobei diese Zeitmarke zur Bestimmung
benutzt wird, wie lange die Leistung während eines Leistungsausfalls abgeschaltet
war.
8. Verfahren nach jedem der vorherstehenden Ansprüche, dadurch
gekenn
zeichnet, daß der Schritt der Definierung eines zugewiesenen Kopfspeicherblocks
den Schritt umfaßt, daß in den zugewiesenen Kopfspeicherblock (300) folgendes
eingeschlossen wird:
a) ein Größenanzeiger (302) für den zugewiesenen Speicherblock;
b) ein Blockgrößeneinstell-Anzeiger (305), der benutzt wird, um die aktuelle Größe
einer Speicheranfrage eines Benutzers zu bestimmen; und
c) der aktuelle Satz der einem Benutzer zugewiesenen Speicherorte (306).
9. Verfahren nach jedem der vorherstehenden Ansprüche, dadurch
gekennzeichnet, daß der Schritt der Bestimmung, ob der nicht-flüchtige Speicher
zurückgesetzt werden soll, weiterhin den Schritt umfaßt, daß die Gültigkeit des
Anzeigers (207) bestimmt wird, der zur Bestimmung benutzt wird, ob der nicht-
flüchtige Speicher initialisiert wurde.
10. Verfahren nach jedem der vorherstehenden Ansprüche, dadurch
gekennzeichnet, daß dann, wenn immer bestimmt wurde, daß der nicht-flüchtige
Speicher zurückgesetzt werden soll, folgende Schritte ausgeführt werden:
a) Durchführung eines Integritätstests für die nicht-flüchtige Speicherhardware;
b) Löschen des nicht-flüchtigen Speichers, wobei der Löschschritt die Schritte der
Initialisierung des Kopfdatenstruktur-Speichers und des zugewiesenen
Kopfspeicherblocks umfaßt, ebenso wie das Setzen des Anzeigers (207), der zur
Bestimmung benutzt wird, ob der nicht-flüchtige Speicher initialisiert wurde, und
zur Anzeige, daß die Initialisierung stattgefunden hat.
11. Verfahren nach irgendeinem der vorherstehenden Ansprüche,
gekennzeichnet durch einen Zuordnungsschritt, der folgende Schritte
umfaßt:
a) Durchsuchen der Liste der freien Speicherblocks nach einem zuzuweisenden
Speicherblock;
b) Bestimmung, ob der gefundene Speicherblock größer als benötigt ist, immer dann,
wenn ein zuzuweisender Speicherblock gefunden wurde;
c) Entfernen des gefundenen Speicherblocks aus der freien Liste, falls er nicht
größer als benötigt ist;
d) Aufteilen des gefundenen Speicherblocks in einen ersten Blockbereich für die
Zuordnung und einen zweiten Blockbereich zum Verbleib in der freien Liste, falls
er größer ist als benötigt;
e) Zurückführen des zweiten Blockbereichs zu der freien Liste, immer dann, wenn
der zweite Blockbereich erzeugt wurde;
f) Entfernen des ersten Blocksbereichs aus der freien Liste, immer dann, wenn der
zweite Blockbereich erzeugt wurde; und
g) Hinzufügen des richtig bemessenen Blocks zu der Liste der zugewiesenen
Speicherblocks.
12. Verfahren nach jedem der vorherstehenden Ansprüche, gekennzeichnet
durch einen Freigabeschritt eines Speicherblocks, der folgende Schritte umfaßt:
a) Durchsuchen der Liste der zugewiesenen Speicherblocks nach einem
freizugebenden Speicherblock;
b) Entfernen des freizugebenden Speicherblocks aus der Liste der zugewiesenen
Speicherblocks;
c) Bestimmen, ob der freizugebenden Speicherblock mit einem anderen
Speicherblock in der Liste der freien Speicherblocks verbunden werden kann;
d) Verbinden der freien Blocks miteinander, immer dann, wenn bestimmt wurde, daß
wenigstens zwei freie Speicherblocks miteinander verbunden werden können; und
e) Hinzufügen des freigegebenen Blocks zu der Liste der freien Speicherblocks,
wenn dieser gemäß Schritt (d) vergrößert wurde.
13. Verfahren nach Anspruch 12, dadurch gekennzeichnet, daß der
Schritt des Hinzufügens eines freigegebenen Blocks zu der Liste der freien
Speicherblocks weiterhin den Schritt umfaßt, daß die Liste im Hinblick auf die
Blockgröße der freien Speicherblocks sortiert wird.
14. Vorrichtung zur Freispeicherverwaltung und zum Schützen der in einem nicht-
flüchtigen Speicher erzeugten und gespeicherten Datenstrukturintegrität, wobei der
Speicher in einem programmierbaren Aufnahmegerät (100) enthalten ist, welches zur
Aufnahme von Prozeßdaten verwendet wird, wobei die Vorrichtung
gekennzeichnet ist durch:
a) Mittel zum Definieren eines Kopfdatenstruktur-Speichers, welcher zur
Verwaltung der Laufzeit-Speicherfunktionen und zur Unterstützung der
Regenerierung jeglicher Datenstrukturen verwendet wird, die sich bei einem
Stromausfall zum Aufnahmegerät verändern, wobei der Kopfspeicher (200) einen
Zustandsanzeiger (207) zur Bestimmung der in der Freispeicherverwaltung zuletzt
ausgeführten Funktion umfaßt, und weiterhin einen ersten Pointer (206) zu einer
Liste von freien Speicherblöcken und einen zweiten Pointer (205) zu einer Liste
von zugewiesenen Speicherblöcken umfaßt;
b) Mittel zum Definieren eines zugewiesenen Speicher-Kopfblocks (300), der in
jedem zugewiesenen Speicherblock gespeichert ist, und der zur Bestimmung von
Blockattributen verwendet wird, der weiterhin einen Anzeiger umfaßt, der
anzeigt, falls ein gegebener Speicherblock in diese Liste von zugewiesenen
Speicherblöcken eingeschlossen wurde, und der einen Blockbesitz-Anzeiger und
einen Anzeiger auf den nächsten zugewiesenen Speicherblock aufweist, falls ein
solcher da ist;
c) Mittel zum Initialisieren des nicht-flüchtigen Speichers, immer dann, wenn das
Aufnahmegerät eingeschaltet ist, umfassend Mittel zur Bestimmung, ob der nicht-
flüchtige Speicher zurückgesetzt werden muß, und umfassend Mittel zur
Stabilitätsverifizierung des nicht-flüchtigen Speichers immer dann, wenn der
nicht-flüchtige Speicher nicht zurückgesetzt wird, durch Prüfen eines
vorbestimmten Werts, der durch den Zustandsanzeiger gespeichert wird, und
durch Vervollständigung einer jeden Funktion im Zuge eines Spannungsausfalls,
der die Stabilität des nicht-flüchtigen Speichers beeinflußt, falls der vorbestimmte
Wert anzeigt, daß der Speicher instabil ist, und umfassend Mittel zur Entfernung
aller zugewiesenen Speicherblocks, die vorher nicht in der Liste der zugewiesenen
Speicherblocks eingeschlossen waren, und Zurückkehren der nicht-
eingeschlossenen Blocks in die freie Liste;
d) Mittel zum Zuordnen eines Speichers eines der in der Liste der freien
Speicherblocks enthaltenen Speicherblocks, in Antwort auf eine Benutzeranfrage
zur Speicherzuordnung, unter anschließlicher Verwendung atomischer Befehle,
um den Speicherkopf und den zugeordneten Kopfspeicherblock zu verändern; und
e) Mittel zum Einschließen eines zugewiesenen Speicherblocks in die Liste der
zugewiesenen Speicherblocks in Antwort auf eine Benutzeranfrage im Hinblick
auf das Einschließen, Initialisieren des Blocks und Setzen des Einschließ-
Anzeigers mit atomischen Befehlen.
15. Vorrichtung nach Anspruch 14, dadurch gekennzeichnet, daß der
Kopfdatenstruktur-Speicher weiterhin umfaßt:
a) einen ersten Pointer zu einer Liste freier Speicherblocks im nicht-flüchtigen
Speicher;
b) einen zweiten Pointer (205) zu einer Liste von zugewiesenen Speicherblocks im
nicht-flüchtigen Speicher;
c) einen Anzeiger (201), der zur Bestimmung benutzt wird, ob der nicht-flüchtige
Speicher initialisiert wurde;
d) einen aktuellen Arbeits-Pointer (203) zu einem Speicherblock, der zugewiesen
oder freigegeben wurde;
e) einen aktuellen Zerteilungs-Pointer (204) zu einem Speicherblock, der von einem
größeren Speicherblock abgetrennt werden wird oder der mit einem anderen
Speicherblock verbunden werden wird; und
f) einen Zustandsanzeiger (207), der zur Stabilitätsbestimmung des nicht-flüchtigen
Speichers auf eine Regenerierung aus einem Spannungsverlust verwendet wird.
16. Vorrichtung nach Anspruch 14 oder 15, dadurch gekennzeichnet, daß
der Kopfdatenstruktur-Speicher weiterhin eine Zeitmarke (202) umfaßt, die in festen
Intervallen aktualisiert wird, wobei diese Zeitmarke zur Bestimmung benutzt wird, wie
lange die Leistung während eines Leistungsausfalls abgeschaltet war.
17. Vorrichtung nach einem der Ansprüche 14 bis 16, dadurch
gekennzeichnet, daß der nicht-flüchtige Speicher ein kondensator-gestützter Random-
Access-Speicher ist.
18. Vorrichtung nach jedem der Anspruche 14 bis 17, dadurch
gekennzeichnet, daß der zugewiesene Kopfblockspeicher weiterhin aufweist:
a) einen Größenanzeiger (302) für den zugewiesenen Speicherblock;
b) einen Blockgrößeneinstell-Anzeiger (305), der benutzt wird, um die aktuelle
Größe einer Benutzer-Speicherzuordnungs-Anfrage zu bestimmen; und
c) den aktuellen Satz der dem Benutzer zugewiesenen Speicherbereiche.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/429,346 US5625819A (en) | 1995-04-26 | 1995-04-26 | Methods and apparatus for performing heap management and protecting data structure integrity in non-volatile memory |
PCT/US1996/005730 WO1996034337A1 (en) | 1995-04-26 | 1996-04-24 | Methods and apparatus for performing heap management and protecting data structure integrity in non-volatile memory |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69603180D1 DE69603180D1 (de) | 1999-08-12 |
DE69603180T2 true DE69603180T2 (de) | 1999-12-23 |
Family
ID=23702850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69603180T Expired - Fee Related DE69603180T2 (de) | 1995-04-26 | 1996-04-24 | Verfahren und vorrichtung zur freispeicherverwaltung und zum datenstrukturintegritätsschutz in nichtflüchtigen speichern |
Country Status (7)
Country | Link |
---|---|
US (1) | US5625819A (de) |
EP (1) | EP0823087B1 (de) |
JP (1) | JPH11511878A (de) |
AU (1) | AU711846B2 (de) |
CA (1) | CA2214648A1 (de) |
DE (1) | DE69603180T2 (de) |
WO (1) | WO1996034337A1 (de) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2308471B (en) * | 1995-12-22 | 1999-10-20 | Nokia Mobile Phones Ltd | Memory defragmentation |
KR980013092A (ko) | 1996-07-29 | 1998-04-30 | 김광호 | 교환시스템의 화일관리장치 및 방법 |
KR100260028B1 (ko) * | 1996-08-13 | 2000-06-15 | 윤종용 | 화일시스템의 정보 복구방법 |
US5950231A (en) * | 1996-11-25 | 1999-09-07 | Northern Telecom Limited | Memory manager system |
US6311290B1 (en) * | 1997-02-14 | 2001-10-30 | Intel Corporation | Methods of reliably allocating, de-allocating, re-allocating, and reclaiming objects in a symmetrically blocked nonvolatile memory having a bifurcated storage architecture |
US6182188B1 (en) * | 1997-04-06 | 2001-01-30 | Intel Corporation | Method of performing reliable updates in a symmetrically blocked nonvolatile memory having a bifurcated storage architecture |
US6065019A (en) * | 1997-10-20 | 2000-05-16 | International Business Machines Corporation | Method and apparatus for allocating and freeing storage utilizing multiple tiers of storage organization |
KR100303280B1 (ko) | 1997-12-26 | 2001-11-22 | 윤종용 | 컴퓨터시스템의전원공급장치 |
US6012063A (en) * | 1998-03-04 | 2000-01-04 | Starfish Software, Inc. | Block file system for minimal incremental data transfer between computing devices |
US6070202A (en) * | 1998-05-11 | 2000-05-30 | Motorola, Inc. | Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size |
US6314489B1 (en) * | 1998-07-10 | 2001-11-06 | Nortel Networks Limited | Methods and systems for storing cell data using a bank of cell buffers |
DE19831516A1 (de) * | 1998-07-14 | 2000-01-20 | Alcatel Sa | Verfahren zum Betrieb eines Servers sowie Server und Steuereinheit |
US7111141B2 (en) * | 2000-10-17 | 2006-09-19 | Igt | Dynamic NV-RAM |
US6804763B1 (en) * | 2000-10-17 | 2004-10-12 | Igt | High performance battery backed ram interface |
US8550922B2 (en) | 2006-03-03 | 2013-10-08 | Igt | Game removal with game history |
US6757802B2 (en) * | 2001-04-03 | 2004-06-29 | P-Cube Ltd. | Method for memory heap and buddy system management for service aware networks |
US20030159471A1 (en) * | 2002-02-27 | 2003-08-28 | Wamin Optocomm Mfg. Corporation | Method for fabricating fiber optic joints |
US7392361B2 (en) * | 2002-04-16 | 2008-06-24 | Emc Corporation | Generic reallocation function for heap reconstitution in a multi-processor shared memory environment |
US6766432B2 (en) * | 2002-05-24 | 2004-07-20 | Sun Microsystems, Inc. | Memory management system supporting object deletion in non-volatile memory |
US8060680B2 (en) * | 2002-09-16 | 2011-11-15 | Hewlett-Packard Development Company, L.P. | Method of allocating memory |
US7519867B2 (en) * | 2004-12-21 | 2009-04-14 | National Instruments Corporation | Test executive which provides heap validity checking and memory leak detection for user code modules |
US7849444B2 (en) * | 2004-12-21 | 2010-12-07 | National Instruments Corporation | Test executive with buffer overwrite detection for parameters of user-supplied code modules |
US7406476B1 (en) * | 2005-04-04 | 2008-07-29 | Apple Inc. | Updating a data structure |
US20070150645A1 (en) * | 2005-12-28 | 2007-06-28 | Intel Corporation | Method, system and apparatus for power loss recovery to enable fast erase time |
US7951008B2 (en) * | 2006-03-03 | 2011-05-31 | Igt | Non-volatile memory management technique implemented in a gaming machine |
US9767676B2 (en) * | 2012-01-11 | 2017-09-19 | Honeywell International Inc. | Security system storage of persistent data |
US9443107B2 (en) * | 2013-02-19 | 2016-09-13 | Qualcomm Incorporated | Method for protecting the integrity of a group of memory elements using an aggregate authentication code |
US10025669B2 (en) | 2014-12-23 | 2018-07-17 | Nuvoton Technology Corporation | Maintaining data-set coherency in non-volatile memory across power interruptions |
US10860709B2 (en) * | 2018-06-29 | 2020-12-08 | Intel Corporation | Encoded inline capabilities |
US12026379B2 (en) * | 2022-03-14 | 2024-07-02 | Western Digital Technologies, Inc. | Data storage device and method for host-initiated transactional handling for large data set atomicity across multiple memory commands |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4814971A (en) * | 1985-09-11 | 1989-03-21 | Texas Instruments Incorporated | Virtual memory recovery system using persistent roots for selective garbage collection and sibling page timestamping for defining checkpoint state |
US4845632A (en) * | 1985-10-16 | 1989-07-04 | Pitney Bowes Inc. | Electonic postage meter system having arrangement for rapid storage of critical postage accounting data in plural nonvolatile memories |
US5021963A (en) * | 1988-12-30 | 1991-06-04 | Pitney Bowes Inc. | EPM having an improvement in accounting update security |
US5088036A (en) * | 1989-01-17 | 1992-02-11 | Digital Equipment Corporation | Real time, concurrent garbage collection system and method |
US5317752A (en) * | 1989-12-22 | 1994-05-31 | Tandem Computers Incorporated | Fault-tolerant computer system with auto-restart after power-fall |
US5634000A (en) * | 1991-07-31 | 1997-05-27 | Ascom Autelca Ag | Power-fail return loop |
US5367637A (en) * | 1992-03-26 | 1994-11-22 | International Business Machines Corporation | Self-tuning virtual storage management for dedicated real-time computer system |
US5491808A (en) * | 1992-09-30 | 1996-02-13 | Conner Peripherals, Inc. | Method for tracking memory allocation in network file server |
-
1995
- 1995-04-26 US US08/429,346 patent/US5625819A/en not_active Expired - Lifetime
-
1996
- 1996-04-24 EP EP96913122A patent/EP0823087B1/de not_active Expired - Lifetime
- 1996-04-24 DE DE69603180T patent/DE69603180T2/de not_active Expired - Fee Related
- 1996-04-24 WO PCT/US1996/005730 patent/WO1996034337A1/en active IP Right Grant
- 1996-04-24 AU AU55730/96A patent/AU711846B2/en not_active Ceased
- 1996-04-24 CA CA002214648A patent/CA2214648A1/en not_active Abandoned
- 1996-04-24 JP JP8532682A patent/JPH11511878A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
AU5573096A (en) | 1996-11-18 |
DE69603180D1 (de) | 1999-08-12 |
CA2214648A1 (en) | 1996-10-31 |
WO1996034337A1 (en) | 1996-10-31 |
JPH11511878A (ja) | 1999-10-12 |
EP0823087B1 (de) | 1999-07-07 |
US5625819A (en) | 1997-04-29 |
EP0823087A1 (de) | 1998-02-11 |
AU711846B2 (en) | 1999-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69603180T2 (de) | Verfahren und vorrichtung zur freispeicherverwaltung und zum datenstrukturintegritätsschutz in nichtflüchtigen speichern | |
DE69332696T2 (de) | Rechnerverfahren und System zur Speicherverwaltung | |
DE4435751B4 (de) | Dateiname- und Verzeichnis- Erfassungsverfahren zur Verwendung mit einem Betriebssystem | |
DE69703181T2 (de) | Registrierdateioptimierung in einem Client/Server-Rechnersystem | |
DE4220198C2 (de) | Transaktionsverarbeitungsverfahren für einen digitalen Computer und Transaktionsverarbeitungssystem | |
DE69128367T2 (de) | System und Verfahren zur Transaktionsbearbeitung mit verminderter Verriegelung | |
DE69613594T2 (de) | Rechnersicherungssystem mit offenen Dateien | |
DE3784190T2 (de) | Eintragung eines datenbasisindex in das journal zur verbesserten rueckstellung. | |
DE69802437T2 (de) | Feinkörniger übereinstimmungsmechanismus für optimistische parallelsteuerung mit verriegelungsgruppen | |
DE69617511T2 (de) | Verfahren und Gerät zum Verwalten von Objekten in einer verteilten Objektbetriebsumgebung | |
DE69534867T2 (de) | Verfahren und System zur Lieferung geschützter Gerätetreiber | |
DE69112694T2 (de) | Verfahren zum Betrieb eines Datenverarbeitungssystems zur Ausführung von Datenbanktransaktionen. | |
DE69803624T2 (de) | Verfahren und Vorrichtung zur generationellen Freispeichersammlung in einem gemeinsam verwendeten Heapspeicher mittels mehrerer Prozessoreinheiten | |
DE2645537C2 (de) | ||
DE4210126C2 (de) | Verfahren zur dynamischen Dateierweiterung in einem Online-Datenbanksystem und Vorrichtung zur Durchführung des Verfahrens | |
DE3611223C2 (de) | ||
DE68926775T2 (de) | System und Verfahren für eine allgemeine Schnittstelle für Anwendungsprogramme | |
DE3786956T2 (de) | Verwaltung von registrierungsdaten in einem transaktionsorientierten System. | |
DE69223799T2 (de) | Einstellung der systemkonfiguration in einem datenverarbeitungssystem | |
DE69431499T2 (de) | Meta-data-Struktur und Handhabung | |
DE69033064T2 (de) | Verfahren zur Zuordnung von reellen Seiten zu virtuellen Seiten mit davon verschiedenen Seitengrössen | |
DE3842289C2 (de) | Verfahren zur Entwicklung von Programmen für ein verteiltes Datenverarbeitungssystem | |
DE69923658T2 (de) | Dynamische speicherplatzzuordnung | |
DE69130306T2 (de) | Steuerverfahren für die Vermeidung eines falschen Resets von einem allgemeinen Betriebsmittel und Mehrrechnersystem für die Ausführung des Verfahrens | |
DE112019001821B4 (de) | Verfahren und vorrichtung zur wiedergabe eines aktivierungsrahmens für unterbrechungsfreie speicherbereinigung (pause-less garbage collection) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |