-
Die
vorliegende Erfindung betrifft allgemein das Debugging (die Fehlerbereinigung)
von Benutzerprogrammen, die von einem Prozessor ausgeführt werden.
-
Ein
RAM kann Informationen gespeichert halten, die mehrere Stücke von
Programmcode- oder Datenfragmenten umfassen. Typischerweise kann auf
jedes Byte des RAM zugriffen werden, indem eine eindeutige Adresse
verwendet wird. Während der
Ausführung
eines Programms kann ein oder können
verschiedene Codefragmente in der gleichen RAM-Speicherposition
gespeichert werden. Welches Codefragment im Augenblick vorliegt,
kann von dem Programm selber festgestellt werden oder kann von einer
anderen Bedingung abhängen.
Während
das Programm einem Debugging unterzogen wird, können Haltepunkte (Breakpoints)
in dem Code gesetzt sein. Ein Haltepunkt ist eine beabsichtigte
Anhaltestelle oder Unterbrechung in einem Programm zur Unterstützung des
Debugging des Programms. Nachdem ein Haltepunkt erreicht ist, kann
ein Programmierer während
der Pause die Prüfungsumgebung
(Protokolle, Speicher, Dateien, etc.) inspizieren, um festzustellen,
ob das Programm auch so funktioniert, wie dies erwartet wird. Wenn
ein Haltepunkt an einer bestimmten Adresse in dem RAM gesetzt ist, dann
weiß man
dann, wenn dieser Haltepunkt erreicht wird, nicht unbedingt, welcher
Programmcode gerade ausgeführt
wird, wenn sich mehr als ein Codefragment die gleiche RAM-Adresse teilen können. Ein
Programm, das in dem RAM gespeichert gehalten wird, kann dynamisch
von einer Speicherverwaltungseinheit (MMU; memory management unit)
eines Betriebssystems oder explizit von einem Benutzerprogramm ausgetauscht
werden. Zu diesem Zweck kann der Mikroprozessor mit einem internen
Notizblock-RAM versehen sein.
-
Typischerweise
wird eine Haltepunktlogik als ein Komparator implementiert, der
auf der Basis einer Abrufadresse arbeitet, die von dem Prozessor
ausgegeben wird. Wenn die Abrufadresse in dem hier betrachteten
Kontext nicht eindeutig ist, dann fehlt eine Verbindung zu dem augenblicklich
ausgeführten Codefragment,
und falsche Steuerimpulsauslöser können auftreten,
die ignoriert werden müssen.
Dieses Problem existiert sowohl für physikalische als auch für virtuelle
Adressen. Dies beeinträchtigt
das Laufzeitverhalten bis zu dem ersten „echten” Haltepunkt.
-
Eine
Lösung,
um mit diesem Problem fertig zu werden, liegt darin, das System
anzuhalten und den Programm-RAM-Inhalt zu lesen. Aber diese Lösung ist
nicht anwendbar, wenn das ins Auge gefasste Zielobjekt nicht angehalten
werden kann oder der RAM-Inhalt wiederholte Male ein- und ausgelagert wird.
Außerdem
ist sie uneffizient in Bezug auf die Analysierung längerer Programmverfolgungen.
-
Eine
andere Lösung
liegt darin, das Laden des RAM zu überprüfen bzw. zu verfolgen. Dies
wird dadurch erzielt, dass der Inhalt einer bestimmten „Markierungs”-Stelle
ablaufmäßig verfolgt
bzw. überwacht
wird oder in Erinnerung behalten wird. Dieser Lösungsweg schlägt fehl,
wenn die Anzahl an RAM-Fragmenten, die unabhängig voneinander geschrieben
werden (ein „Heap” (Haldenspeicher)
von modernen Betriebssystemen), anwächst oder wenn es nicht erzwungen
werden kann, dass die Markierungsstelle von der Tool-Kette (z. B.
Kompilierer, Programmverknüpfer,
Lokalisator, Lader, etc.) bedient wird. Außerdem erfordert dieses Verfahren
eine zusätzliche
Logik und Synchronisierung, um das Laden zu verfolgen, wenn dies
nicht von dem Prozessor selber durchgeführt wird, sondern zum Beispiel
von einem DMA-Kontroller.
-
Die
Erfindung löst
dieses und andere Probleme durch den Gegenstand der Ansprüche 1, 11,
23, 24, 25.
-
Vorteilhafte
Weiterbildungen sind in den Unteransprüchen angegeben.
-
Gemäß einem
Aspekt der Erfindung wird ein System zum Abbilden bzw. Mapping von
Informationsadressen in einem Speicher bereitgestellt. Das System
umfasst einen Speicher, wobei auf jedes Byte über eine Vielzahl von unterschiedlichen
Adressen zugegriffen werden kann, und einen Mikroprozessor zum Zuweisen
von wenigstens einer der Adressen zu Informationen. Die Informationen
können
Programmcodefragmente und/oder Daten sein. Ebenfalls offenbart wird
ein Verfahren zum Abbilden bzw. Mapping von Informati onsadressen
in einem Speicher unter Verwendung eines solchen Systems. Das Verfahren
umfasst das Abbilden des gleichen physikalischen Speichers in eine
Vielzahl von eindeutigen Adressen und das Zuweisen von wenigstens
einer der eindeutigen Adressen zu den Informationen.
-
Das
Verfahren umfasst das Laden der Informationen in den Speicher unter
Verwendung einer Software, die so konfiguriert ist, dass sie die
Informationen in dem Speicher austauscht, wie dies von einem Programm
benötigt
wird. Informationen, die wieder verwendet werden, werden in dem
Speicher gespeichert gelassen, und jeder Adressbereich repräsentiert
ein anderes Programmcode- oder Datenfragment. Das offenbarte Verfahren
erzeugt eine eineindeutige Beziehung zwischen dem Programmcodefragment
und seinem Adressbereich.
-
Diese
und weitere Aufgaben, Merkmale und Vorteile der vorliegenden Erfindung
werden aus der nachfolgenden Beschreibung viel offensichtlicher werden,
wenn diese in Verbindung mit den beigefügten Zeichnungen betrachtet
wird, die lediglich zu Illustrationszwecken ein Ausführungsbeispiel
in Übereinstimmung
mit der vorliegenden Erfindung zeigen.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
ein System, das die vorliegende Erfindung verkörpert;
-
2 und 3 veranschaulichen
ein beispielhaftes Adressenabbildungsschema in Übereinstimmung mit einem Ausführungsbeispiel
der vorliegenden Erfindung; und
-
4 ist
ein Verfahren zum Abbilden von Informationsadressen in einem Speicher.
-
AUSFÜHRLICHE BESCHREIBUNG EINES
BEVORZUGTEN AUSFÜHRUNGSBEISPIELS
DER ERFINDUNG
-
Überblicksmäßig gesehen
sorgt die vorliegende Erfindung für die effiziente Verwendung
eines RAM durch Betriebssysteme und Programme, um die Effizienz
bei dem Debugging eines Programmcodes zu steigern. Eine besondere
Anwendung der vorliegenden Erfindung liegt darin, einen Programmfluss
während
des Debugging ablaufmäßig zu verfolgen.
Bereitgestellt wird ein System und ein Verfahren zum Schreiben eines
Programmcodes oder von Daten in einen RAM, um so für eine effizientere
Abrufung solcher Informationen während
Debugging- und Prüfanwendungen
zu sorgen. Das Debugging, die Programm- und die Datenablaufverfolgung
können schneller
und effizienter durchgeführt
werden, wenn ein unzweideutiger Abruf verwendet wird, weil der kritische
Code oder die kritischen Daten sofort identifiziert werden können. Die
Verwendung des Begriffs ,Informationen' soll sich sowohl auf Programmcode- als
auch auf Datenfragmente beziehen.
-
1 zeigt
ein beispielhaftes System 50 zum Abbilden von Programmcodeadressen
in einem Speicher. Der Speicher 20 ist ein Aufzeichnungsmedium,
das digitale Daten, die für
die Informationsverarbeitung verwendet werden, einen gewissen Zeitraum
hindurch gespeichert lässt.
Der Speicher 20 ist vorzugsweise ein Direktzugriffsspeicher
(Random Access Memory; RAM), kann aber jede Art von Speicher sein
und kann auch die Form von integrierten Schaltungen annehmen, die
es erlauben, dass auf gespeicherte Daten in jeder beliebigen Reihenfolge zugegriffen
werden kann. Jedes Byte in dem Speicher 20 wird auf eine
Vielzahl von eindeutigen Adressen abgebildet. Der Begriff „Byte” wird in
der vorliegenden Beschreibung als ein allgemeiner Begriff für die kleinste
adressierbare Einheit oder Speicherstelle in dem Speicher 20 verwendet.
Für Gewöhnlich ist die
kleinste adressierbare Einheit 1 Byte, das acht Bits umfasst.
-
Der
Mikroprozessor 10 ist ein programmierbares digitales elektronisches
Bauteil. Der Mikroprozessor 10 weist jede der Adressen
einem Programmcodefragment zu. Eine Eingabe-/Ausgabe-(E/A)-Vorrichtung 30 ist
jede Vorrichtung, die verwendet wird, um Informationen und Anweisungen
in einen Computer zur Speicherung in einem Speicher 20 oder
zur Verarbeitung durch einen Mikroprozessor 10 einzugeben.
Die E/A-Vorrichtung 30 liefert auch verarbeitete Daten
an einen menschlichen Bediener oder an eine Maschine, die von dem
Mikroprozessor 10 gesteuert wird. Der Mikroprozessor 10,
der Speicher 20 und die E/A-Vorrichtung 30 sind
durch einen Systembus 40 miteinander verbunden.
-
Das
System 50 ist in der Lage, Informationsadressen in einem
Speicher 20 abzubilden. Jedes Byte des Speichers 20 wird
auf eine Vielzahl von eindeutigen Adressen abgebildet. Der Mikroprozessor 10 weist
jede der Adressen zu Informationen zu. Somit ist die Anzahl an Adressen,
die von dem Mikroprozessor 10 adressierbar ist, höher als
die Anzahl an Bytes in dem Speicher 20. Die Adressen, die
von dem Mikroprozessor 10 adressierbar sind, sind die Abrufadressen,
die verwendet werden, um auf die unterschiedlichen Bytes der Informationen
in dem Speicher 20 zuzugreifen. Da jedes Byte des Speichers 20 auf
eine Vielzahl von eindeutigen Abrufadressen abgebildet ist, kann
der Mikroprozessor 10 auf ein spezifisches Byte mit wenigstens
zwei Abrufadressen zugreifen. Dies kann sehr leicht durch das Ignorieren
der höheren
Adressbits erzielt werden.
-
Das
System 50 umfasst eine Computersoftware (nicht gezeigt),
die so konfiguriert ist, dass sie die Programmcodefragmente in den
Speicher 20 lädt.
Die Software ist des Weiteren so konfiguriert, dass sie Programmcodefragmente
in dem Speicher 20 austauscht, wie sie von einem Programm
benötigt werden.
Der Speicher 20 kann Programmcodefragmente, die wieder
verwendet werden, gespeichert lassen, und jeder Adressbereich repräsentiert
ein anderes Programmcodefragment. Die Fachleute auf dem Gebiet sollten
erkennen, dass der Mikroprozessor 10, obwohl er so angegeben
ist, dass er jede der Adressen den Informationen zuweist, auch so
konfiguriert sein könnte,
dass er die Informationen einer der Adressen zuweist.
-
2 und 3,
die unten erörtert
werden, werden verwendet, um ein Ausführungsbeispiel der vorliegenden
Erfindung lediglich zu Illustrationszwecken zu beschreiben und sollen
in keiner Weise so ausgelegt werden, dass sie den Schutzumfang der vorliegenden
Erfindung einschränken.
Gewisse Einzelheiten, die die Speicheradressierung und die Programmcode-
und Datenfragmente betreffen, die hier beschrieben werden, sind
weggelassen worden, da sie außerhalb
des Schutzumfangs der vorliegenden Erfindung liegen. In Übereinstimmung
mit der vorliegenden Erfindung werden Informationen in einem Speicher
gespeichert. Diese Informationen können in der Form von Programmcode-
oder Datenfragmenten vorliegen, und es sollte selbstverständlich sein, dass
jede Bezugnahme auf das Speichern von Informationen in der vorliegenden
Beschreibung entweder auf Programmcode- oder Datenfragmente anwendbar
ist.
-
In Übereinstimmung
mit einem bevorzugten Ausführungsbeispiel
der vorliegenden Erfindung wird jedes Byte des RAM auf verschiedene
Adressen derart abgebildet, dass es mehrere eindeutige Adressen für jedes
Byte gibt. Der physikalische RAM wird auf mehr als eine Speicherposition,
die jeweils ihren eigenen Adressbereich aufweist, und vorzugsweise auf
weniger als 100 Speicherpositionen abgebildet. Somit kann für jeden
Speicherplatz in Verbindung mit spezifischen Informationen eine
eindeutige Adresse zugewiesen werden. Die spezifischen Informationen können zum
Beispiel die höheren
Adressbits sein, die für
das Zugreifen auf die Bytes des Speichers 20 ignoriert
werden. Diese höheren
Adressbits sind dann die spezifischen Informationen, die zum Beispiel
den Typ des Code- oder Datenfragments repräsentieren können, das in dem Speicher 20 gespeichert
ist. Die Adressbits einer solchen eindeutigen Abrufadresse, die
von dem Mikroprozessor 10 ausgegeben wird, können in
einen niedrigeren Teil für
das Zugreifen auf die Bytes in dem Speicher 20 und einen
höheren
Teil getrennt werden, der die unterschiedlichen Basisadressen repräsentiert,
unter denen auf die Bytes in dem Speicher 20 zugegriffen
werden kann. Der niedrigere Teil der Adressbits kann den Adressraum
für die
verfügbaren
Bytes in dem Speicher 20 abdecken, und der höhere Teil
der Adressbits kann einen Positionsbereich repräsentieren. Der Bereich der
Bytes des Speichers 20 erscheint mehrere Male in unterschiedlichen
Adressbereichen in dem Adressraum der eindeutigen Adressen. Die
unterschiedlichen Adressbereiche werden von dem höheren Teil
der Adressbits bestimmt und können
Positionsbereiche genannt werden.
-
Durch
die Verwendung solcher eindeutigen Adressen ist es leichter zu identifizieren,
welches Code- oder Datenfragment in dem RAM gespeichert ist. In Übereinstimmung
mit einem Ausführungsbeispiel der
Erfindung wird das Byte auf unterschiedliche eindeutige Adressen
abgebildet. Ein Codefragment wird einem Positionsbereich zugewiesen,
welcher ein Teil der eindeutigen Adresse des Byte des RAM ist, in dem
das Codefragment gespeichert ist. Anstatt dass man nur eine einzelne
Adresse für
jedes Byte des RAM hat, wird die Adresse des Byte des RAM zusammen
mit dem Positionsbereich, in dem der Code gespeichert ist, zu einer
eindeutigen Adresse. Somit kann ein Byte eines RAM eine Vielzahl
von eindeutigen Adressen aufweisen, und jedes gespeicherte Codefragment
weist einen spezifischen Bereich von einzelnen eindeutigen Adressen
auf. Jede eindeutige Adresse bezieht sich eindeutig auf ein spezifisches Byte
in dem Speicher 20 und auf das spezifische Codefragment,
das in dem Speicher 20 gespeichert ist.
-
Wenn
ein Haltepunkt an einer Adresse gesetzt ist, dann kann der Code,
der gerade ausgeführt wird,
leicht identifiziert werden, weil nur ein Stück eines Codes dieser eindeutigen
Adresse zugewiesen ist.
-
Eine
Softwarekomponente ist so konfiguriert, dass sie die Codefragmente
erkennt und die Codefragmente in den RAM lädt. Von der Software-Seite her
sind mehr eindeutige Adressen erzeugt worden, und der physikalische
RAM wird größer erscheinen, was
bedeutet, dass der logische Adressraum der eindeutigen Adressen
größer als
der physikalische Adressraumspeicher 20 ist. Unter Bezugnahme
auf 2 weist der physikalische RAM 5 KB auf, und es sind
vier Codestücke
vorhanden, die in den RAM geladen werden sollen. Die gesamte Größe aller
vier Codestücke
zusammen ist größer als
der Platz von 5 KB, der in dem physikalischen RAM zur Verfügung steht.
In Abhängigkeit
von ihrer Größe müssen die verschiedenen
Codestücke
sequentiell geladen werden. Wenn die ersten beiden Codefragmente
I, II jeweils 2 KB betragen, das dritte III 5 KB aufweist und das
vierte IV 1 KB aufweist, dann muss das vierte Codefragment IV alleine
in diesen physikalischen RAM geladen werden und die anderen Fragmente
können gleichzeitig
in den RAM geladen werden. Im Folgenden wird angenommen, das alle
vier Fragmente allein in den RAM, also eines zur gleichen Zeit,
geladen werden.
-
Auf
den physikalischen RAM kann durch eindeutige Adressen zugegriffen
werden, die von dem Mikroprozessor 10 als Abrufadressen
ausgegeben werden. Die eindeutigen Adressen enthalten jedoch zusätzlich zu
den Adressbits, die notwendig sind, um jedes Byte in den 5 KB des
RAM zu adressieren, vier weitere Adressbits, die verwendet werden,
um das Fragment zu bestimmen, das derzeitig in den RAM geladen wird.
Diese zusätzlichen
vier Adressbits werden nicht verwendet, um den RAM zu adressieren. Die
Größe von logischen
Adressen von eindeutigen Adressen beträgt 16 × 5 KB. Die 5 KB des physikalischen
RAM erscheinen sechzehn mal mit sechzehn verschiedenen Basisadressen
in dem Raum der logischen Adressen von eindeutigen Adressen, und
jedes Mal dann, wenn Code- oder Datenfragmente geladen werden, wird
jedes Byte des RAM zu 16 verschiedenen eindeutigen Adressen zugewiesen.
Dem entsprechend weist jedes Byte von jedem Codefragment eine eindeutige
Adresse auf. Aber zur Ausführung
muss das entsprechende Codefragment in den RAM geladen werden. Die
Codefragmente können
in einer weiteren Speichervorrichtung gehalten werden, von der aus
sie für
die Ausführung
in den RAM geladen werden.
-
Die
eindeutigen Adressen werden für
die Haltepunktlogik verwendet, um zu gewährleisten, dass ein Haltepunkt
nur in dem überwachten
Codefragment auftritt. Wenn die Haltepunktlogik einen Komparator
zum Vergleichen der Abrufadresse, die von dem Mikroprozessor 10 ausgegeben
wird, mit Haltepunktadressen umfasst, dann wird die gesamte eindeutige
Adresse für
diesen Vergleich verwendet. Im Gegensatz dazu wird nur ein Teil
der eindeutigen Adresse für
die Adressierung des RAM verwendet. In dem vorliegenden Ausführungsbeispiel
werden die höchsten
vier Adressbits nur für
die Haltepunktlogik verwendet.
-
Das
oben beschriebene Ausführungsbeispiel kann
in gleicher Weise auf Datenfragmente angewendet werden. Programme
manipulieren und speichern Daten, während sie laufen, und die vorliegende Erfindung
kann verwendet werden, um Daten in der gleichen Art und Weise ablaufmäßig zu verfolgen, wie
diese verwendet wird, um einen Programmcode ablaufmäßig zu verfolgen.
Der oben beschriebene Lösungsweg
kann angewendet werden, wenn Datenstrukturen dynamisch in eine Hardware
geladen werden. Durch die Verwendung von Software zum Laden der
Daten in den RAM kann der Programmfluss überwacht werden und die Datenseite
kann einem Debugging und einer Ablaufverfolgung unterzogen werden.
-
Der
Softwareprozess, der Daten lädt,
ist geringfügig
anders als der Prozess, der Programmcodefragmente lädt. Die
gleichen Daten können
an verschiedenen Punkten während
der Programmausführung
verwendet werden und können
während
der gesamten Programmausführung
manipuliert und geändert
werden. Somit wird eine zusätzliche
Logik innerhalb der Software notwendig, um zu bestimmen, wo die
Daten für
die maximale Leistung lokalisiert werden sollen. Aber der Mechanismus
für das
Speichern von Daten bleibt unverändert.
-
In Übereinstimmung
mit einem Ausführungsbeispiel
der vorliegenden Erfindung kann die Software Codefragmente und Daten
in dem RAM austauschen, wie sie von einem Programm benötigt werden.
Die Software lädt
Fragmente logisch und tauscht Programmcodefragmente oder Daten in
den bzw. dem RAM und aus dem RAM aus, während die eindeutigen Adressen
der verschiedenen Codefragmente und Daten aufrecht erhalten werden.
-
Unter
Bezugnahme auf 3 kann die Software während der
Ausführung
ein Codefragment oder Stücke
von Daten, die die Größenordnung
von 2 KB aufweisen, mit zwei Codefragmenten oder Stücken von
Daten austauschen, die jeweils eine Größe von 1 KB aufweisen. Während das
ursprüngliche Codestück eine
Adresse aufwies, die auf dem Bereich 0–2 basierte, weist das erste
neue Codestück eine
Adresse von 0–1
auf und das zweite neue Codestück
weist eine Adresse von 1–2
auf. Somit können die
eindeutigen Adressen für
ein Codestück
dynamisch auf der Grundlage der Position geändert werden, an der die Daten
oder das Codefragment von der Software geladen werden. Die Hardware
und der RAM können
beide so konfiguriert sein, dass sie diese dynamische Änderung
von Adressen unterstützen.
Das Gleiche trifft zu, wenn aus irgendeinem anderen Grund ein Codefragment
in den RAM an einer Position geladen wird, die nicht an dem Anfang
des RAM lokalisiert ist. Wenn in solchen Fällen die Speicherposition eines
Code- oder Datenfragments innerhalb des RAM variieren kann, dann
müssen
Vorkehrungen dafür
getroffen werden, dass die eindeutigen Adressen, die von dem Mikroprozessor 10 ausgegeben
werden, in Adressen umgewandelt werden, die für den Zugriff auf den RAM an
der korrekten Position geeignet sind.
-
Wenn
ein Codefragment oder Daten irgendwann in der Zukunft benötigt wird
bzw. werden, ist es möglich,
diese nicht auszutauschen, sondern in dem RAM zu behalten. Mit anderen
Worten, ein Codefragment oder Daten, das bzw. die wieder benötigt wird/werden,
werden für
die zukünftige
Verwendung in dem RAM gespeichert gelassen, während andere ausgetauscht werden.
-
Jedes
Codefragment wird auf eine eindeutige Adresse abgebildet. Eine Software
ist verantwortlich für
die Verifizierung, dass der Code in diese Adressen geladen wird.
Dies macht es möglich,
während
der Ablaufverfolgung den ausgeführten
Code oder die verwendeten Daten direkt vor einem Haltepunkt auf
der Grundlage der Speicherposition des Codes in dem RAM zu identifizieren.
Somit gibt es eine eindeutige Adresse für jedes Codefragment und Datenstück.
-
4 veranschaulicht
die Schritte für
das Abbilden von Informationsadressen in einem Speicher in Übereinstimmung
mit einem Ausführungsbeispiel
der vorliegenden Erfindung. Im Schritt 100 wird der gleiche
physikalische Speicher auf eine Vielzahl von eindeutigen Adressen
abgebildet. Dann wird beim Schritt 200 jede der Adressen
einem Programmcode- oder Datenfragment zugewiesen. Alternativ dazu
kann beim Schritt 200 ein Programmcode- oder Datenfragment
einem Adressbereich zugeordnet werden.
-
Der
einzelne physikalische Speicher (RAM), in dem die eindeutigen Programmcodes
gespeichert sind, wird in den Adressraum mit vielen verschiedenen
Basisadressen abgebildet. Höhere
Adressbits, die nicht mit eindeutigen Codefragmenten oder Daten
koordinieren, werden ignoriert. Die eindeutigen Programmcodes können dann
in diesen Speicher mit verschiedenen Basisadressen verschoben werden. Folglich
besteht eine eineindeutige Beziehung zwischen einem spezifischen
Programmcodefragment und seiner Adresse. Diese Anordnung erfüllt die
Voraussetzung für
eine unzweideutige Ablaufverfolgung und Auslösung.
-
In
einem Ausführungsbeispiel
wird der RAM verwendet, um eine Vielzahl von dynamisch geladenen
Programmcodes parallel zu speichern. Der Benutzer muss/die Werkzeuge
müssen
nur sicherstellen, dass keine Adressenüberlappung vorliegt. Dies unterscheidet
sich nicht von dem Fall, bei dem der RAM in den Adressraum an nur
einer Basisadresse abgebildet wird. Wenn un ter der vorliegenden
Erfindung auf den RAM unter 16 verschiedenen Basisadressen zugegriffen
werden kann, werden 4 höhere Address
Lines ignoriert werden. Die Fachleute auf dem Gebiet werden erkennen,
dass eine MMU genau das Gegenteil macht. In dem Fall einer MMU kann ein
anderer Code von dem Gesichtspunkt der Software und der Hardware
aus die gleiche Adresse aufweisen.
-
Die
eineindeutige Beziehung zwischen einem spezifischen Codefragment
oder zwischen spezifischen Daten und seiner bzw. ihrer Adresse macht es
leicht, Abschnitte eines Programmcodes oder von Daten in einem RAM
zu finden, ohne dass eine Markierung oder ein vollständiges Abtasten
benötigt
werden. Anders als bei herkömmlichen
MMUs können verschiedene
Programme nicht die gleichen lokalen Adressen verwenden.
-
Die
vorliegende Erfindung erzeugt einen virtuellen Speicher von eindeutigen
Adressen mit mehr Basisadressen und speichert die Informationen
in einer unzweideutigen Weise (eineindeutig). Weniger Bits werden
benötigt,
um die Speicherposition innerhalb des physikalischen RAM zu beschreiben.
Die Speicherposition in dem RAM, an der sich der Programmcode oder
die Daten befindet bzw. befinden, ist auf der Grundlage des oben
beschriebenen Abbildens der Basisadresse begrenzt. Somit werden
weniger Bits benötigt,
um diese Speicherstelle zu beschreiben, da die mögliche Speicherstelle kleiner
ist.
-
Das
oben beschriebene Ausführungsbeispiel der
vorliegenden Erfindung ist rückwärts kompatibel, solange
die zusätzlichen
Adressen für
den gleichen physikalischen RAM nicht aufgebraucht sind.
-
Einem
Fachmann auf dem Fachgebiet wird klar sein, dass zusätzliche
Variationen bei dem oben beschriebenen Ausführungsbeispiel der vorliegenden
Erfindung durchgeführt
werden können,
ohne dass von dem Erfindungsgedanken und dem Schutzumfang der Erfindung
abgewichen wird, die von den nachfolgenden Ansprüchen definiert wird.
-
Die
Erfindung kann auch in einem System realisiert werden, das einen
Mikroprozessor, eine Haltepunktlogik, eine Speicherschnittstelle
und einen Adressbus umfasst, der all diese Systemkomponenten miteinander
koppelt. Der Adressbus ist so konfiguriert, dass er Adressen, die
von dem Mikroprozessor ausgegeben werden, mit einer hohen Breite
zu der Haltepunktlogik und mit einer reduzierten Breite zu der Speicherschnittstelle überträgt. Die
Breite der Adressen kann die Anzahl an Adressbits sein, so dass
mehr Adressbits der Adressen der Haltepunktlogik als der Speicherschnittstelle
bereitgestellt werden. Die Adressen, die zu der Speicherschnittstelle übertragen
werden, dienen dazu, einen angeschlossenen Speicher, der Code- oder
Datenfragmente hält,
zu adressieren. Insbesondere kann der Adressbus so konfiguriert
sein, dass er Adressen, die von dem Mikroprozessor ausgegeben werden,
mit einer hohen Breite zu der Haltepunktlogik und mit einer reduzierten
Breite zu der Speicherschnittstelle überträgt.