-
Die Erfindung betrifft ein Verfahren
zur dynamischen Verwaltung eines Schreib-Lese-Speichers.
-
Eine solche dynamische Speicherwaltung
ist grundsätzlich
etwa aus dem US-Patent
US
5 784 699 A vorbekannt. Aus dieser Schrift ist ein virtueller
dynamischer Speicherverteiler (memory allocator) vorbekannt, der
den vorhanden Speicherplatz in Speicherblöcke gleicher Größe unterteilt,
die sogenannten Slots zugewiesen sind. Die Zuordnung wird in sogenannten
Freilisten, wobei für
jeden Slot jeweils eine Freiliste angelegt ist, verwaltet. Die Freiliste
bezeichnet die aktuell nicht belegten Speicherblöcke eines derartigen Slots.
-
Im Falle eines entsprechenden Speicherplatzbedarfs
aufgrund einer entsprechenden Softwareanfrage (request) werden die
erwähnten
Freilisten abgearbeitet und in Abhängigkeit hiervon ein Speicherblock
ausgewählt,
wobei der Speicherverteiler zwischen dem Bedarf an großformatigen
und kleinformatigen Speicherplätzen
und deren Abwicklung entweder als „small block allocation" oder als „large block
allocation" in Abhängigkeit
von einem vorbestimmten Schwellenwert unterscheidet. Der Speicherverwalter
versucht den jeweils kleinsten freien Speicherplatz zur Bearbeitung
des aktuellen request herauszufinden und hiermit den request zu
bedienen
-
Schreib-Lese-Speicher werden bei
nahezu sämtlichen
Datenverarbeitungssystemen genutzt. Im Zusammenhang mit derartigen
Speichern, insbesondere RAM-Speichern, besteht das Problem, daß der zunächst unbelegte
Speicher nach und nach mit Objekten unterschiedlicher Größe belegt
wird. Dabei erfolgt zunächst
eine kompakte Belegung des Speichers, d.h. die gespeicherten Objekte
werden nacheinander unter optimaler Ausnutzung des Speichers im
Speicher angelegt. Wenn nun einzelne Objekte gelöscht werden, entstehen Lücken im
Speicher. Grundsätzlich
ist der zuvor belegte Speicherplatz somit wieder beschreibbar. Allerdings
ist nun der Speicher fragmentiert. Dies bedeutet, daß der Speicher aus
beschriebenen und freien Speicherplätzen unterschiedlicher Größe besteht.
Dabei besteht das Problem, daß oftmals
eigentlich genügend
freier, aber nicht genügend
freier Speicherplatz in der jeweils benötigten Größe zur Verfügung steht. Der Anteil des Speichers,
der durch diese Fragmentierung verlorengeht, kann mitunter erheblich
sein.
-
Zu einer verbesserten Speicherverwaltung stehen
daher Systeme zur Verfügung,
die eine Kompaktierung des Speichers vorsehen. So sind beispielsweise
Verfahren bekannt, bei denen genutzter Speicher derart in einen
weiteren Speicherbereich umgespeichert wird, daß eine zusammenhängende Speicherung
entsteht und der frei werdende Platz somit ebenfalls als zusammenhängender
freier Speicherplatz zur Verfügung
steht.
-
Alternativ sind auch Verfahren bekannt,
in denen belegte Speicher derart zusammengeschoben werden, daß ein größerer zusammenhängender
freier Speicherbereich entsteht.
-
Bei beiden vorstehend erläuterten
Verfahren der Speicherverwaltung besteht das Problem, daß bereits
zugewiesene Speicherplätze
verschoben werden müssen.
Es ist daher erforderlich, sämtliche Referenzen
mit denen bestimmte Speicherblöcke
angesprochen werden, neu zu adressieren. In der Regel wird dies
durch relativ aufwendige Verweisungstechniken erledigt, so daß im Ergebnis
der Zugriff auf den Speicher verlangsamt ist. In jedem Fall ergibt sich
eine verstärkte
Prozessorbelastung.
-
Ein weiteres Problem der vorstehenden Techniken
besteht darin, daß das
Verschieben von Speicherobjekten als aufwendig bezeichnet werden muß. In diesen
Zeiten steht der Speicher nicht zur Nutzung zur Verfügung. Die
vorstehenden Lösungen sind
daher zum Einsatz in Verbindung mit Echtzeitsystemen, beispielsweise
der Automatisisierungstechnik, unzureichend. Als Stand der Technik
gibt es Ansätze
um dieses Problem durch eine stufenweise Verschiebung zu lösen. Hierdurch
soll der Speicher weiterhin benutzbar bleiben. Es stellt sich das
Problem, daß Vorkehrungen
geschaffen werden müssen,
daß einzelne
Anwendungen auch in Verbindung mit bereits teilweise verschobenen
Objekten lauffähig bleiben.
Im Ergebnis ergibt sich auch hier ein verlangsamter Speicherzugriff
bzw. eine Verlangsamung des Datenverarbeitungssystems insgesamt.
-
Eine alternative Lösung des
Problems besteht darin, grundsätzlich
alle zu speichernden Objekte gleicher Größe abzulegen. Hierdurch ist
sichergestellt, daß der
Speicher grundsätzlich
kompakt belegt werden kann. Problematisch dabei ist, daß erheblicher
Speicherbedarf dafür
verwendet wird, daß alle
Objekte in einer Größe abgelegt
werden müssen, der
dem größten anzunehmenden
Objekt entspricht. Alternativ ist auch eine Unterteilung aller Objekte
in kleinere gleich große
Teilobjekte vorstellbar. Die generelle Aufspaltung in Teilobjekte
hat wiederum den Nachteil, daß grundsätzlich eine
Verweisverwaltung vorgesehen werden muß, um die in Teilblöcke unterteilten
Objekte zusammen zu führen.
-
Der Erfindung liegt daher die Aufgabe
zugrunde, ein Verfahren zur Verwaltung eines Schreib-Lese-Speichers
zu schaffen, das die vorstehend erläuterten Nachteile nach Möglichkeit
vermeidet und bei möglichst
gleichbleibender Rechner- und Speicherleistung
eine optimale Speicherausnutzung erlaubt.
-
Die der Erfindung zugrunde liegende
Aufgabe wird mittels eines Verfahrens zur dynamischen Verwaltung
eines Schreib-Lese-Speichers
gemäß Hauptanspruch
gelöst.
Dabei liegt der Erfindung die Idee zugrunde, den Speicher mit einer
Speicherverwaltung zu versehen, die mehrere, zumindest zwei, unterschiedliche
Verfahren der Speicherung mit entsprechen der Verwaltung beherrscht
und demgemäß in Abhängigkeit
von dem zu speichernden Objekt und dem aktuell vorhandenen Speicherzustand
die jeweils geeignete Speichermethode auswählt. In der Regel wird die
Speichermethode in Abhängigkeit
von der Größe des zu
speichernden Objektes im Bezug zur Größe des jeweils freien Speicherplatzes
gewählt werden.
Hierzu versteht die Speicherverwaltung den Speicher zunächst grundsätzlich als
in gleich große Teilblöcke unterteilt,
wobei sie in Abhängigkeit
von der vorstehend erläuterten
Bedingung unterscheidet, ob ein zu speicherndes Objekt in aufeinanderfolgenden
Blöcken,
also zusammenhängend
gespeichert wird, oder verteilt angelegt wird.
-
Im Falle der Speicherung eines Objekts
in Form von verteilten Teilblöcken
werden die Teilblöcke dieses
Objekts jeweils mit Links derart versehen, daß alle Teilblöcke dieses
Objekts über
Links verbunden sind. Es handelt sich um die sogenannte Speicherung
in Form eines Graphen.
-
Je nach Art und Größe der einzelnen
Objekte wird eine bestimmte Speichermethode ausgewählt. Beispielhaft
können
Instanzen von Klassen grundsätzlich
verteilt angeordnet werden.
-
In vorteilhafter Ausgestaltung legt
die Speicherverwaltung zusätzlich,
zumindest für
einen Teil der verteilt gespeicherten Objekte, eine mit Links verkettete
Liste der einzelnen Teilblöcke
an.
-
Im Sinne eines möglichst schnellen Speicherzugriffs
ist es im Falle der verteilten Speicherung sinnvoll, eine Baumstruktur
zu wählen.
Dabei werden die verteilt gespeicherten Teilblöcke in Form eines verzweigten
Baumes miteinander verlinkt.
-
Eine weitere Erhöhung der Effizienz der Speicherverwaltung
in Verbindung mit diesen Baumstrukturen gelingt dadurch, daß jedem
Baum ein Wurzelblock zugeordnet wird, das die wesentlichen Informationen über das
in Form eines Baumes gespeicherten Objektes, beispielsweise dessen
Größe, enthält.
-
In vorteilhafter Ausgestaltung ist
in dem Wurzelblock eine Kennzahl über die Verzweigungstiefe des
Baumes abgelegt.
-
Eine verbesserte Speicherverwaltung
ergibt sich auch dadurch, daß jedem
Teilblock ein Speicherflag zugeordnet wird, das eine Information
darüber enthält, ob der
jeweilige Teilblock Bestandteil eines zusammenhängend gespeicherten Objektes
oder eines verteilt gespeicherten Objektes. ist. Für den Fall, daß die Speicherverwaltung
lediglich zwischen zwei Speicherverfahren unterscheidet, kann es
sich bei dem Flag um ein einfaches Bit handeln.
-
In vorteilhafter Ausgestaltung kann
das Speicherflag lediglich in einem ungenutzten BIT des jeweiligen
Teilblocks ab gelegt werden. Hierdurch wird Speicherplatz gespart.
-
In Verbindung mit den vorstehend
erläuterten
Wurzelblöcken
ist es sinnvoll, wenn der Wurzelblock eine Kennzahl über die
jeweilige Verzweigungstiefe des zugehörigen Baumes enthält.
-
Dabei kann in dem den Wurzelbock
darstellenden Teilblock das Speicherflag und die Kennzahl über die
Verzweigungstiefe des Baumes sinnvoll zu einem einzigen Speicherelement zusammengefaßt werden.
Hierdurch wird abermals der Speicherbedarf reduziert.
-
In Verbindung mit den als zusammenhängender
Block gespeicherten Objekten kann eine zusätzliche Linkliste angelegt
werden, die sicherstellt, daß alle
Teilblöcke
eines Objekts über
Links vom ersten Teilblock erreichbar sind. Dabei erkennt die Speicherverwaltung,
daß die
beteiligten Teilblökke
Bestandteil eines gemeinsamen Objekts sind.
-
In abermals vorteilhafter Ausgestaltung
legt die Speicherverwaltung einen Bitvektor an, wobei jedes Bit
einem Teilblock des Speichers entspricht. Dabei enthält jedes
Bit des Bitvektors eine Information darüber, ob zwei aufeinanderfolgende
Blöcke
Teilblöcke
desselben Objektes sind.
-
In alternativer Ausgestaltung kann
jedem Teilblock des Speichers ein Objektflag zugeordnet sein, das
anzeigt, ob zwei aufeinanderfolgende Teilblöcke Bestandteile desselben
Objektes sind. Dabei gilt für
die Belegung der Objektflag dasselbe was zuvor für die einzelnen Bits des Bitvektors
gesagt wurde.
-
Die Erfindung wird nachstehend anhand mehrerer
in der Zeichnung nur schematisch dargestellten Ausführungsbeispiele
näher erläutert.
-
Es zeigen:
-
1 eine
dem Stand der Technik entsprechende Speicherverwaltung in einer
Prinzipdarstellung,
-
2 einen
Speicher mit Speicherverwaltung,
-
3 eine
Speicherung eines Objekts in zusammenhängenden und verteilten Teilblöcken jeweils
mit einem Speicherflag,
-
4 eine
Speicherung desselben Objekts mit verteilten Teilblöcken ohne
Speicherflag,
-
5 die
Speicherung eines weiteren Objekts mit zusammenhängenden Teilblöcken und
mit verteilt in einer Baumstruktur angelegten Teilblöcken mit
einem Speicherflag,
-
6 eine
Speicherung des Objektes aus 5 als
zusammenhängender
Block und mit verteilt in einer Baumstruktur gespeicherten Teilblöcken mit einem
kombinierten Speicherflag,
-
7 Speicherung
eines weiteren Objektes als zusammenhängender Block mit einer zusätzlichen
Linkliste,
-
8 Speicherung
eines weiteren Objekts als zusammenhängender Block mit einem zugeordneten
Bitvektor,
-
9 Speicherung
eines Java-Objekts in zwei verteilten Blöcken und
-
10 Speicherung
eines weiteren Java-Objektes mit zwei zugeordneten Bitvektoren.
-
1 zeigt
eine herkömmliche
Speicherverwaltung mit einem Speicher 1, in dem verschiedene Objekte
OB1 bis OB3 in den Speicherbereichen abgelegt sind. Zwischen den
Objekten OB1 bis OB3 finden sich inzwischen frei gewordene Speicherplätze, die
jedoch als solche nicht hinreichend groß sind, um ein weiteres Objekt
OB4 in dem Speicher 1 zusammenhängend anzuordnen.
-
Als Stand der Technik sind zur Lösung dieses
Problems Softwaretools bekannt, mit denen die Objekte OB1 bis OB3
derart umgespeichert bzw. verschoben werden können, daß die belegten Speicherplätze sowie
die unbelegten Speicherplätze
anschließend
jeweils zusammenhängend
angeordnet sind, so daß der
fragmentierte Speicher 1 in einen unfragmentierten Speicher 1' überführt wird.
Danach ist der frei werdende Speicherplatz FS 4 hinreichend
groß um
das Objekt OB4 aufzunehmen.
-
Das Problem derartiger Speicherfragmentierungen
besteht darin, daß der
Speicher zu Zeiten der Umorganisation des Speichers 1 üblicherweise
nicht zum Zugriff bereitsteht. Eine derartige Lösung ist daher für Echtzeitsysteme
in der Regel nicht anwendbar.
-
Im Rahmen der erfindungsgemäßen Lösung wird
daher dem Speicher 1 gemäß der Darstellung in 2 eine Speicherverwaltung 2 zugeordnet,
die den Speicher zunächst
in gleich große
Teilblöcke B1–Bn, zumindest virtuell, aufteilt. Die Speicherverwaltung 2 kann
ein zusätzlicher
Prozessor, eine Prozessorfunktion oder ein im Arbeitsspeicher eines Prozessors
eines Datenverarbeitungssystems lauffähiges Softwaretool sein.
-
Nach dieser. realen oder virtuellen
Unterteilung des Speichers 1 ergeben sich für die Speicherung
von Objekten mehrere Möglichkeiten,
wobei im Rahmen der Erfindung die Speicherverwaltung 2 jeweils
zumindest zwei unterschiedliche Methoden der Speicherung beherrscht.
-
Beispielhaft sind in 3 zwei mögliche Methoden der Speicherung
zusammengestellt, die von dem Speicherelement zumindest beherrscht
werden. Es könnte
sich dabei zum einen um eine Speicherung in Form zusammenhängender
Teilblöcke
gemäß der linken
Darstellung in 3 oder
um eine verteilte Speicherung gemäß der rechten Darstellung in 3 in Form von drei verteilt
angeordneten Teilblöcken 3', 4', 5' handeln, wobei
die verteilt angeordneten Teilblöcke 3` , 4', 5' jeweils durch einen Link L miteinander
verbunden sind. Der Link L auf den jeweils nächsten Block wird in dem Teilblock
selbst, wie beispielsweise hier in den Teilblökken 3' und 4' angelegt.
-
Ein Speicherflag F im hier vorliegenden
Falle von zwei möglichen
Speicherungen gibt darüber Auskunft,
welche Art der gewählten
Speicherung vorliegt. Im vorliegenden Beispiel steht der Flagwert
F = 0 für
eine zusammenhängende
und der Flagwert F = 1 für
eine verteilte Speicherung.
-
Gemäß der Darstellung in 4 ist selbstverständlich auch
eine Speicherung ohne das genannte Speicherflag F möglich. Der
von dem zu speichernden Objekt belegte Speicherplatz fällt entsprechend
geringer aus.
-
Eine alternative Form der Speicherung
ist in 5 dargestellt.
Gemäß der linken
Darstellung in 5 kann
auch eine Speicherung eines Objektes in Form von zusammenhängend abgelegten
Teilblöcken 3, 4, 5 und 6 oder
eine Speicherung in Form von verteilt gespeicherten Teilblöcken 10 bis 14 gemäß der rechts
angeordneten Darstellung in 5 erfolgen.
Dabei weist sowohl die zusammenhängende Speicherung
gemäß der links
angeordneten Darstellung in 5 sowie
auch die verteilte Anordnung gemäß der rechts
angeordneten Darstellung in 5 eine
Speicherflag F auf. Beiden Darstellungen gemeinsam ist, daß die Speicherverwaltung
in dem als ersten Teilblock 3 bzw. 10 ein der
Klasse des jeweiligen Objektes entsprechende Klassenelement 15 sowie
ein der Länge
des Objektes entsprechendes Längenelement 16 vorgesehen
ist. Die Speicherelemente 15 und 16 stellen somit
an sich nicht Bestandteile des abzuspeichernden Objektes sondern
vielmehr der Identifikation des Objektes dar. Diese Informationen
erlauben eine komfortablere Speicherverwaltung.
-
Die Auswahl der Speichermethode erfolgt dabei
bei den vorstehenden wie auch den nachfolgenden Methoden der Speicherverwaltung
beispielsweise danach, wie sich der zur Verfügung stehende freie Speicherplatz
FS zur Größe der zu
speichernden Objekte OB verhält.
Im Regelfall wird die zusammenhängende
Speicherung dann gewählt,
wenn der freie Speicherplatz FS dies zuläßt. Sollte dies nicht möglich sein,
wird in der Regel auf eine verteilte Speicherung zurückgegriffen.
-
In dem in 5 dargestellten Ausführungsbeispiel ist das Speicherobjekt
in einer Baumstruktur angelegt. Eine derartige Baumstruktur empfiehlt
sich beispielsweise in Verbindung mit der Speicherung von Arrays.
-
Gemäß der rechten Darstellung in 5 enthält das erste Teilobjekt der
Baumstruktur den sogenannten Wurzelblock 10 neben einem
Link L lediglich Informationen, die das gespeicherte Objekt als
solches beschreiben. Hierzu zählt
neben Klassenelement 15 und dem Längenelement 16 auch
eine Kennzahl K der Verzweigungstiefe. Die Verzweigungstiefe beträgt im vorliegenden
Falle 2. Bei einer speicherplatzoptimierten Anordnung kann
dabei das Speicherflag F und die Kennzahl K in einem gemeinsamen
Speicherelement kombiniert werden.
-
Eine derart kombinierte Darstellung
ist in der rechten Darstellung von 6 ersichtlich,
die im übrigen
vollständig
der Darstellung in 5 entspricht.
-
Der Vorteil der in 5 und 6 dargestellten Baumstrukturen
besteht darin, daß auf
die einzelnen Teilblöcke 12, 13, 14 von
einer Stelle, nämlich
vom Wuzelblock 10 aus schneller zugegriffen werden kann,
als dies bei einer Liste, wie rechts in 3 dargestellt möglich wäre. Hierzu besteht der Teilblock 11 besteht
aus einer Linkliste, wobei die Links auf die Teilblöcke 12, 13, 14 der
Baumstruktur verweisen.
-
Eine Linkliste kann gemäß 7 auch in Verbindung mit
einem gemäß 7 zusammenhängend gespeicherten
Objekt sinnvoll sein. Bei der zusammenhängenden Speicherung ist es
für eine
Speicherverwaltung 2 unter bestimmten Umständen nicht möglich, anhand
der Information, wie sie etwa gemäß 3 in Verbindung mit den Teilblöcken 4 und 5 abgespeichert
sind, zu bestimmen, ob die Teilblöcke 4 und 5 als
Bestandteil eines gemeinsamen Objektes mit Teilblock 3 anzusehen
sind.
-
Diese Information ergibt sich erst
in Verbindung mit den im Teilblock 3 gespeicherten Informationen
insbesondere aus dem Klassenelement 15. Dieser Zusammenhang
ergibt sich für
die verteilte Speicherung nach 3 für die Teilblöcke 3' und 4' schon aus der
bloßen
Existenz der Linkelemente L.
-
Aus diesem Grund kann es daher sinnvoll sein,
gemäß der Darstellung 7 zusätzlich zu der zusammenhängenden
Speicherung jeweils eine weitere Linkliste in den Teilblökken 20 und 21 anzulegen. Dies
hat zunächst
den Vorteil, daß alle
an einem Objekt beteiligten Teilblöcke 3, 4, 5, 6 über ein
einziges Linkelement L des Teilblocks 3 erreichbar sind.
-
Bei einer alternativen oder zusätzlichen
Ausgestaltung kann gemäß 8 in Verbindung mit einer
zusammenhängenden
Speicherung der Teilblöcke 3, 4, 5, 6 und 7 ein
Bitvektor 17 angelegt sein, der zu jedem Teilblock 3, 4, 5, 6 ein
Bit enthält,
das darüber
Auskunft gibt, ob der folgende Teilblock Bestandteil desselben Objektes
ist oder nicht. Im vorliegenden Falle gehören die Teilblöcke 3, 4, 5 und 6 demselben
Teilobjekt an. Entsprechend sind die in der Darstellung des Bitvektors 17 von
oben nach unten die ersten drei Bits gesetzt. Der Teilblock 7 ist
Bestandteil eines anderen Objektes oder nicht belegt. Dementsprechend
ist das in der Darstellung des Bitvektors 17 von oben gezählte vierte
Bit nicht gesetzt, da der nachfolgende Block 7 nicht demselben
Objekt angehört.
-
Gemäß 9 ist eine andere Möglichkeit dargestellt, wie
die Speicherverwaltung 2 darüber befinden kann, welche Methode
der Speicherung gewählt
wird. Im vorliegenden Beispiel gibt das Klassenelement 15 darüber Auskunft, daß es sich
bei dem zu speichernden Objekt um eine Instanz handelt. Demzufolge
wählt die
Speicherverwaltung 2 grundsätzlich eine verteilte Speicherung
im vorliegenden Beispiel in Form von durch Linkelementen L verbundenen
Teilblöcken 3 und 4 aus.
-
Wie aus 9 deutlich wird, kann also die Methode
der Speicherung auch in Abhängigkeit
von der Art des zu speichernden Objektes bestimmt werden.
-
Gemäß einer besonderen Ausführung der Erfindung
kann die erfindungsgemäße Speicherverwaltung
zur Implementierung einer virtuellen Java-Maschine verwendet werden.
Hierbei stellt die virtuelle Java-Maschine die Speicherverwaltung 2 dar. Sofern
Instanzen grundsätzlich
verteilt gemäß 9 angeordnet werden; muß kein Speicherflag
F gesetzt und kein entsprechender Speicherplatz belegt werden.
-
In Verbindung hiermit kann es sinnvoll
sein, daß ein
zusätzlicher
Bitvektor 18 angelegt wird, der zu jedem Speicherelement
eines Teilblocks 3, 4, 5, 6 eine
Information darüber
enthält,
ob es sich bei dem jeweiligen Speicherelement bzw. Wort um ein Linkelement
L handelt oder nicht. Zusätzlich
zu dem Bitvektor 18 ist auch in Verbindung mit der Speicherung von
Instanzen gemäß 10 die Verwendung des Bitvektors 17 sinnvoll,
der angibt, ob der jeweils nachfolgende Teilblock Bestandteil desselben
Objektes ist oder nicht.
-
Vorstehend ist somit ein Verfahren
der Speicherverwaltung beschrieben, das sich dadurch auszeichnet,
jeweils unterschiedliche Speichermethoden zu beherrschen, die in
Abhängigkeit
von dem zu speichernden Objekt und dem jeweiligen Speicherangebot
ausgewählt
werden.