-
HINTERGRUND DER ERFINDUNG
-
1. GEBIET DER ERFINDUNG
-
Die
Erfindung betrifft ein Verfahren und eine Vorrichtung zur Informationsverarbeitung,
insbesondere ein Speicherzuordnungssystem.
-
2. HINTERGRUND DES STANDS
DER TECHNIK
-
Nach
dem Stand der Technik werden Informationen, die sich auf die Speicherzuordnung
beziehen, nicht auf eine Weise gespeichert, die es ermöglicht,
dass sie durch Prozesse außerhalb
des Zuordners überprüft werden.
Die Möglichkeit,
diese Informationen zu überprüfen, ist
wünschenswert,
da ein Verständnis
der Gesamtkonfiguration des zugeordneten Speicherplatzes und des
freien Speicherplatzes nützlich
ist, um die Leistung eines Computersystems zu beurteilen und zu
optimieren, insbesondere wenn Anwendungen betroffen sind, die für lange
Zeiträume
(z. B. länger
als fünf
Minuten) vorhanden sind. Desktop-Anwendungen
sind häufig
für Zeiträume vorhanden,
die in Monaten gemessen werden. Um zu überprüfen, wie Speicher für bestimmten
Code nach dem Stand der Technik zugeordnet wird, ist es notwendig,
diesen Code zu modifizieren, bevor er ausgeführt wird. Somit ist der Code,
der ausgeführt
wird, nicht identisch mit dem Code, für den die Informationen, die
sich auf die Speicherzuordnung beziehen, gesucht werden.
-
Techniken nach dem Stand der
Technik
-
Computer
werden verwendet, um Informationen zu verarbeiten. Computer führen Programme
aus, welche die Schritte angeben, die verwendet werden, um die Informationen
zu verarbeiten. Ein Computerbetriebssystem steuert die Ausführung der
Programme. Einige Computerbetriebssysteme machen es möglich, dass
mehrere Programme gleichzeitig ausgeführt werden. Bei diesen Betriebssystemen
sind mehrere Prozesse eingerichtet, welche die Ausführung mehrerer
Programme ermöglichen.
Das Betriebssystem ordnet die Verarbeitungszeit eines Prozessors
den Prozessen zu. Programminformationen und Daten, die von den Programmen
verarbeitet werden, werden in Speichervorrichtungen des Computers
gespeichert. Wenn die Ausführung eines
Programms beginnt, wird dem entsprechenden Prozess Speicherplatz
in den Speichervorrichtungen zugeordnet. Wenn einem Prozess keine
angemessene Menge an Speicherplatz zugeordnet wird, gerät der Prozess,
wenn er ausgeführt
wird, unter Umständen
in einen fatalen Zustand von unzureichendem Speicher. Wenn die Ausführung eines
Programms endet, wird der Speicherplatz, der dem Prozess zugeordnet
wurde, frei gegeben, damit der Speicherplatz erneut verwendet werden
kann.
-
Es
werden Techniken benötigt,
um Speicherplatz einem Prozess zuzuordnen und um den Speicherplatz
frei zu geben oder seine Zuordnung aufzuheben, nachdem der Prozess
ihn nicht mehr benötigt.
In der Vergangenheit wurden in der Programmiersprache C standardisierte
C-Bibliotheksroutinen bereitgestellt, um es möglich zu machen, dass Speicherplatz
zugeordnet und frei gegeben wird. Die Standard-C-Bibliotheksroutine
zum Zuordnen von Speicherplatz wird als „malloc"-Funktion
bezeichnet. Die Standard-C-Bibliotheksroutine zum Freigeben von
Speicherplatz wird als „free"-Funktion bezeichnet.
-
Die „malloc"-Funktion wird mit
einem Parameter ausgeführt,
der die Größe des Speicherblocks,
der zugeordnet werden soll, angibt. Die „malloc"-Funktion sucht einen Speicherplatz-Block
mit angemessener Größe und gibt
einen Zeiger zum Anfang des Speicherblocks zurück.
-
Die „free"-Funktion wird mit
einem Parameter ausgeführt,
der einen Zeiger angibt, der zu einem Speicherblock zeigt, der zuvor
von der „malloc"-Funktion zugeordnet
wurde. Die „free"-Funktion gibt den
angegebenen Speicherblock frei, damit dieser erneut vom selben Prozess
verwendet werden kann.
-
Die „malloc"-Funktion pflegt
mehrere Listen freier Blöcke
nach Größe und ordnet
Speicherplatz aus der geeigneten Liste zu. Wenn die „malloc"-Funktion nicht in
der Lage ist, einen nicht-zugeordneten Speicherblock mit ausreichender
Größe zu finden,
ruft sie eine „sbrk"-Funktion auf, um
das Betriebssystem zu veranlassen, mehr Speicherplatz zur Verfügung zu
stellen, aus dem Zuordnungen vorgenommen werden können.
-
Wenn
gewünscht
wird, die Größe eines
Speicherblocks zu ändern,
der bereits zugeordnet wurde, kann die „realloc"-Funktion aufgerufen werden. Die „realloc"-Funktion wird mit einem Parameter ausgeführt, der
den Zeiger angibt, der zu einem Speicherblock zeigt, der bereits
zugeordnet wurde, und einem anderen Parameter, der die neue Größe angibt,
die für
diesen Speicherblock gewünscht
wird. Die „realloc"-Funktion ordnet
einen Speicherblock mit ausreichender Größe zu und gibt einen Zeiger
zu dem neuen Speicherblock zurück.
Der Zeiger kann zu einem Speicherblock zeigen, der dieselbe Anfangsposition
besitzt wie der Speicherblock, der zu dem Zeitpunkt vorhanden war,
als die „realloc"-Funktion aufgerufen
wurde, oder der Zeiger kann zu einem Speicherblock zeigen, der eine
andere Anfangsposition besitzt, wenn unzureichender Speicherplatz
in dem Speicherblock vorhanden war, der vorher zugeordnet wurde,
und Speicherplatz frei geben, der an diesen Speicherblock angrenzt.
-
Während die
Funktionen „malloc" und „free" geeignet sind, um
Speicherblöcke
zu beziehen und frei zu geben, bieten sie nicht die Möglichkeit,
den aktuellen Status von freiem und zugeordnetem Speicherplatz zu überprüfen. Diese
Möglichkeit
ist wünschenswert,
da ein Verständnis
der Gesamtkonfiguration von zugeordnetem Speicherplatz und freiem
Speicherplatz nützlich
wäre für die Beurteilung
und Optimierung der Leistung eines Computersystems, insbesondere
bei langzeitigen Prozessen. Vor allem wäre es nützlich, wenn es möglich wäre, einen
Prozess anzugeben und Informationen geliefert zu bekommen, welche
die Blöcke
des Speicherplatzes angeben, die dem Prozess zugeordnet sind, sowie
ihre Positionen in dem GesamtSpeicherplatz des Computersystems.
-
In
der Vergangenheit konnte ein Programm umgeschrieben werden, um Aufrufe
für eine „mallinfo"-Funktion einzubeziehen.
Die „mallinfo"-Funktion liefert
Informationen, welche die Speicherplatzzuordnung beschreiben. Typische
Informationen, die von der „mallinfo"-Funktion zur Verfügung gestellt
werden, beinhalten den Gesamtspeicherplatz in der Arena, die Anzahl
der normalen Blöcke,
die Anzahl der kleinen Blöcke,
die Anzahl der Holding-Blöcke,
den Speicherplatz in Holding-Block-Headern, den Speicherplatz in
verwendeten kleinen Blöcken,
den Speicherplatz in freien kleinen Blöcken, den Speicherplatz in
normalen verwendeten Blöcken,
den Speicherplatz in freien normalen Blöcken, die Kosten zur Aktivierung
der Keep-Option, die maximale Größe von kleinen
Blöcken,
die Anzahl von kleinen Blöcken
in einem Holding-Block, den Rundungsfaktor für kleine Blöcke, den Speicherplatz (einschließlich Overhead),
der in normalen Blöcken
zugeordnet ist, die Anzahl der normalen Blöcke, die zugeordnet sind, und
die Anzahl von Bytes, die zur Aufrechterhaltung der freien Baumstruktur
verwendet werden. Während
diese Informationen nützlich
sind, um die Leistung zu analysieren, müssen die Aufrufe für die „mallinfo"-Funktion dem Programm,
das analysiert wird, hinzugefügt
werden. Somit ist die Verwendung der „mallinfo"-Funktion eine invasive Vorgehensweise,
die nicht die Analyse eines Programms in der Form erlaubt, in der
das Programm verwendet werden soll.
-
Die
Einbeziehung der „mallinfo"-Funktion steigert
die Komplexität
des Codes, was die Entwicklungs- und Wartungskosten erhöht. Ferner
können
die Speicherplatz-Zuordnungsinformationen,
die mit einem Prozess verbunden sind, der die „mallinfo"-Funktionalität aufweist, durch die Einbeziehung
der „mallinfo"-Funktion verfälscht werden.
Das heißt,
die „mallinfo"-Funktionalität kann die
Speicherzuordnungsinformationen verändern. Diese Veränderung
kann zu Schwierigkeiten bei der Durchführung einer Beurteilung der
Speicherzuordnung durch einen Anwendungsentwickler führen.
-
Um
die „mallinfo"-Funktionalität in einen
Prozess einzubeziehen, der Code ausführt, der diese Funktionalität nicht
aufweist, ist es notwendig, den Prozess zu beenden und einen neuen
Prozess einzuleiten, der Code ausführt, der Aufrufe für die „mallinfo"-Funktion enthält. Somit
ist es mühselig,
diese Funktionalität
zu Code hinzuzufügen,
der bereits ausgeführt
wird.
-
Duke
A H: „Storage
allocation mechanism" IBM
Technical Disclosure Bulletin, FEB. 1975, USA, Jahrgang 17, Nummer
19, Seiten 2606–2610,
XP002084222, ISSN 0018–8689,
beschreibt einen „Speicherzuordnungsmechanismus", der das Verkehrsaufkommen
in beide Richtungen zwischen primärem Speicher und Hilfsspeicher
in einem virtuellen Speicherdaten verarbeitenden System minimiert,
indem er die Anzahl der Seiten des virtuellen Speichers, die tatsächlich verwendet
werden, minimiert. Dies wird erreicht, indem teilweise gefüllte virtuelle
Speicherseiten aufgefüllt
werden, bevor zusätzliche
virtuelle Speicherseiten verwendet werden.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Ein
erster Aspekt der Erfindung stellt ein Verfahren zur Erhaltung von
Speicherzuordnungsinformationen bereit, das die folgenden Schritte
umfasst: Reservieren einer Speicherort-Arena, wobei das Verfahren
gekennzeichnet ist durch:
die Speicherort-Arena, die einen
Deskriptorblock und eine Vielzahl von Speicherblöcken umfasst;
Speichern
der genannten Speicherzuordnungsinformationen, die mit der genannten
Vielzahl von Speicherblöcken
verbunden sind, in dem genannten Deskriptorblock, wobei die genannten
Speicherzuordnungsinformationen umfassen:
einen ersten Wert
einer Anzahl von Seiten, die Buckets mit einer ersten Bucket-Größe, instanziiert
in einem der Vielzahl von Speicherblöcken, welcher der genannten
ersten Bucket-Größe entspricht,
umfasst;
einen zweiten Wert einer Anzahl von Buckets, zugeordnet
in einer der genannten Anzahl von Seiten, die Buckets mit der genannten
ersten Bucket-Größe, instanziiert
in dem einen der Vielzahl von Speicherblöcken, welcher der genannten
ersten Bucket-Größe entspricht,
umfasst;
und
einen Zeiger zu einer verketteten Liste,
die nicht-zugeordnete Buckets identifiziert in der genannten einen
der genannten Anzahl von Seiten mit der genannten ersten Bucket-Größe, instanziiert
in dem einen der Vielzahl von Speicherblöcken, welcher der genannten
ersten Bucket-Größe entspricht,
umfasst.
-
Ein
zweiter Aspekt der Erfindung stellt eine Vorrichtung zur Erhaltung
von Speicherzuordnungsinformationen bereit, der umfasst:
ein
Computersystem, das einen Prozessor und Speicher umfasst, wobei
ein Teil des genannten Speichers als Speicherort-Arena reserviert
ist, gekennzeichnet durch:
die genannte Speicherort-Arena,
die einen Deskriptorblock und eine Vielzahl von Speicherblöcken umfasst, wobei
der genannte Deskriptorblock umfasst:
eine erste Speicherstelle,
die einen Wert einer Anzahl von Seiten speichert, die Buckets mit
einer ersten Bucket-Größe, instanziiert
in einem der Vielzahl von Speicherblöcken, welcher der genannten
ersten Bucket-Größe entspricht,
umfasst;
eine zweite Speicherstelle, die einen zweiten Wert
einer Anzahl von Buckets speichert, zugeordnet in einer der genannten
Anzahl von Seiten, die Buckets mit der genannten ersten Bucket-Größe, instanziiert
in dem einen der Vielzahl von Speicherblöcken, welcher der genannten
ersten Bucket-Größe entspricht,
umfasst; und
eine dritte Speicherstelle, die einen Zeiger zu
einer verketteten Liste speichert, die nicht-zugeordnete Buckets in
der genannten der genannten Anzahl von Seiten identifiziert, die
Buckets mit der genannten ersten Bucket-Größe, instanziiert
in dem einen der Vielzahl von Speicherblöcken, welcher der genannten
ersten Bucket-Größe entspricht,
umfasst.
-
Die
Erfindung stellt ein Verfahren und eine Vorrichtung zur nicht-invasiven
Bereitstellung von Informationen, die sich auf die Speicherplatzzuordnung
beziehen, bereit. Die Erfindung macht es möglich, dass die Speicherplatzzuordnung
von Prozessen außerhalb
des Speicherplatzzuordners überprüft werden
kann, ohne dass es erforderlich ist, den Code für Prozesse, denen Speicherplatz
zugeordnet wird, zu modifizieren.
-
Eine
Ausführungsform
der Erfindung stellt ein Verfahren und eine Vorrichtung zur Erhaltung
von Speicherzuordnungsinformationen bereit, welche die Schritte
des Reservierens einer Speicherort-Arena, die eine Datenstruktur
zum Speichern der Speicherzuordnungsinformationen definiert, sowie
des Speicherns der Speicherzuordnungsinformationen umfasst.
-
Die
Speicherzuordnungsinformationen umfassen einen ersten Wert einer
Anzahl von Seiten mit einer ersten Bucket-Größe, instanziiert in der Speicherort-Arena.
Die Speicherzuordnungsinformationen umfassen außerdem einen zweiten Wert einer
Anzahl von Buckets, zugeordnet in einer der Anzahl von Seiten mit
der ersten Bucket-Größe, instanziiert
in der Speicherort-Arena. Die Speicherzuordnungsinformationen umfassen ferner
einen Zeiger zu einer verketteten Liste, die nicht-zugeordnete Buckets
in einer der Anzahl von Seiten mit der ersten Bucket-Größe, instanziiert
in der Speicherort-Arena, identifiziert.
-
Eine
Ausführungsform
der Erfindung stellt auch ein Verfahren und eine Vorrichtung bereit,
um die Speicherzuordnungsinformationen zu modifizieren, wenn eine Änderung
in der Speicherzuordnung stattfindet. Die Erfindung macht es möglich, dass
die Speicherzuordnungsinformationen entsprechend modifiziert werden können, wenn
Speicher zugeordnet wird und wenn Speicher frei gegeben wird.
-
Eine
Ausführungsform
der Erfindung stellt ein Verfahren und eine Vorrichtung bereit,
um die Datenstruktur zu identifizieren, indem in der Datenstruktur
ein Datenstrukturidentifizierer gespeichert wird. Der Datenstrukturidentifizierer
ist vorzugsweise ein bekannter oder ohne weiteres identifizierter
Wert, der in einer bekannten oder ohne weiteres identifizierten
Speicherstelle innerhalb der Datenstruktur gespeichert wird. Die Speicherstelle,
an welcher der Datenstrukturidentifizierer gespeichert wird, wird
absichtlich externen Programmen bekannt gemacht, so dass die externen
Programme wissen, wo sie nach dem Datenstrukturidentifizierer suchen
müssen,
und wissen, wonach sie an dieser Speicherstelle suchen müssen, um
die Datenstruktur zu identifizieren.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
ein Diagramm, das ein Beispiel einer Speicherort-Arena nach einer
Ausführungsform
der Erfindung auf einer Vorrichtung mit einer Vier-Kilobyte-Seitengröße zeigt.
-
2 ist
ein Diagramm, das ein Beispiel einer Speicherseite nach einer Ausführungsform
der Erfindung zeigt.
-
3 ist
ein Blockdiagramm, das ein Allzweck-Computersystem zeigt.
-
4 ist
ein Ablaufdiagramm, das eine Ausführungsform der Erfindung zeigt,
welche die Fragmentierung bei der Zuordnung von Speicherplatz zu
einem Prozess minimiert.
-
DETAILLIERTE BESCHREIBUNG
DER ERFINDUNG
-
Es
werden ein Verfahren und eine Vorrichtung zur Zuordnung von Speicher
in einem Computersystem und zur Bereitstellung von Informationen,
die sich auf die Speicherzuordnung beziehen, beschrieben. In der folgenden
Beschreibung werden zahlreiche spezifische Details wie Bucket-Größen, Seitengrößen, Deskriptorblockformate
und Rechenumgebungen erläutert,
um ein umfassenderes Verständnis
der Erfindung zu liefern. Für
einen Fachmann wird jedoch offensichtlich sein, dass die Erfindung
ohne diese spezifischen Details praktiziert werden kann. In anderen
Fällen
werden wohlbekannte Merkmale nicht detailliert beschrieben, um die Erfindung
nicht unnötigerweise
undeutlich zu machen.
-
Nach
dem Stand der Technik werden Informationen, die sich auf die Speicherzuordnung
beziehen, nicht auf eine Weise gespeichert, die es ermöglicht,
dass sie von Prozessen außerhalb
des Zuordners überprüft werden
können.
Um zu überprüfen, wie
Speicher für
einen bestimmten Code zugeordnet wird, ist es erforderlich, diesen
Code zu modifizieren, bevor er ausgeführt wird. Somit ist der Code,
der ausgeführt
wird, nicht identisch mit dem Code, für den die Informationen, die
sich auf die Speicherzuordnung beziehen, gesucht werden.
-
Die
Erfindung vermeidet die Probleme des Stands der Technik, indem sie
Informationen liefert, die sich auf die Speicherzuordnung beziehen,
die externe Prozesse einfach und nicht-invasiv beziehen können. Die Erfindung
kann verwendet werden, um Speicher zu überprüfen, der für Code zugeordnet wurde, der
in keinerlei Hinsicht verändert
wurde. Somit dient die Erfindung dem nützlichen Zweck, die Speichernutzung
in Prozessen zu analysieren, die über lange Zeiträume, z.
B. sogar Wochen oder Monate, ausgeführt werden, bevor die Analyse
der Speicherzuordnung durchgeführt
werden soll.
-
Die
Erfindung stellt ein Verfahren und eine Vorrichtung bereit, um nicht-invasiv
Informationen zu liefern, die sich auf die Speicherplatzzuordnung
beziehen. Die Erfindung vermeidet die Notwendigkeit, Programme zu
modifizieren, um zu veranlassen, dass Informationen, die sich auf
die Speicherplatzzuordnung beziehen, bereitgestellt werden. Somit
macht es die Erfindung möglich,
dass die Speicherplatzzuordnung für ein gegebenes Programm unter
Verwendung des Programms in der Form, in der das Programm verwendet
werden soll, analysiert werden kann. Die Erfindung vermeidet außerdem die
Notwendigkeit, die Prozesse zu verändern, von denen ein Programm
ausgeführt
wird.
-
Eine
Ausführungsform
der Erfindung stellt Informationen bereit, die sich auf die Speicherplatzzuordnung
beziehen, indem diese Informationen an einer Position gepflegt werden,
die außerhalb
des Prozesses, für
den der Speicherplatz zugeordnet wurde, bekannt oder identifizierbar
ist. Ein Speicherplatzzuordner pflegt die Informationen in einer
Datenstruktur und aktualisiert die Datenstruktur mit jeder Zuordnung
oder Aufhebung der Zuordnung von Speicherplatz. Somit stellt der
Speicherplatzzuordner sicher, dass die Informationen in der Datenstruktur
den aktuellen Status des Speicherplatzes darstellen.
-
In
der bevorzugten Ausführungsform
der Erfindung ist die Datenstruktur, welche die Speicherplatz-Zuordnungsinformationen
enthält,
die vom Speicherplatzzuordner gepflegt werden, auf einer Speicherseite
vorhanden, die als Deskriptorblock bezeichnet wird. Der Speicherplatzzuordner
besitzt die Kontrolle über
einen Speicherbereich, der als Arena bezeichnet wird. Der Prozess
verlangt, dass der Betriebssystem-Kernel den Speicherbereich, der
von der Arena belegt wird, für
die ausschließliche
Verwendung des Speicherplatzzuordners reserviert und verhindert,
dass andere Prozesse diesen Speicherbereich verwenden oder modifizieren.
-
Ein
Bucket ist eine Speicherplatzeinheit, die vom Speicherzuordner zugeordnet
werden kann. Buckets können
eine Vielzahl von Typen sein, zum Beispiel kleine Buckets, mittlere
Buckets, große
Buckets und extra große
Buckets. Die kleinen Buckets liefern acht Byte Informationen, die
zugeordnet werden können.
Die mittleren Buckets liefern 16 Byte Informationen, die zugeordnet
werden können.
Die großen
Buckets liefern 24 Byte Informationen, die zugeordnet werden können. Die
extra großen
Buckets liefern 32 Byte Informationen, die zugeordnet werden können. Diese
Bucket-Größen werden
als Beispiele gegeben, und es wird verstanden, dass andere Bucket-Größen und
Anzahlen von verschiedenen Bucket-Größen nach der Erfindung möglich sind.
Der Deskriptorblock enthält
einen Identifizierer, der erkennt, dass die Speicherplatz-Zuordnungsinformationen,
die in diesem Deskriptorblock gespeichert sind, von einem bestimmten Speicherplatzzuordner
gesteuert werden. Der Deskriptorblock enthält außerdem Informationen, die angeben,
wie viele Buckets verwendet werden, wie viele Buckets frei sind
und wie viel Speicherplatz gegenwärtig als angrenzender Block
verfügbar ist.
-
Ein
externes Dienstprogramm kann Speicherplatz-Zuordnungsinformationen
ermitteln, indem es die Informationen, die im Deskriptorblock gespeichert
sind, liest. Da der Betriebssystem-Kernel die Position der Speicherort-Arena
kennt, kann das externe Dienstprogramm den Deskriptorblock leicht
finden, indem es nach dem Identifizierer sucht, der im Deskriptorblock
gespeichert ist, und den Deskriptorblock lesen, ohne den Betrieb
des Speicherplatzzuordners oder die Prozesse, denen vom Speicherplatzzuordner
Speicherplatz zugeordnet wurde, stören zu müssen. Somit überwindet
die Erfindung die Nachteile des Stands der Technik.
-
1 ist
ein Diagramm, das ein Beispiel einer Speicherort-Arena nach einer
Ausführungsform
der Erfindung zeigt. Die Speicherort-Arena umfasst Speicherplatz,
der vom Betriebssystem zur Verwendung durch einen Speicherzuordner
reserviert ist. Das Betriebssystem erlaubt dem Speicherzuordner,
die Speicherort-Arena zu verwenden, während sie anderen Prozessen
verbietet, die Speicherort-Arena zu stören.
-
Die
Speicherort-Arena umfasst den Deskriptorblock 101 sowie
eine Anzahl von Speicherblöcken.
Jeder Speicherblock umfasst eine Anzahl von Speicherseiten. So kann
zum Beispiel eine Speicherseite 4096 Byte aufweisen. Jede Speicherseite
umfasst eine Anzahl von Buckets. Ein Bucket umfasst eine Speicherplatzeinheit,
die zugeordnet werden kann.
-
Die
Speicherblöcke
können
sich voneinander in der Größe der Buckets,
die sie enthalten, unterscheiden. Speicherblock 102 umfasst
beispielsweise extra große
Buckets, wobei jeder Bucket vorzugsweise eine Größe von 32 Byte besitzt. Speicherblock 103 umfasst
große
Buckets, wobei jeder Bucket vorzugsweise eine Größe von 24 Byte besitzt. Speicherblock 104 umfasst
mittlere Buckets, wobei jeder Bucket vorzugsweise eine Größe von 16
Byte besitzt. Speicherblock 105 umfasst kleine Buckets,
wobei jeder Bucket vorzugsweise eine Größe von 8 Byte besitzt. Der
Speicherzuordner wählt
die optimalen Bucket-Größen aus,
die empirisch a priori ermittelt werden, die für jeden Prozess, dem er Speicherplatz
zuordnet, zugeordnet werden.
-
Der
Deskriptorblock 101 ist vorzugsweise auf einer einzigen
Seite enthalten und umfasst Speicherzuordnungsinformationen. In
der bevorzugten Ausführungsform
der Erfindung ist der Deskriptorblock 101 auf einer Speicherseite
vorhanden, die eine Größe besitzt,
die der ursprünglichen
Seitengröße der Vorrichtung,
auf der sie ausgeführt
wird, entspricht. Auf einer Vorrichtung mit einer ursprünglichen
Seitengröße von 4096
Byte besitzt der Deskriptorblock 101 zum Beispiel vorzugsweise
eine Größe von 4096
Byte. Die Speicherzuordnungsinformationen weisen Informationen auf über die
Anzahl der verschiedenen Speicherblocktypen, die innerhalb der Speicherort-Arena
definiert wurden, die Größen der
Buckets innerhalb jedes Speicherblocks und die Anzahl der Speicherseiten,
die innerhalb jedes Speicherblocks instanziiert wurden. Diese Informationen werden
vorzugsweise an der Speicherstelle 107 gespeichert. Die
Speicherstelle 107 kann sich irgendwo im Deskriptorblock 101 befinden.
-
Wenn
eine Speicherseite instanziiert wird, wird sie vorzugsweise als
Seite im virtuellen Speichersystem mit Backup-Speicherfähigkeit
abgebildet, damit das System die Speicherseite in den Systemspeicher
einlagern oder aus dem Systemspeicher auslagern kann. Wenn eine
Speicherseite aus dem Systemspeicher ausgelagert wird, wird sie
auf einem Massenspeichergerät
gespeichert. Wenn eine Speicherseite in den Systemspeicher eingelagert
wird, wird sie im Speicher mit wahlfreiem Zugriff des Systems gespeichert.
-
Die
Speicherzuordnungsinformationen, die im Deskriptorblock 101 enthalten
sind, weisen außerdem Informationen
auf, die für
jede Speicherseite in jedem Speicherblock angeben, wie viele Buckets
vom Speicherzuordner zugeordnet wurden und wie viele Buckets frei
bleiben, um vom Speicherzuordner zugeordnet zu werden. Die früheren Informationen
werden als der zugeordnete Bucket-Count für jede Speicherseite bezeichnet
und die späteren
Informationen werden als der freie Bucket-Count für jede Speicherseite
bezeichnet.
-
Die
Speicherzuordnungsinformationen, die im Deskriptorblock 101 enthalten
sind, weisen außerdem für jede Speicherseite
in jedem Speicherblock einen Zeiger auf zum Kopf einer verketteten
Liste, welche die freien Buckets in der Speicherseite identifiziert.
Die freien Buckets sind die zuordenbaren Speichereinheiten in der
Speicherseite, die nicht vom Speicherzuordner zugeordnet wurden.
Die Verkettungsdaten werden in jedem zuordenbaren Bucket gespeichert.
-
Die
Speicherstellen 108 und 109 zeigen ein Beispiel
eines Paares aus Bucket-Count
und verketteter Liste mit Zeiger für eine gegebene Speicherseite,
z. B. die Speicherseite 112 in dem Speicherblock 102.
Ein zugeordneter Bucket-Count und/oder ein freier Bucket-Count werden
in der Speicherstelle 108 gespeichert. Ein Zeiger zu einer
verketteten Liste von freien Buckets wird in der Speicherstelle 109 gespeichert.
-
Die
Speicherstellen 110 und 111 zeigen ein Beispiel
eines Paares aus Bucket-Count
und verketteter Liste mit Zeiger für eine andere Speicherseite,
z. B. die Speicherseite 113 in dem Speicherblock 102.
Ein zugeordneter Bucket-Count und/oder ein freier Bucket werden
in der Speicherstelle 110 gespeichert. Ein Zeiger zu einer
verketteten Liste von freien Buckets wird in der Speicherstelle 111 gespeichert.
-
Solche
Paare aus Bucket-Count und verketteter Liste mit Zeiger sind in
dem Deskriptorblock 101 für jede Speicherseite in jedem
Speicherblock in der Speicherort-Arena vorhanden. Beispielsweise
sind andere Paare aus Bucket-Count
und verketteter Liste mit Zeiger in dem Deskriptorblock 101 für die Speicherseiten 114 und 115 in
dem Speicherblock 103, für die Speicherseiten 116 und 117 in
dem Speicherblock 104 und für die Speicherseiten 118 und 119 in
dem Speicherblock 105 vorhanden.
-
Der
Deskriptorblock 101 enthält außerdem den Datenstrukturidentifizierer 106.
Der Datenstrukturidentifizierer 106 weist einen bekannten
oder ohne Weiteres identifizierten Wert oder ein bekanntes oder
ohne Weiteres identifiziertes Muster auf, das an einer bekannten
oder ohne Weiteres identifizierten Position in dem Deskriptorblock 101 gespeichert
wird. Der Datenstrukturidentifizierer hilft in der Position der
Speicherort-Arena, insbesondere des Deskriptorblocks. Der Datenstrukturidentifizierer
ermöglicht
es einem Prozess außerhalb des
Speicherzuordners Speicherplatz zu suchen, indem er die angegebene
Position auf jeder Speicherseite auf das Vorhandensein des angegebenen
Werts oder Musters prüft,
um einen Deskriptorblock zu finden.
-
-
-
-
Tabelle
1 liefert eine Datenstrukturdefinition in der Programmiersprache
C als Beispiel einer Ausführungsform
zur Implementierung der Erfindung. Die spezifischen Werte, die in
Tabelle 1 erscheinen, sollen als Beispiele dienen, und es wird verstanden,
dass die Erfindung nicht auf diese Werte oder einen spezifischen Bereich
von Werten beschränkt
ist. Darüber
hinaus ist die Erfindung nicht darauf beschränkt, unter Verwendung der Programmiersprache
C implementiert zu werden, sondern sie kann unter Verwendung anderer
Programmiersprachen oder -umgebungen implementiert werden.
-
2 ist
ein Diagramm, das ein Bespiel einer Speicherseite nach einer Ausführungsform
der Erfindung zeigt. Die Speicherseite ist in Buckets aufgeteilt.
Beispiele für
solche Buckets sind die Buckets 222, 223 und 224.
Wenn die Speichergröße und die
Bucket-Größe so sind,
dass die Speichergröße in eine
ganzzahlige Anzahl von Buckets teilbar ist, wird der gesamte Speicherplatz
in der Speicherseite in Buckets aufgeteilt. Wenn die Seite keine
ganzzahlige Anzahl von Buckets liefert, kann auf der Seite eine
kleine Menge nicht verwendbarer Extra-Speicherplatz vorhanden sein.
-
Auf
einer beliebigen gegebenen Speicherseite können alle Buckets frei sein,
alle Buckets können
zugeordnet sein, oder einige der Buckets können frei und einige der Buckets
können
zugeordnet sein. Zum Beispiel sind in der Speicherseite, die in 2 dargestellt
ist, die Buckets 222, 223 und 224 zugeordnet,
und die Buckets 201–211 sind
frei. Wenn einige der Buckets oder alle Buckets auf einer Speicherseite
frei sind, zeigt ein Zeiger auf dem Deskriptorblock zu einer auf
Null endenden verketteten Liste, welche die freien Buckets in der
Speicherseite identifiziert. In dem dargestellten Beispiel beginnt
die verkettete Liste von freien Buckets bei Bucket 201.
Bucket 201 speichert die Position des nächsten Bucket in der verketteten
Liste. In diesem Fall speichert Bucket 201 den Zeiger 212 zu
Bucket 202. Bucket 202 wiederum speichert die
Position des nächsten Bucket
in der verketteten Liste. In diesem Fall speichert Bucket 202 den
Zeiger 213 zu Bucket 203. Gleichermaßen speichert
Bucket 203 den Zeiger 214 zu Bucket 204.
-
Auf
die gleiche Weise speichert Bucket 204 den Zeiger 215 zu
Bucket 205. Bucket 205 speichert den Zeiger 216 zu
Bucket 206. Bucket 206 speichert den Zeiger 217 zu
Bucket 207. Bucket 207 speichert den Zeiger 218 zu
Bucket 208. Bucket 208 speichert den Zeiger 219 zu
Bucket 209. Bucket 209 speichert den Zeiger 220 zu
Bucket 210. Bucket 210 speichert den Zeiger 221 zu
Bucket 211. Bucket 211 speichert Informationen, die
angeben, dass er das Ende der verketteten Liste ist und dass keine
anderen Buckets folgen. Wenn ein Bucket nicht in der verketteten
Liste für
die Speicherseite, in welcher der Bucket vorhanden ist, vorhanden
ist, wird verstanden, dass er zugeordnet wurde.
-
Wenn
zusätzlicher
Speicherplatz innerhalb einer Seite zugeordnet wird, wird die verkettete
Liste aktualisiert, um die Änderungen
in freien Buckets wiederzugeben. Buckets können zum Beispiel vom Anfang,
vom Ende oder von der Mitte (irgendwo zwischen dem Anfang und dem
Ende) der verketteten Liste zugeordnet werden. In der bevorzugten
Ausführungsform
werden Buckets vom Kopf der verketteten Liste zugeordnet.
-
Wenn
Buckets vom Anfang der verketteten Liste zugeordnet werden, wird
der Zeiger im Deskriptorblock 101 aktualisiert, um zu dem
neuen Kopf der verketteten Liste zu zeigen. Wenn Buckets vom Ende
der verketteten Liste zugeordnet werden, wird die verkettete Liste
vor den zugeordneten Buckets abgeschnitten, indem ein Hinweis im
letzten freien Bucket gespeichert wird, dass er das Ende der verketteten
Liste ist und dass keine anderen Buckets folgen. Wenn Buckets von
der Mitte der verketteten Liste zugeordnet werden, wird die verkettete
Liste modifiziert, indem ein Zeiger im letzten Bucket vor den zugeordneten
Buckets gespeichert wird, die zum nächsten Bucket zeigen, der den
zugeordneten Buckets folgt.
-
Wenn
Buckets frei gegeben werden, wird die verkettete Liste aktualisiert,
um die Änderungen
in freien Buckets wiederzugeben. Frei gegebene Buckets können zum
Beispiel an den Anfang, an das Ende oder in der Mitte (irgendwo
zwischen dem Anfang und dem Ende) der verketteten Liste angehängt werden.
In der bevorzugten Ausführungsform
werden frei gegebene Buckets dem Kopf der verketteten Liste hinzugefügt.
-
Wenn
frei gegebene Buckets an den Anfang der verketteten Liste angehängt werden,
wird der Zeiger in Deskriptorblock 101 aktualisiert, um
zu dem neuen Kopf der verketteten Liste zu zeigen. Wenn Buckets
an das Ende der verketteten Liste angehängt werden, wird die verkettete
Liste modifiziert, indem Zeiger in dem Bucket, der vorher das Ende
der verketteten Liste war, und in jedem zusätzlichen frei gegebenen Bucket,
welcher der verketteten Liste hinzugefügt werden soll, gespeichert
werden, wobei jeder Zeiger zum nächsten
freie Bucket zeigt, der in die verkettete Liste einbezogen werden
soll. Ein Hinweis wird im letzten freien Bucket gespeichert, welcher
der verketteten Liste hinzugefügt
werden soll, dass er das Ende der verketteten Liste ist und dass
keine anderen Buckets folgen.
-
Wenn
frei gegebene Buckets in der Mitte der verketteten Liste angehängt werden,
wird die verkettete Liste modifiziert, indem ein Zeiger im letzten
Bucket vor den zugeordneten Buckets gespeichert wird, der zum ersten
frei gegebenen Bucket zeigt, welcher der verketteten Liste hinzugefügt werden
soll. Jeder frei gegebene Bucket, welcher der verketteten Liste
hinzugefügt
werden soll, speichert einen Zeiger, der zum nächsten frei gegebenen Bucket,
welcher der verketteten Liste hinzugefügt werden soll, zeigt. Der
letzte frei gegebene Bucket, welcher der verketteten Liste hinzugefügt werden
soll, speichert einen Zeiger, der zu dem zeigt, was der nächste freie
Bucket in der Liste war, bevor die zusätzlichen frei gegebenen Buckets
der verketteten Liste hinzugefügt
wurden.
-
Wenn
Speicherplatz auf einer Speicherseite zugeordnet oder frei gegeben
wird, aktualisiert der Speicherzuordner die verkettete Liste, die
freie Buckets wie oben beschrieben identifiziert. Der Speicherzuordner aktualisiert
außerdem
Zähler,
die im Deskriptorblock gespeichert sind. Die Zähler speichern Informationen,
die angeben, wie viele Buckets zugeordnet sind, wie viele Buckets
frei sind und wie viel Speicherplatz gegenwärtig als angrenzendes Segment
verfügbar
ist.
-
Wenn
die Zähler
Informationen speichern, die angeben, wie viele Buckets zugeordnet
sind, kann die Anzahl der freien Buckets berechnet werden, indem
die Anzahl der zugeordneten Buckets von der Gesamtzahl der Buckets
subtrahiert wird. Somit kann die Anzahl der freien Buckets ermittelt
werden, ohne dass es erforderlich ist, die Anzahl der freien Buckets
zu speichern.
-
Gleichermaßen, wenn
die Zähler
Informationen speichern, die angeben, wie viele Buckets frei sind, kann
die Anzahl der zugeordneten Buckets berechnet werden, indem die
Anzahl der freien Buckets von der Gesamtzahl der Buckets, die instanziiert
sind, subtrahiert wird. Somit kann die Anzahl der zugeordneten Buckets
ermittelt werden, ohne dass es erforderlich ist, die Anzahl der
zugeordneten Buckets zu speichern.
-
Bei Änderungen
der Speicherzuordnung zählt
der Speicherzuordner die Anzahl der freien Buckets in der verketteten
Liste für
jede Speicherseite, die von der Änderung
in der Speicherzuordnung betroffen war. Der Speicherzuordner pflegt
vorzugsweise einen Zähler,
der die Anzahl der freien Buckets für jede Speicherseite speichert,
und erhöht
oder verringert den Zähler,
wenn eine Änderung
in der Speicherzuordnung stattfindet. Der Speicherzuordner speichert
die aktualisierten Informationen, die aus dieser Zählung erhalten
wurden (z. B. der Wert, der vom Zähler gehalten wird), im Deskriptorblock.
-
Durch
Speichern der aktualisierten Speicherzuordnungsinformationen im
Deskriptorblock vermeidet diese Ausführungsform der vorliegenden
Erfindung die Notwendigkeit, auf jede Speicherseite zuzugreifen
und jeden freien oder zugeordneten Bucket auf jeder Speicherseite
zu zählen,
jedes Mal, wenn eine Speicherzuordnungsoperation ausgeführt wird.
Stattdessen ermöglicht
es diese Ausführungsform
der vorliegenden Erfindung, dass die Anzahl der freien Buckets und
die Anzahl der zugeordneten Buckets ohne weiteres aus den Informationen
ermittelt werden können,
die im Deskriptorblock gespeichert sind. Somit können Änderungen der Speicherzuordnung
schnell und einfach erzielt werden, während auf eine minimale Anzahl
von Speicherseiten zugegriffen wird.
-
3 ist
ein Blockdiagramm, das ein Allzweck-Computersystem zeigt. Die Erfindung
kann auf einem solchen Allzweck-Computersystem implementiert werden.
Eine Tastatur 310 und ein Mauseingabegerät 311 werden
mit einem bidirektionalen Systembus 318 verbunden. Die
Tastatur und das Mauseingabegerät
sind zum Einführen
von Benutzereingaben in das Computersystem und zum Kommunizieren
dieser Benutzereingaben zu einer zentralen Verarbeitungseinheit
(CPU) 313 bestimmt.
-
Das
Computersystem weist außerdem
einen Videospeicher 314, einen Hauptspeicher 315,
einen Massenspeicher 312 sowie Eingabe-/Ausgabegeräte 319 auf,
die alle zusammen mit der Tastatur 310, dem Mauseingabegerät 311 und
der CPU 313 mit dem bidirektionalen Systembus 318 verbunden
sind. Der Massenspeicher 312 kann sowohl fest eingebaute
als auch entfernbare Medien wie magnetische, optische oder magnetisch-optische
Speichersysteme oder beliebige andere erhältliche Massenspeichertechnologie
aufweisen. Der Massenspeicher 312 kann lesbare und beschreibbare
Mediensysteme und Nur-Lese-Systeme
aufweisen. Der bidirektionale Systembus 318 kann zum Beispiel
32 Adressenleitungen für
die Adressierung des Videospeichers 314 oder des Hauptspeichers 315 enthalten.
-
Der
bidirektionale Systembus 318 weist außerdem zum Beispiel einen 32-Bit-Datenbus zur Übertragung
von Daten zwischen und unter den Komponenten wie der CPU 313,
dem Hauptspeicher 315, dem Videospeicher 314,
dem Massenspeicher 312 und den Eingabe-/Ausgabegeräten 319 auf.
Alternativ können
anstelle von separaten Daten- und Adressenleitungen Mehrfachdaten/-adressenleitungen
verwendet werden.
-
Die
Eingabe-/Ausgabegeräte 319 können Vorrichtungen
wie serielle Kommunikationsanschlüsse, parallele Kommunikationsanschlüsse, Modulator/Demodulatoren
(Modems), Netzwerkschnittstellen, Drucker, Scanner und andere Vorrichtungen,
die Daten vom Computersystem zu externen Geräten übertragen oder die Daten von
externen Geräten
zum Computersystem übertragen,
aufweisen.
-
In
der bevorzugten Ausführungsform
dieser Erfindung ist die CPU 313 ein 32-Bit-Mikroprozessor, hergestellt
von Motorola, z. B. der 680 × 0-Prozessor,
oder ein Mikroprozessor, hergestellt von Intel, z. B. der 80 × 86- oder
Pentium-Prozessor. Allerdings kann jeder andere geeignete Mikroprozessor
oder Mikrocomputer verwendet werden.
-
Der
Hauptspeicher 315 umfasst dynamischen Speicher mit wahlfreiem
Zugriff (DRAM). Der Videospeicher 314 ist ein Videospeicher
mit wahlfreiem Zugriff mit zwei Anschlüssen. Ein Anschluss des Videospeichers 314 ist
mit dem Videoprozessor 316 verbunden. Der Videoprozessor 316 wird
verwendet, um den Kathodenstrahlröhren (CRT)-Rastermonitor 317 anzutreiben.
Der Videoprozessor 316 ist aus dem Stand der Technik wohlbekannt
und kann unter Verwendung jedes geeigneten Mittels implementiert
werden. Dieser Schaltkreis wandelt Pixeldaten, die in dem Videospeicher 314 gespeichert
sind, in ein Rastersignal um, das zur Verwendung durch den Monitor 317 geeignet
ist. Der Monitor 317 ist ein Monitortyp, der zum Anzeigen
von grafischen Bildern geeignet ist.
-
Das
Computersystem, das vorstehend beschrieben wird, dient lediglich
zu Beispielzwecken. Die Erfindung kann in jedem Computersystemtyp
oder jeder Programmier- oder Verarbeitungsumgebung implementiert
werden.
-
Die
Erfindung stellt nicht nur Informationen darüber bereit, wie viel der Speicherort-Arena
zugeordnet ist und wie viel frei ist, sondern liefert für jede Speicherseite
in der Speicherort-Arena Informationen darüber, wie viel der Speicherseite
zugeordnet ist und wie viel frei ist. Da das Zugreifen auf Informationen,
die auf verschiedenen Speicherseiten gespeichert sind, in der Regel
bedeutend weniger effizient ist als das Zugreifen auf Informationen,
die auf derselben Speicherseite gespeichert sind, stellt die Erfindung
Informationen bereit, die verwendet werden können, um die Anzahl der Speicherseiten
zu minimieren, über
die Speicherplatz, der einem bestimmten Prozess zugeordnet ist,
zugeordnet wird. Durch die Verringerung der Anzahl der Speicherseiten,
auf denen Informationen gespeichert sind, kann das Seitenwechseln
minimiert und die Effizienz maximiert werden.
-
Darüber hinaus
führen
Prozesse, die große
Mengen von Speicherplatz zuordnen, dann aber viel davon frei geben,
zu einer starken Speicherfragmentierung. Speicherfragmentierung
tritt auf, wenn Speicher, der für
die Zuordnung zu einem Prozess verfügbar ist, nicht in einem angrenzenden
Block vorhanden ist, sondern weit verstreut ist über viele Seiten in der gesamten
Speicherort-Arena. Indem es möglich
ist, dass das Verhalten der Zuordnung und der Zuordnungsaufhebung
eines Prozesses identifiziert wird, ermöglicht es die Erfindung dem
Speicherzuordner, das Verfahren zu modifizieren, mit dem er Speicherplatz
für diesen
Prozess zuordnet und frei gibt, um die Fragmentierung zu minimieren
und die Effizienz zu maximieren.
-
4 ist
ein Ablaufdiagramm, das eine Ausführungsform der Erfindung zeigt,
welche die Fragmentierung minimiert, wenn Speicherplatz einem Prozess
zugeordnet wird. Das Verfahren beginnt in Schritt 401 und setzt
sich fort bis Schritt 402. In Schritt 402 findet
das Verfahren die Speicherseite, welche die optimale Anzahl von
freien Buckets mit der gewünschten
Bucket-Größe besitzt.
Diese Ermittlung erfolgt durch Zugreifen auf die Zählinformationen,
die im Deskriptorblock für
jede Speicherseite gespeichert sind. In Schritt 403 ordnet
das Verfahren einen Bucket von dieser Speicherseite zu.
-
In
Schritt 404 prüft
das Verfahren, ob dem Prozess genügend Speicherplatz zugeordnet
wurde. Wenn genügend
Speicherplatz zugeordnet wurde, endet das Verfahren in Schritt 406.
Wenn nicht genügend
Speicherplatz zugeordnet wurde, fährt das Verfahren in Schritt 405 fort.
In Schritt 405 prüft
das Verfahren, ob alle Buckets auf der ausgewählten Speicherseite zugeordnet
wurden. Falls nicht, kehrt das Verfahren zu Schritt 403 zurück und ordnet
einen anderen Bucket von derselben Speicherseite zu.
-
Vorzugsweise
hat Schritt 402 eine einzige Speicherseite identifiziert,
die verwendet werden kann, um den Speicherbedarf zu erfüllen. Das
Zuordnen von Speicher innerhalb einer Seitengrenze verringert das
Potenzial für
Paging (d. h. das Einlagern von Speicherseiten in den Speicher und
das Auslagern von Speicherseiten aus dem Speicher). Allerdings kann
es erforderlich sein, Speicher über
Seitengrenzen hinweg zuzuordnen. Wenn alle Buckets auf der ausgewählten Speicherseite
bereits zugeordnet wurden, kehrt das Verfahren zu Schritt 402 zurück, wo die
Speicherseite, die eine optimale (d. h. die höchste) Anzahl freier Buckets
besitzt, unter den verbleibenden Speicherseiten identifiziert wird
und ausgewählt
wird, um für
die Speicherzuordnung verwendet zu werden.
-
Da
das Verfahren beginnt, Speicherplatz von der Speicherseite zuzuordnen,
welche die meisten freien Buckets besitzt, erhöht das Verfahren die Wahrscheinlichkeit,
dass der benötigte
Speicherplatz innerhalb einer einzigen Speicherseite oder zumindest
innerhalb der geringstmöglichen
Anzahl von Speicherseiten zugeordnet wird.
-
Somit
wurden ein Verfahren und eine Vorrichtung zur Zuordnung von Speicher
und zur Bereitstellung von Informationen, die sich auf die Speicherzuordnung
beziehen, in Verbindung mit einer oder mehreren spezifischen Ausführungsformen
beschrieben. Die Erfindung wird durch die Ansprüche und ihren vollen Umfang von Äquivalenten
definiert.