-
Gebiet der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf einen Prozessor mit geänderter
Harvard-Architektur, der Programmspeicherbereich eingemappten Datenspeicherbereich
aufweist und Schutz vor fehlerhafter Durchführung von Dateneinträgen im Programmspeicherbereich
aufweist.
-
Hintergrund der Erfindung
-
Prozessoren,
umfassend Mikroprozessoren, digitale Signalprozessoren und Mikrocontroller
werden durch das Ausführen
von Anwendungsprogrammen wirksam, die in einer oder mehreren Reihen
von in einem Speicher abgelegten Programmanweisungen verkörpert sind.
Die Prozessoren führen
die Software aus durch das Abrufen der Programmanweisungen aus der
Reihe von Programmanweisungen, das Dekodieren der Programmanweisungen
und das Ausführen
von diesen. Zusätzlich
zu Programmanweisungen werden auch Daten in den Speicher abgespeichert,
auf den durchden Prozessor zugegriffen werden kann. Im Allgemeinen
verarbeiten die Programmanweisungen Daten durch Zugreifen auf Daten
im Speicher, Modifizieren der Daten und Abspeichern der modifizierten
Daten im Speicher.
-
Eine
gut bekannte Architektur für
Prozessoren ist als die Harvard-Architektur bekannt. Bei dieser Architektur
werden Daten und Programmanweisungen in getrennten Speichern abgelegt,
auf die gleichzeitig zugegriffen werden kann. Auf Grund dieses gleichzeitigen
Zugriffs stellt die Harvard-Architektur gegenüber anderen
Architekturen wesentliche Vorteile in der Verarbeitungsgeschwindigkeit
zur Verfügung.
Ein typischer Prozessor in Harvard-Architektur, der internen Speicher
aufweist, weist zwei getrennte Speicher auf, einen für Daten
und einen für
Programmanweisungen. Um die Speicherkapazität solch eines Prozessors zu
erweitern, muss Speicher außerhalb
des Prozessors hinzugefügt
werden. Da jedoch ein Prozessor in Harvard-Architektur zwei getrennte Speicher
aufweist, müssen,
um sowohl den Datenspeicher als auch den Programmanweisungsspeicher
zu erweitern, zwei getrennte externe Speicher hinzugefügt werden.
Dies ist ein wesentlicher Nachteil, wenn kostengünstige Anordnungen gebaut werden.
-
US 5,034,887 offenbart einen
Mikroprozessor, der eine Harvard-Architektur mit einem Datenspeicher,
einem Anweisungsspeicher einem gemeinsamen Bereich an Speicher aufweist,
um Daten und/oder Anweisungen zu speichern.
US 5,706,466 offenbart eine hybride
Harvard/von Neumann Datenverarbeitungsanordnung, die ebenfalls einen
kombinierten Daten-/Anweisungsspeicher
umfasst.
WO 96/11443 offenbart
ein erweitertes Harvard-Architektur Speichersystem, das einen Adressspeicherbereich
zum Vorhalten einer geordneten Reihenfolge von Programmspeicheradressen
und einen Wertespeicherbereich zum Vorhalten einer Reihe von damit
in Beziehung stehenden Datenwertsätzen aufweist.
US 5,040,178 offenbart im Allgemeinen
ein Verfahren zum Fehlerschutz für
eine Mikroprozessoranordnung.
-
Es
ergibt sich ein Bedarf für
einen Prozessor, der eine Architektur aufweist, die die Vorteile
der Verarbeitungsgeschwindigkeit der Harvard-Architektur zur Verfügung stellt,
aber keine zwei getrennten externen Speicher erfordert, um sowohl
den Datenspeicher als auch den Programmanweisungsspeicher zu erweitern.
Eine Lösung
für dieses
Problem ist in dem
US Patent
6,728,856 beschrieben, das nach dem Anmeldetag dieser Anmeldung
veröffentlicht
wurde. Der beschriebene Prozessor weist getrennten Programmspeicherbereich
und Datenspeicherbereich auf, stellt aber die Fähigkeit zur Verfügung, mindestens
einen Teilbereich des Programmspeicherbereiches in den Datenspeicherbereich
einzumappen. Dies ermöglicht,
dass die meisten Programmanweisungen, die verarbeitet werden, die
Geschwindigkeitsvorteile von gleichzeitigem Zugriff auf Pro grammanweisungen
und Daten erlangen. Es ermöglicht auch,
dass der Programmspeicherbereich und der Datenspeicherbereich unter
Verwendung von nur einer externen Speichervorrichtung, die sowohl
Programmanweisungen wie auch Daten umfasst, außerhalb des Prozessors erweitert
werden.
-
Bei
dieser Lösung
ergibt sich jedoch ein Problem. Unter gewissen Umständen kann
der Prozessor einen Eintrag in dem Programmspeicherbereich abrufen
und versuchen diesen auszuführen,
der in den Datenspeicherbereich eingemappt worden ist und der Daten
und keine Programmanweisung enthält.
Solch eine Situation kann zum Beispiel in Folge eines Fehlers in
der Software auftreten, die ausgeführt wird. Eine versuchte Ausführung von
Daten, die keine Programmanweisung sind, kann unvorhersehbare Ergebnisse
bewirken. Es ergibt sich ein Bedarf für ein Verfahren, durch das
eine versuchte Ausführung
von Daten, die keine Programmanweisung sind, festgestellt wird und
ausgeglichen werden kann.
-
Zusammenfassung der Erfindung
-
Die
vorliegende Erfindung ist ein Verfahren nach Anspruch 1 und ein
Prozessor, der das Verfahren nach Anspruch 8 durchführt, der
die Fähigkeit bietet,
die versuchte Ausführung
von Daten festzustellen und auszugleichen, die keine Programmanweisung
in einem Prozessor sind, in dem mindestens ein Teilbereich eines
Programmspeicherbereiches in einen Datenspeicherbereich eingemappt
ist. Dies ermöglicht
es dem Prozessor, die Geschwindigkeitsvorteile und die Erweiterungsvorteile
ohne das Risiko von unvorhersehbarem Programmausführungsverhalten
zur Verfügung
zu stellen.
-
Gemäß der vorliegenden
Erfindung weist ein Verfahren zum Betrieb eines Prozessors die nachfolgenden
Schritte auf: Mappen von mindestens einem Teilbereich eines Programmspeicherbereiches
in einen Datenspeicherbereich; Speichern eines Eintrags in den Programmspeicherbereich,
der in den Datenspeicherbereich eingemappt ist, wobei der Eintrag Daten
und einen Schutzbefehlscode aufweist; Abrufen des Eintrags aus dem
Programmspeicherbereich; Versuchen, den abgerufenen Eintrag auszuführen; Abfangen
des Schutzbefehlscodes; Verzweigen zu einem Trap Handler; und Ausführen des
Trap Handlers.
-
Gemäß einem
Aspekt der vorliegenden Erfindung ist der Trap Handler ein Trap
Handler für
unzulässige
Anweisungen, und der Schritt, den Trap Handler auszuführen, weist
die Schritte auf, festzustellen, dass der Befehlscode ein Schutzbefehlscode ist,
und eine Softwareroutine auszuführen,
um den Trap zu verarbeiten. Der Programmspeicherbereich kann im
Inneren des Prozessors angeordnet sein. Der Prozessor kann betriebsfähig mit
einer externen Speichervorrichtung verbunden sein, die betriebsfähig ist,
um Programmanweisungen und Daten abzuspeichern, wobei die externe
Speichervorrichtung Programmspeicherbereich aufweist.
-
Gemäß einem
Aspekt der vorliegenden Erfindung ist der Trap Handler ein Schutztrap
Handler. Der Programmspeicherbereich kann innerhalb des Prozessors
angeordnet sein. Der Prozessor kann betriebsfähig mit einer externen Speichervorrichtung verbunden
sein, die betriebsfähig
ist, um Programmanweisungen und Daten abzuspeichern, wobei die externe
Speichervorrichtung Programmspeicherbereich aufweist.
-
Kurze Beschreibung der Figuren
-
Die
oben beschriebenen Merkmale und Vorteile der vorliegenden Erfindung
werden vollständiger verstanden
werden unter Bezugnahme auf die detaillierte Beschreibung und die
beigefügten
Figuren, in denen:
-
1 ein
funktionales Blockdiagramm einer Ausführungsform eines Prozessorchips
darstellt, innerhalb dessen die vorliegende Erfindung Anwendung
finden kann.
-
2 ein
funktionales Blockdiagramm eines Datenbusplans zu Verwendung in
einem Prozessor 100, wie zum Beispiel dem in 1 gezeigten,
darstellt.
-
3 ein
beispielhaftes Speicherabbild eines Datenspeicherbereichs zeigt,
der in dem in 2 gezeigten Prozessor ausgeführt werden
kann.
-
4 ein
beispielhaftes Blockdiagramm des Einmappens von Programmspeicherbereich
in den Datenspeicherbereich darstellt, das gemäß der vorliegenden Erfindung
in dem in 2 gezeigten Prozessor ausgeführt werden
kann.
-
5 ein
Blockdiagramm eines Datenausführungsschutzschemas
darstellt, das gemäß der vorliegenden
Erfindung in dem in 2 gezeigten Prozessor ausgeführt werden
kann.
-
6 ein
Verarbeitungsflussdiagramm eines Prozesses zur Feststellung und
Handhabung der fehlerhaften Ausführung
eines Dateneintrags darstellt, das entsprechend der vorliegenden
Erfindung in dem in 2 gezeigten Prozessor ausgeführt werden
kann.
-
Detaillierte Beschreibung
-
Überblick über die
Prozessorelemente
-
1 stellt
ein funktionales Blockdiagramm einer Ausführungsform eines Prozessorchips
dar, innerhalb dessen die vorliegende Erfindung Anwendung finden
kann. Mit Bezug auf 1 ist ein Prozessor 100 mit
externen Vorrichtungen/Anordnungen 140 verbunden. Der Prozessor 100 kann
eine beliebige Art von Prozessor sein, zum Beispiel umfassend einen
digitalen Signalprozessor (DSP), einen Mikroprozessor, einen Mikrocontroller
oder Kombinationen davon. Die externen Vorrichtungen 140 können beliebige
Arten von Anordnungen oder Vorrichtungen sein, umfassend Ein-/Ausgabevorrichtungen
wie Tastaturen, Anzeigeeinheiten, Lautsprecher, Mikrophone, Speicher
oder andere Anordnungen, die Prozessoren umfassen können oder
nicht. Außerdem können der
Prozessor 100 und die externen Vorrichtungen 140 zusammen
eine alleinstehende Anordnung aufweisen.
-
Der
Prozessor 100 weist einen Programmdatenspeicher 105 auf,
eine Einheit 110 zum Abruf/zur Dekodierung einer Anweisung,
Anweisungsausführungseinheiten 115,
Datenspeicher und Register 120, Peripheriegeräte 125,
Daten I/O 130, und eine Programmzähler- und Schleifensteuereinheit 135.
Der Bus 150, der einen oder mehrere gemeinsame Busse umfassen
kann, kommuniziert, wie dargestellt, Daten zwischen den Einheiten.
-
Der
Programmdatenspeicher 105 speichert in Programmanweisungen
verkörperte
Software zur Ausführung
durch den Prozessor 100 ab. Der Programmdatenspeicher 105 kann
jede Art von nichtflüchtigem
Speicher, wie zum Beispiel einen Lesespeicher (Read Only Memory – ROM),
einen programmierbaren Lesespeicher (Programmable Read Only Memory – PROM),
einen elektrisch programmierbaren oder einen elektrisch programmierbaren und
löschbaren
Lesespeicher (Electrically Programmable Read Only Memory – EPROM
oder Electrically Programmable and Erasable Read Only Memory – EEPROM)
oder Flash-Datenspeicher umfassen. Außerdem kann der Programmdatenspeicher 105,
wie gezeigt, mit externem nichtflüchtigem Speicher 145 ergänzt werden,
um die Komplexität
der für
den Prozessor 100 verfügbaren
Software zu erhöhen.
Alternativ dazu kann der Programmdatenspeicher flüchtiger
Speicher sein, der Programmanweisungen zum Beispiel von einem externen
nichtflüchtigen
Datenspeicher 145 erhält.
Wenn der Programmdatenspeicher 105 ein nichtflüchtiger
Speicher ist, kann der Programmdatenspeicher zum Zeitpunkt der Herstellung
des Prozessors 100 programmiert werden oder vor oder während der
Einrichtung des Prozessors 100 innerhalb einer Anordnung.
Im letzteren Szenario kann der Prozessor 100 durch ein
Verfahren programmiert werden, das als sogenanntes „In-line
Serial Programming" bezeichnet
wird.
-
Die
Einheit 110 zum Abruf/zur Dekodierung der Anweisung ist
mit dem Programmdatenspeicher 105, den Anweisungsausführungseinheiten 115 und dem
Datenspeicher 120 verbunden. Die Programmzähler- und
Schleifensteuereinheit 135 ist mit dem Programmdatenspeicher 105 und
dem Bus 150 verbunden. Die Einheit 110 zum Abruf/zur
Dekodierung der Anweisung ruft die Anweisungen aus dem Programmdatenspeicher 105 ab,
der durch den im Programmzähler 135 enthaltenen
Adresswert angegeben wird. Die Einheit 110 zum Abruf/zur
Dekodierung der Anweisung dekodiert die abgerufenen Anweisungen
und sendet die dekodierten Anweisungen dann an die entsprechende
Ausführungseinheit 115.
Die Einheit 110 zum Abruf/zur Dekodierung der Anweisung
kann auch Operandeninformation umfassende Adressen von Daten an
den Datenspeicher 120 und an funktionelle Elemente senden,
die auf die Register zugreifen.
-
Die
Programmzähler-
und Schleifensteuereinheit 135 weist ein (nicht gezeigtes)
Programmzählerregister
auf, das eine Adresse der nächsten
Anweisung speichert, die abgerufen werden soll. Während der
normalen Verarbeitung der Anweisungen kann das Programmzählerregister
erhöht
werden, um zu bewirken, dass sequentielle Anweisungen abgerufen
werden. Alternativ dazu kann der Programmzählerwert, durch Laden eines
neuen Werts in diesen über
den Bus 150, geändert
werden. Der neue Wert kann abgeleitet werden auf der Basis des Dekodierens
und Ausführens
einer Flusssteuerungsanweisung, wie zum Beispiel einer Verzweigungsanweisung.
Außerdem
kann der Schleifensteuerungsteilbereich der Programmzähler- und
Schleifensteuereinheit 135 verwendet werden, um die Verarbeitung von
Wiederholungsanweisungen und eine Schleifenwiederholungssteuerung
zur Verfügung
zu stellen, wie sie nachstehend näher beschrieben wird.
-
Die
Anweisungsausführungseinheiten 115 erhalten
die dekodierten Anweisungen von der Einheit 110 zum Abruf/zur
Dekodierung der Anweisungen und führen die dekodierten Anweisungen
danach aus. Als Teil dieses Verfahrens können die Ausführungseinheiten
einen oder zwei Operanden über den
Bus 150 abrufen und das Ergebnis in einen Register- oder
Speicherort innerhalb des Datenspeichers 120 abspeichern.
Die Ausführungseinheiten können eine
arithmetische Logikeinheit (Arithmetic Logic Unit – ALU) wie
zum Beispiel jene umfassen, die typischerweise in einem Mikrocontroller
vorgefunden werden. Die Ausführungseinheiten
können
auch eine digitale Sig nalverarbeitungseinheit, einen Fließkommaprozessor,
einen Ganzzahlenprozessor oder jede andere zweckmäßige Ausführungseinheit
umfassen. Eine bevorzugte Ausführungsform
der Ausführungseinheiten
und ihrer Interaktion mit dem Bus 150, der einen oder mehrere
Busse umfassen kann, wird nachstehend detaillierter unter Bezugnahme
auf 2 dargestellt.
-
Der
Datenspeicher und die Register 120 sind flüchtige Speicher
und werden verwendet, um von den Ausführungseinheiten verwendete
und erzeugte Daten abzuspeichern. Der Datenspeicher 120 und der
Programmdatenspeicher 105 sind vorzugsweise getrennte Speicher
zum Abspeichern von Daten beziehungsweise Programmanweisungen. Dieses
Format ist im Allgemeinen als eine Harvard-Architektur bekannt.
Es wird jedoch angemerkt, dass die Architektur gemäß der vorliegenden
Erfindung eine von-Neuman-Architektur oder eine modifizierte Harvard-Architektur
sein kann, die die Verwendung von Programmbereich als Datenbereich
zulässt.
Eine punktierte Linie ist gezeigt, die zum Beispiel den Programmdatenspeicher 105 mit
dem Bus 150 verbindet. Dieser Pfad kann Logik für den Abgleich
von Datenlesevorgängen
aus dem Programmbereich umfassen, wie zum Beispiel während Tabellenlesevorgängen aus
dem Programmbereich in den Datenspeicher 120.
-
Unter
erneuter Bezugnahme auf 1 kann eine Vielzahl von Peripheriegeräten 125 auf
dem Prozessor mit dem Bus 125 verbunden sein. Die Peripheriegeräte können zum
Beispiel Analog-Digital-Wandler, Taktgeber, Busschnittstellen und
Protokolle umfassen, wie zum Beispiel das Controller Area Network
(CAN) Protokoll oder das Universal Serial Bus (USB) Protokoll und
anderen Peripheriegeräte. Die
Peripheriegeräte
tauschen über
den Bus 150 Daten mit den anderen Einheiten aus.
-
Die
Daten-Ein-/Ausgabe-Einheit 130 kann Sender/Empfänger und
andere Logik umfassen, um Schnittstellen zu den externen Vorrichtungen/Anordnungen 140 zu
bilden. Die Daten-Ein-/Ausgabe-Einheit 130 kann weiterhin
Funktionalität umfassen,
um die schaltungsinterne serielle Programmierung des Programmdatenspeichers
durch die Daten-Ein-/Ausgabe-Einheit 130 zu
ermöglichen.
-
2 veranschaulicht
ein funktionales Blockdiagramm eines Datenbusschemas zur Verwendung
in einem Prozessor 100, wie zum Beispiel das in 1 gezeigte,
das eine integrierte Mikrocontroller Arithmetic Logic Unit (ALU) 270 und
eine digitale Signalverarbeitungs-(DSP)Einheit 230 aufweist. Diese
Anordnung kann verwendet werden, um DSP Funktionalität in einen
vorhandenen Mikrocontrollerkern zu integrieren. Unter Bezugnahme
auf 2 ist der Datenspeicher 120 gemäß 1 als
zwei getrennte Speicher ausgeführt;
ein X Datenspeicher 210 und ein Y Datenspeicher 220,
die jeder durch einen X Adressgenerator 250 beziehungsweise
einen Y Adressgenerator 260 adressierbar sind. Der X Adressgenerator
kann auch die Adressierung des Y Datenspeicherbereichs ermöglichen,
wodurch auf diese Weise erreicht wird, dass der Datenbereich wie ein
einzelner zusammenhängender
Datenspeicherbereich erscheint, wenn er durch den X Adressgenerator
angesprochen wird. Der Bus 150 kann in der Form von zwei
Bussen ausgeführt
werden, einem für jeden
von den X und Y Datenspeichern, um das gleichzeitige Abrufen von
Daten aus dem X und Y Datenspeicher zu ermöglichen.
-
Die
W Register 240 sind Adress- und/oder Datenregister für allgemeine
Zwecke. Die DSP Einheit 230 ist sowohl mit den X als auch
den Y Datenspeicherbussen und mit den W Registern 240 verbunden.
Die DSP Einheit 230 kann innerhalb eines einzelnen Prozessortakts
gleichzeitig Daten aus dem X und dem Y Datenspeicher abrufen, Anweisungen ausführen, die
mit den gleichzeitig abgerufenen Daten arbeiten, und das Ergebnis
in einen (nicht gezeigten) Sammelspeicher schreiben und ein vorheriges Ergebnis
in den X oder Y Datenspeicher oder das W Register 240 schreiben.
-
In
einer Ausführungsform
kann die ALU 270 nur mit dem X Datenspeicherbus verbunden
sein und kann nur Daten vom X Bus abrufen. Die X und Y Datenspeicher 210 und 220 können vom
X Adressgenerator jedoch als ein einzelner Datenspeicherbereich angesprochen
werden, um die Datenspeichertrennung für die ALU 270 transparent
zu machen. Die Datenspeicherorte innerhalb der X und Y Datenspeicher
können
durch in den W Registern 240 gespeicherte Werte adressiert
werden.
-
Jedes
beliebige Prozessortaktschema kann zum Abrufen und Ausführen von
Anweisungen ausgeführt
werden. Es folgt jedoch ein bestimmtes Beispiel, um eine Ausführungsform
der vorliegenden Erfindung zu veranschaulichen. Jeder Anweisungstakt setzt
sich aus vier Q Taktzyklen Q1 bis Q4 zusammen. Die vierphasigen
Q Zyklen stellen Taktsignale zur Verfügung, um die Teilbereiche zum
Dekodieren, Lesen, Verarbeiten der Daten und Schreiben der Daten
in jedem Anweisungszyklus zu koordinieren.
-
Gemäß einer
Ausführungsform
des Prozessors 100 führt
der Prozessor 100 gleichzeitig zwei Operationen aus – er ruft
die nächste
Anweisung ab und führt
die vorliegende Anweisung aus. Dementsprechend treten die zwei Prozesse
gleichzeitig auf. Die nachfolgende Reihenfolge von Ereignissen kann zum
Beispiel den nachfolgenden Anweisungsabrufzyklus umfassen:
- Q1:
Anweisung abrufen
- Q2: Anweisung abrufen
- Q3: Anweisung abrufen
- Q4: Anweisung in Prefetchregister auffangen, PC (Program Counter)
erhöhen
-
Die
nachfolgende Reihenfolge von Ereignissen kann zum Beispiel den Anweisungsausführungszyklus
für eine
einzelne Operandenanweisung umfassen:
- Q1: Anweisung in IR
auffangen, dekodieren, und Adressen von Operandendaten feststellen
- Q2: Operanden abrufen
- Q3: durch Anweisung festgelegte Funktion ausführen und
Zieladresse für
die Daten berechnen
- Q4: Ergebnis in Zieladresse schreiben
-
Die
nachfolgende Reihenfolge von Ereignissen kann zum Beispiel unter
Verwendung eines Prefetchmechanismus für Daten den Anweisungsausführungszyklus
für eine
zweifache Operandenanweisung umfassen. Diese Anweisungen rufen vorab
die zweifachen Operanden gleichzeitig aus den X und Y Datenspeichern
ab und speichern sie in die in der Anweisung angegebenen Register.
Sie ermöglichen gleichzeitig
die Ausführung
von Anweisungen auf die während
des vorherigen Zyklus abgerufenen Operanden.
- Q1: Anweisung
in IR auffangen, Dekodieren, und Adressen von Operandendaten feststellen
- Q2: Operanden vorab in angegebene Register abrufen, Operation
in der Anweisung ausführen
- Q3: Operation in der Anweisung ausführen, Zieladresse für Daten
berechnen
- Q4: Ausführung
abschließen,
Ergebnis in Zieladresse schreiben
-
Ein
beispielhaftes Speicherabbild des Datenbereichsspeichers 300 ist
in 3 gezeigt. Der Datenbereichsspeicher 300 weist
eine Vielzahl von Speicherblöcken
auf, die in X Adressdatenspeicher und Y Adressdatenspeicher unterteilt
sind. Typischerweise ist der Datenbereichsspeicher 300 als Schreib-
und Lesespeicher mit Direktzugriff (Random Access Read-Write Memory – RAM),
ausgeführt,
um auf diese Weise zu ermöglichen,
dass Daten wie erforderlich gelesen und geschrieben werden können. Jedoch
kann auch Festwertspeicher (Read-Only Memory – ROM) vorteilhaft für mindestens
einen Teilbereich des Datenbereichsspeichers 300 verwendet werden.
Zum Beispiel können
konstante Datenwerte, Nachschlagetabel len, usw. zweckmäßig in ROM
gespeichert werden. In dem in 3 gezeigten
Beispiel weist der X Adressdatenspeicher die Speicherblöcke 302, 304, 306 und 308 auf,
während
der Y Adressdatenspeicher den Speicherblock 310 aufweist.
Der Datenbereichsspeicher 300 ist in zwei Blöcke, den
X Adressdatenspeicher und den Y Adressdatenspeicher aufgeteilt.
Ein Schlüsselelement
dieser Architektur ist, dass der Y Adressdatenspeicherbereich eine
Teilmenge des X Adressdatenspeicherbereichs ist und vollständig innerhalb
des X Adressdatenspeicherbereichs enthalten ist. Um einen scheinbar linearen
Adressierungsbereich zur Verfügung
zu stellen, würden
die X und Y Adressdatenspeicherbereiche typischerweise zusammenhängende Adressen aufweisen,
obwohl dies keine architektonische Notwendigkeit ist.
-
In
dem in 3 gezeigten Beispiel weist der Speicherblock 302 einen
Block aus zusammenhängendem
Speicher auf, der bei der Datenspeicheradresse 0x0000 beginnt. Der
Speicherblock 302 ist in dem X Adressdatenspeicherbereich
reserviert und ist unter Verwendung von direkt den Speicher adressierenden
Anweisungen direkt adressierbarer. Der verbleibende X Adressdatenspeicher
und die Y Adressdatenspeicherbereiche sind unter Verwendung von anderen
Anweisungen indirekt adressierbar. In dem in 3 gezeigten
Beispiel befindet sich der Y Adressdatenspeicherbereich 310 zwischen
zwei Blöcken
des X Adressdatenspeicherbereichs, Block 304 und 306.
Dies ist jedoch nur ein Beispiel, da sich der Y Adressdatenspeicherbereich 310 irgendwo
innerhalb des nicht reservierten X Adressdatenspeicherbereichs befinden
kann. Die Teilung zwischen den X und Y Adressbereichen ist beliebig
und wird durch die Speicherdekodierung festgelegt, die in 2 gezeigt
wird. Sowohl der X als auch der Y Adressgenerator können innerhalb
des Bereichs des Datenspeicherbereichs 300 beliebige effektive
Adressen (EA) erzeugen. Zugriffe auf Speicheradressen, die sich
in dem anderen Adressbereich befinden, oder auf Speicheradressen,
die nicht durch physischen Speicher ausgeführt sind, geben jedoch Daten
mit 0x0000 (alles Nullen) zurück.
-
Der
Speicherblock 308 wird in 3 als ein X
Adressdatenspeicherblock gezeigt. Der Speicherblock 308,
der mindestens einen Teilbereich des Datenspeicherbereichs 300 aufweist,
kann als X Adressdatenspeicher, Y Adressdatenspeicher oder eine
Mischung aus X Adressdatenspeicher und Y Adressdatenspeicher verwendet
werden. Wenn er als X Adressdatenspeicher verwendet wird, kann der Speicherblock 308 in
den Programmspeicherbereich eingemappt werden. Dies stellt den transparenten Zugriff
auf konstante Daten, wie zum Beispiel abgespeicherte Konstanten,
Nachschlagetabellen, usw. vom X Adressdatenspeicherplatz zur Verfügung ohne
die Notwendigkeit, spezielle Anweisungen zu verwenden. Dieses Merkmal
lässt das
Einmappen eines Teilbereichs des Datenspeicherbereiches in einen
ungenutzten Bereich des Programmdatenspeichers zu, und, da alle
ungenutzten internen Adressen extern eingemappt werden, auf den
externen Speicherbus. Dies wird in der 4 gezeigt,
die ein beispielhaftes Blockdiagramm des Mappings des Programmspeicherbereichs
in den Datenspeicherbereich ist. Der Datenspeicherbereichsblock 308,
der ein Teilbereich des Datenspeicherbereiches 300 ist, wird
auf eine Datenspeicherbereichsseite 402 im internen Programmspeicherbereich 404 eingemappt. Der
Ort der Datenspeicherbereichsseite 402 im internen Programmspeicherbereich 404 wird
durch das Seitenregister 406 angegeben. Der interne Programmspeicherbereich 404 wird
immer noch für
den Zugriff auf Programmanweisungen verwendet, wie durch den Programmzähler (Program
Counter – PC) 408 angegeben.
-
Die
externe Speichervorrichtung 410 ist mit dem externen Speicherbus 412 des
Prozessors verbunden. Die externe Speichervorrichtung 410 weist den
externen Programm-/Datenspeicherbereich 414 auf.
Da alle ungenutzten internen Adressen extern in den externen Speicherbus
eingemappt sind, ist die eingemappte Datenspeicherbereichsseite 402 auch auf
die externe eingemappte Datenspeicherbereichsseite 416 eingemappt,
die sich in dem externen Programm-/Datenspeicherbereich 412 befindet.
Wenn die externe Speichervorrichtung 410 ein RAM ist, dann
können
Daten aus der eingemapptem externen Datenspeicherbereichsseite 416 gelesen
und auf diese geschrieben werden. Der externe Programm-/Datenbereich 414 kann
auch externen Programmspeicherbereich 418 umfassen, der
getrennt von der eingemappten externen Datenspeicherbereichsseite 416 sein
kann, oder der mit der eingemappten externen Datenspeicherbereichsseite 416 überlappen
kann.
-
Da
der Programmspeicherbereich Daten umfassen kann, die verwendet werden,
wenn ein Teilbereich des Programmspeicherbereiches in den Datenspeicherbereich
eingemappt ist, besteht eine Gefahr, dass der Prozessor diese Daten
fälschlicherweise
abruft und versucht, diese auszuführen. Dies kann zum Beispiel
geschehen, wenn ein Fehler in einem Anwendungsprogramm vorliegt,
das auf dem Prozessor abläuft,
der den Programmzähler
(PC) auf eine Speicheradresse im Programmspeicherbereich setzt,
in der Daten abgespeichert sind. Dieses Problem kann sich ergeben,
wenn Daten im internen Programmspeicherbereich gespeichert werden
und tritt noch wahrscheinlicher auf, wenn Daten in einer externen
Speichervorrichtung gespeichert werden. Die vorliegende Erfindung
weist einen Mechanismus zum Feststellen von solchen fehlerhaften
Zugriffen auf und stellt die Fähigkeit
zur Verfügung,
mit solchen Fehlern umzugehen.
-
Ein
Blockdiagramm des Datenausführungsschutzschemas
der vorliegenden Erfindung ist in 5 gezeigt.
Der Datenspeicherbereich 502, einschließlich einer Vielzahl von Dateneinträgen 504, wird
in einen Datenspeicherblockteilbereich 506 des Programmspeicherbereichs 508 eingemappt.
Der Programmspeicherbereich 508 weist auch einen oder mehrere
Blöcke
von Programmanweisungen auf, wie zum Beispiel die Programmanweisungsblöcke 510 und 512.
Wie gezeigt, weist jeder Dateneintrag im Datenspeicherbereich 502,
wie zum Beispiel der Dateneintrag 514, 16 Bits an Daten
auf. Jeder Programmanweisungseintrag, wie zum Beispiel der Programmanweisungseintrag 516 im
Programmspeicherbereich 508, weist 24 Bits der Programmanweisung
auf. Die Einträge
im Datenspeicherblock 506 des Programmspeicherbereichs 508,
wie zum Beispiel der Eintrag 518, bestehen ebenso aus 24 Bits.
Da ein Dateneintrag nur 16 Bits erfordert, wie zum Beispiel der
Datenteilbereich 520 des Eintrags 518, werden
8 Bits jedes Eintrags im Datenspeicherblock 506 nicht von
Daten verwendet und können
für andere
Funktionen verwendet werden. In der vorliegenden Erfindung wird
dieser andere Teilbereich verwendet, um einen Schutzbefehlscode 522 zu
halten, der es ermöglicht,
dass die fehlerhafte Ausführung
eines Dateneintrags festgestellt wird.
-
Ein
Verfahren 600 zur Feststellung und Handhabung der fehlerhaften
Ausführung
eines Dateneintrags ist in 6 gezeigt.
Das Verfahren beginnt mit Schritt 602, in dem Daten in
den Datenspeicherbereich gespeichert werden, der von Programmspeicherbereich
gemappt wurde. Diese Daten werden in die unteren 16 Bits jedes Eintrags
abgespeichert, der verwendet wird. Zusätzlich zu den Daten, die abgespeichert
werden, wird ein Schutzbefehlscode in die oberen 8 Bits (Byte) jedes
Dateneintrags abgespeichert, der verwendet wird. Typischerweise
wird der Schutzbefehlscode abgespeichert, wenn der Dateneintrag
abgespeichert wird. Da Programmdatenspeicher typischerweise unter
Verwendung von nichtflüchtigem
Speicher ausgeführt
wird, werden die im Programmdatenspeicher abgelegten Programmanweisungen
zum Beispiel während
des Produktionsprozesses in den Programmdatenspeicher abgespeichert.
Die Schutzbefehlscodes können in
diesem Schritt im Produktionsprozess leicht in den Programmdatenspeicher
gespeichert werden. Dies gilt sowohl für den internen Programmdatenspeicher als
auch für
nichtflüchtigen
externen Datenspeicher.
-
In
Schritt 604 wird durch Ausführen der geeigneten Programmanweisungen
Programmspeicherbereich in den Datenspeicherbereich eingemappt.
In Schritt 606 ruft der Prozessor fälschlicherweise Daten ab und
versucht diese auszuführen,
die in einem Eintrag in dem Datenspeicherbereich gespeichert wurden,
der von Programmspeicherbereich gemappt wurde. Da der Prozessor
eine Programmanweisung abruft, behandelt der Prozessor den Eintrag
als einen Programmanweisungseintrag und ruft die gesamten 24 Bits
des Eintrags ab. Die oberen 8 Bits des Eintrags sind der Schutzbefehlscode,
während
die unteren 16 Bits die Daten im Eintrag sind. Der Prozessor versucht,
den abgerufenen Eintrag auszuführen,
und versucht insbesondere den Schutzbefehlscode zu dekodieren. In
Schritt 608 bewirkt das versuchte Dekodieren des Schutzbefehlscodes
das Auftreten eines Prozessortraps. Ein Trap kann als ein nicht
maskierbarer, stapelfähiger
Interrupt angesehen werden. Sie stellen ein Mittel zur Verfügung, durch
das fehlerhafter Betrieb während
der Softwarefehlerprüfung
und während
des Betriebs der Software korrigiert werden kann. Bei Auftreten
eines Traps wird der Ausführungsfluss
des Prozessors in Schritt 610 zu einem Trap Handler gerichtet.
Das heißt,
der Programmzähler
des Prozessors wird mit einem Wert geladen, der auf den Trap Handler
zeigt. Der Trap Handler ist eine Softwareroutine, die bei Auftreten
der abgefangenen Bedingung die entsprechende korrigierende Aktion
ergreift. Der Wert wird in einer Ausnahmevektortabelle gespeichert,
die Vektoren für
eine Vielfalt von Ausnahmebedingungen, wie zum Beispiel Rücksetzen,
Stapelüberlauf,
Adressfehler, unzulässige
Anweisungstraps, arithmetische Fehler, usw. aufweist. Jeder Eintrag
in der Ausnahmevektortabelle zeigt auf einen Ausnahmehandler, der
bei Auftreten der entsprechenden Ausnahme die entsprechende Aktion
ergreift. In Schritt 612 behandelt der Trap Handler den
Fehler. Typischerweise erzwingt der Trap Handler einfach ein Rücksetzen
des Prozessors. Dies würde
zum Beispiel in einer Ausführung
erfolgen, in der eine eigenständige
Anwendung im Prozessor ausgeführt
wird. Da ein Versuch, einen Dateneintrag auszuführen, wahrscheinlich ein Ergebnis
eines ernsten Programmfehlers ist, ist das Ausführen eines Rücksetzens
des Prozessors oft die beste Art, sich von solch einem Fehler zu
erholen. In einer Ausführungsform,
in der ein Betriebssystem den Prozessor steuert, kann es möglich sein,
einfach das Anwendungsprogramm zu beenden, das den Fehler bewirkt
hat, und zu ermöglichen,
dass sich das Betriebssystem vom Fehler erholt.
-
In
einer bevorzugten Ausführungsform
wird der Trapvektor für
unzulässige
Anweisungen verwendet, um den Prozessor zu einer Routine zu verzweigen,
die die beabsichtigte Ausführung
eines Schutzbefehlscodes handhabt. Der Schutzbefehlscode muss einer
der möglichen
8 Bit Befehlscodes sein, der nicht von irgendeiner Anweisung des
Prozessors verwendet wird. Die versuchte Ausführung dieses Befehlscodes führt zu einem
unzulässigen
Anweisungstrap. Der Trap Handler für unzulässige Anweisungen muss dann
den Befehlscode prüfen,
der den unzulässigen
Anweisungstrap bewirkt hat, feststellen, dass der Befehlscode der
Schutzbefehlscode ist, und die angemessenen Softwareroutinen ausführen, um
den Trap zu bearbeiten, was typischerweise das Korrigieren des Fehlerzustands
einschließt.
Alternativ dazu kann es einen definierten Schutztrap geben, der
getrennt von dem unzulässigen
Anweisungstrap besteht. Die versuchte Ausführung des Schutzbefehlscodes
bewirkt, dass ein Schutztrap anstatt eines allgemeinen unzulässigen Anweisungstraps
auftritt. Da der Prozessor bereits festgestellt haben wird, dass
der Befehlscode, dessen Ausführung
versucht wurde, der Schutzbefehlscode war, muss der Schutztrap dann
nur die entsprechenden Softwareroutinen ausführen, um den Fehlerzustand
zu behandeln.
-
In
der oben beschriebenen Ausführungsform ist
der interne Programmdatenspeicher als eine Vielzahl von Einträgen mit
24 Bits organisiert, von denen jeder einen 16 Bit Dateneintrag und
einen 8 Bit Schutzbefehlscode enthalten kann. Die vorliegende Erfindung
erstreckt sich auch auf eine Anzahl von zusätzlichen und alternativen Ausführungsformen.
Zum Beispiel kann ein externer Datenspeicher verwendet werden, in
dem Einträge
mit 24 Bits gespeichert sind. In dieser Ausführungsform kann ein Eintrag
mit 24 Bit einen Dateneintrag mit 16 Bit und einen Schutzbefehlscode
mit 8 Bit enthalten. Wenn der externe Speicher ein nichtflüchtiger
Datenspeicher ist, dann können
die Dateneinträge
und Schutzbefehlscodes, zusammen mit beliebigen Programmanweisungen, während des
Produktionsprozesses im externen Speicher abgelegt werden. Wenn
der externe Speicher ein flüchtiger
Datenspeicher ist, dann müssen die Dateneinträge und die
Schutzbefehlscodes vom Prozessor in den externen Datenspeicher abgespeichert
werden.
-
Dateneinträge können alternativ
dazu ohne Schutzbefehlscodes im externen Speicher als 16 Bit Dateneinträge abgelegt
werden, und folglich ist dies keine Ausführungsform der Erfindung. Der
externe Speicher kann an den Prozessor angeschlossen werden unter
Verwendung einer Speicherbusanordnung, der bekannt ist, dass die
Dateneinträge
16 Bits lang sind. Der an den externen Speicher angeschlossene Speicherbus
kann zum Beispiel eine Breite von 16 Bits aufweisen anstelle der
24 Bits, die für
Programmanweisungen erforderlich wären. Als ein anderes Beispiel
kann der Adressbereich des externen Speichers, der in den Datenspeicher
des Prozessors eingemappt ist, verwendet werden, um einen Teilbereich
des externen Speichers zu kennzeichnen, der Dateneinträge anstelle
von Programmeinträgen
abspeichert. In jedem der Beispiele kann der Prozessor einen versuchten
Zugriff auf Programmanweisungen durch den externen Speicher oder
den Teilbereich des externen Speichers feststellen, der Dateneinträge abspeichert.
Bei der Feststellung von einem solchen versuchten Zugriff kann der
Prozessor direkt einen Schutztrap ausführen. Alternativ dazu kann
der Prozessor einfach einen Schutzbefehlscode auf die obersten 8
Bits des Programmanweisungsbusses erzwingen, der ebenfalls bewirkt,
dass ein Schutztrap ausgeführt
wird.
-
Während bestimmte
Ausführungsformen
der vorliegenden Erfindung veranschaulicht und beschrieben worden
sind, wird es von jenen, die gewöhnliche
Kenntnisse in der Technik aufweisen, verstanden werden, dass Abänderungen
an diesen Ausführungsformen
ausgeführt
werden können,
ohne vom Geist und Schutzumfang der Erfindung abzuweichen. Zum Beispiel
ist die vorliegende Erfindung in Bezug auf Dateneinträge mit 16
Bit, Programmanweisungseinträge
mit 24 Bit und Befehlscodes mit 8 Bit beschrieben worden. Eine Person
mit Kenntnissen in der Technik erkennt jedoch, dass solche spezifischen
Werte nur Beispiele sind und dass andere Anordnungen und Anzahlen
von Bits verwendet werden können,
ohne vom Schutzumfang der Erfindung abzuweichen. Die vorliegende
Erfindung erstreckt sich auf jegliche und alle solchen alternativen
Anordnungen und Anzahlen von Bits.