DE102008029231B4 - Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses - Google Patents

Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses Download PDF

Info

Publication number
DE102008029231B4
DE102008029231B4 DE200810029231 DE102008029231A DE102008029231B4 DE 102008029231 B4 DE102008029231 B4 DE 102008029231B4 DE 200810029231 DE200810029231 DE 200810029231 DE 102008029231 A DE102008029231 A DE 102008029231A DE 102008029231 B4 DE102008029231 B4 DE 102008029231B4
Authority
DE
Germany
Prior art keywords
jump
processor
command
instruction
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE200810029231
Other languages
English (en)
Other versions
DE102008029231A1 (de
Inventor
Lars Gollub
Wolfgang A Halang
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to DE200810029231 priority Critical patent/DE102008029231B4/de
Publication of DE102008029231A1 publication Critical patent/DE102008029231A1/de
Application granted granted Critical
Publication of DE102008029231B4 publication Critical patent/DE102008029231B4/de
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Abstract

Prozessor, dessen Befehlssatz einen oder mehrere Sprungbefehle enthält,
dadurch gekennzeichnet,
a) dass der Befehlssatz des Prozessors einen oder mehrere Ansprungbefehle enthält,
b) dass jedem Sprungbefehl des Befehlssatzes einer der Ansprungbefehle als passend zugeordnet ist und
c) dass ein Sprung in Ausführung eines jeden der Sprungbefehle an eine Zieladresse, an der kein passender Ansprungbefehl steht, zu einem Fehlerzustand des Prozessors führt.

Description

  • Gebiet der Erfindung Die Erfindung betrifft das Gebiet der Prozessoren in digitalen Datenverarbeitungsanlagen und bezieht sich insbesondere auf einen Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses bei der Abarbeitung von Programmen.
  • Stand der Technik Prozessoren arbeiten Programme ab, indem sie Befehle aus einem Speicher lesen und ausführen. Sie verfügen dazu über ein besonderes Register, das Befehlszähler genannt wird. Im Befehlszähler wird festgehalten, an welcher Position sich der Prozessor in der Abarbeitung einer Befehlsfolge befindet. Abhängig von der Implementierung wird diese Position als Adresse des derzeitigen oder des nächsten auszuführenden Befehls ausgedrückt. Handelt es sich bei einem Befehl nicht um einen Sprungbefehl, wird während seiner Ausführung die Adresse im Befehlszähler so verändert, dass sie auf den jeweils nächsten Befehl in der Befehlsfolge zeigt. Auf diese Weise werden Befehle sequenziell verarbeitet.
  • Mit Hilfe von Sprungbefehlen kann auf den Inhalt des Befehlszählers direkt Einfluss genommen werden, um die Programmausführung an einer anderen Stelle im Adressraum fortzusetzen. Es gibt unbedingte Sprünge, die immer ausgeführt werden, und bedingte Sprünge, deren Ausführung von einer Bedingung abhängig ist. Für den Aufruf von Unterprogrammen existieren Sprungbefehle, die den aktuellen Inhalt des Befehlszählers als Rücksprungadresse speichern. Dadurch kann nach Beendigung eines Unterprogramms mit Hilfe eines Rücksprungbefehls mit der Programmausführung hinter dem Aufruf des Unterprogramms fortgefahren werden. Rücksprungadressen werden häufig auf einem Stapel gespeichert.
  • Die Methode zur Bildung der Adresse, an der die Programmausführung mit Hilfe eines Sprungbefehls fortgesetzt wird, ist abhängig von der Implementierung des Prozessors und des Sprungbefehls. In einer üblichen Variante wird die gesamte Adresse oder ein Teil der Adresse in einem Operanden des Sprungbefehls kodiert und ersetzt bei der Ausführung des Sprungbefehls ganz oder teilweise den Inhalt des Befehlszählers. In einer weiteren, häufig bei bedingten Sprungbefehlen angewendeten Variante wird in einem Operanden eine relative Adresse kodiert, die bei der Sprungausführung zum aktuellen Inhalt des Befehlszählers addiert wird. Im Allgemeinen unterstützen die Sprungbefehle in den Befehlssätzen zeitgenössischer Prozessoren auch andere Quellen für die Adressenangabe als die Operanden der Befehle. Adressen können auch aus Registern und Speicherzellen stammen und daher zur Laufzeit eines Programms berechnet oder aus Tabellen gelesen werden.
  • Rücksprungbefehle verwenden Adressen, die zuvor von Sprungbefehlen zum Aufruf von Unterprogrammen oder infolge von Unterbrechungen gespeichert wurden.
  • Die meisten Prozessoren bieten die Möglichkeit, beim Eintreten von Ereignissen die laufende Programmausführung zu unterbrechen und ereignisspezifische Behandlungsroutinen abzuarbeiten. Dazu wird der aktuelle Inhalt des Befehlszählers in besonderen Registern oder auf einem Stapel gespeichert und die Unterbrechungsvektor genannte Adresse der entsprechenden Behandlungsroutine in den Befehlszähler geladen. Nach Beendigung der Behandlungsroutine durch einen Rücksprungbefehl wird die unterbrochene Programmausführung fortgesetzt, indem der zuvor gespeicherte Inhalt des Befehlszählers wiederhergestellt wird. Der Umfang der Unterbrechungsfähigkeit eines Prozessors ist von der Implementierung seines Unterbrechungswerks abhängig. In der Regel kann zwischen einer ganzen Reihe verschiedener Ereignisse unterschieden und jedem Ereignis eine eigene Behandlungsroutine zugeordnet werden.
  • Viele Prozessoren sind mit einer Speicherverwaltungseinheit, einer Speicherschutzeinheit oder einer Kombination aus beidem ausgestattet. Mit Hilfe einer Speicherverwaltungseinheit können mehrere Programme auf einem einzigen Prozessor in eigenen virtuellen Adressräumen ausgeführt werden, indem die von den Programmen verwendeten virtuellen Adressen in physikalische Adressen übersetzt werden. Dies bietet neben der Möglichkeit, für die Programme eine transparente Hierarchie verschiedener Speicherarten zu verwenden, den Vorteil, dass die Programme voneinander isoliert werden können. Ein Programm ist nicht in der Lage, auf die Daten eines anderen Programms zuzugreifen, und es ist nicht möglich, durch einen Sprungbefehl in einem Programm zu einem anderen Programm gehörende Befehle zur Ausführung zu bringen. Innerhalb eines virtuellen Adressraums kann jedoch mit einem Sprungbefehl die Programmausführung an einer beliebigen Adresse fortgesetzt werden.
  • Mit einer Speicherschutzeinheit kann der physikalische oder virtuelle Adressraum, in dem ein Programm ausgeführt wird, in mehrere Abschnitte aufgeteilt werden. Die Abschnitte können mit unterschiedlichen Privilegien bezüglich des Zugriffs auf Daten und der Ausführung von Befehlen versehen werden. Beispielsweise kann ein Abschnitt definiert werden, in dem Daten nur gelesen werden dürfen, während in einem zweiten Abschnitt sowohl Lese- als auch Schreibzugriffe auf die Daten erlaubt sind und nur die Daten in einem dritten Abschnitt als Befehle interpretiert und ausgeführt können. Anzahl und Größe der Abschnitte sowie die vergebbaren Privilegien hängen von der Implementierung der Speicherschutzeinheit ab.
  • Prozessorbefehle werden in Form von Bitmustern codiert. Abhängig von der Implementierung eines Prozessors haben diese Bitmuster feste oder variable Längen. Sie enthalten den Operationscode und ggf. einen oder mehrere Operanden. Der Operationscode definiert eindeutig, um welchen Befehl des Befehlssatzes es sich handelt. Bei den meisten Prozessoren sind nicht allen möglichen Kombinationen der Bits des Operationscodes Befehle zugeordnet, so dass eine Anzahl illegaler Operationscodes existiert. Ältere Prozessoren führen Befehle mit illegalen Operationscodes entweder als Leerbefehle aus oder zeigen ein undokumentiertes Verhalten. Neuere Prozessoren bieten hingegen bei der Ausführung von Befehlen mit illegalen Operationscodes die Möglichkeit einer Fehlerbehandlung.
  • Es existieren verschiedene Verfahren zur Überwachung der ordnungsgemäßen Ausführung von Programmen, die darauf beruhen, dass die Programme in regelmäßigen Abständen einem Überwachungsschaltkreis ihre korrekte Funktion durch Meldungen anzeigen. Treffen diese Meldungen innerhalb festgelegter Zeitschranken ein, wird die korrekte Funktion des jeweiligen Programms angenommen. Bei Überschreitung der Zeitschranken erfolgt eine Fehlerbehandlung.
  • Aus US 2004/0088509 A1 ist eine Mikroprozessorschaltung bekannt, mit deren Hilfe der Zugriff auf Arbeits- und Programmdaten durch voneinander unabhängige Programme organisiert werden kann. Der Speicher wird dazu in Bereiche aufgeteilt, die zur Aufnahme der Programme dienen und denen Bitmuster zur Identifikation und für die Definition von Zugriffsrechten zugeordnet sind. Bei Speicherzugriffen werden die Bitmuster der beteiligten Speicherbereiche von der Schaltung ausgewertet, um die Zulässigkeit der jeweiligen Operation zu ermitteln. Auf diese Weise ist ein geschützter Datenaustausch zwischen den Programmen möglich, ohne dass Ressourcen zur Steuerung durch ein Betriebssystem eingesetzt werden müssten. Desweiteren wird in US 2004/0088509 A1 ein Mechanismus beschrieben, mit dessen Hilfe von einem Programm bereitgestellte Funktionen von einem anderen Programm aus nur an vorher festgelegten Einsprungadressen aufgerufen werden können. Dazu wird bei jedem Funktionsaufruf das zur Identifikation verwendete Bitmuster des Speicherbereichs, aus dem heraus der Aufruf erfolgt, mit dem des Speicherbereichs verglichen, in dem die Funktion steht. Sind die Bitmuster gleich, so ist der Sprung innerhalb eines einzigen Speicherbereichs erfolgt und die Programmausführung wird normal fortgesetzt. Besteht ein Unterschied, so muss der Sprung zwischen zwei Speicherbereichen stattgefunden haben. In diesem Fall wird die Zieladresse daraufhin untersucht, ob dort ein vorher vereinbartes und als Einsprungbefehl (entry instruction) bezeichnetes Bitmuster hinterlegt ist. Nur wenn dies der Fall ist, wird mit der Programmausführung fortgefahren; ansonsten wird eine Fehlerbehandlung angestoßen.
  • Problem Die geplante Abfolge der Befehle eines Programms kann mit einem Kontrollflussgraphen beschrieben werden, in dem alle im Kontrollfluss vorgesehenen Verzweigungen festgehalten sind. In einem fehlerfreien Programm bewegt sich der Kontrollfluss entlang eines Pfads des Kontrollflussgraphen. Durch während des Entwurfs eines Programms gemachte oder zu seiner Laufzeit auftretende Fehler kann sich der Kontrollfluss jedoch entlang eines neuen Pfads bewegen, der nicht vorgesehen und im Kontrollflussgraphen nicht enthalten ist. Dabei werden Befehle in einer unvorhergesehenen und falschen Reihenfolge ausgeführt. Ebenso können Daten, in denen keine Befehle codiert sind, als Befehle interpretiert und ausgeführt werden. Auf Prozessoren, deren Befehle variable Längen haben oder nicht an festen Adressgrenzen ausgerichtet sein müssen, können korrekte Befehlsfolgen falsch interpretiert werden. Dies ist der Fall, wenn mit der Ausführung an einer Adresse begonnen wird, an der nicht der erste Teil eines sich über mehrere Speicherzellen erstreckenden Befehls gespeichert ist. Durch diese Nichtbeachtung der Befehlsgrenzen können die Inhalte aufeinanderfolgender Speicherzellen zu falschen Befehlen zusammengefasst werden.
  • Das Auftreten der beschriebenen Fehlfunktionen ist möglich, weil mit Hilfe eines Sprungbefehls die Programmausführung an einer beliebigen Adresse fortgesetzt werden kann. Für den Prozessor ist es unmöglich zu erkennen, ob sich an einer angesprungenen Adresse tatsächlich ein beim Entwurf vorgesehenes Sprungziel befindet. Der Prozessor muss annehmen, dass es sich bei den ab der angesprungenen Adresse gespeicherten Daten um korrekte Befehle handelt, und führt diese aus. Bei einem Sprung an eine Adresse, an der sich kein vorgesehenes Sprungziel befindet, kann daher keine geeignete Fehlerbehandlung durchgeführt werden. Die gleiche Situation ergibt sich, wenn die Programmausführung durch normales Inkrementieren des Befehlszählers an eine Adresse gelangt, die zu erreichen nur durch einen Sprung vorgesehen ist. Auch diese Abweichung vom geplanten Kontrollfluss kann vom Prozessor nicht erkannt werden.
  • Nur in Ausnahmefällen bzw. unter besonderen Voraussetzungen kann das Vorliegen der beschriebenen Fehlfunktionen unmittelbar oder nach einiger Zeit fehlerhafter Programmausführung erkannt werden. Falls in einen Abschnitt des Adressraums gesprungen wird, in dem die Speicherschutzeinrichtung eines Prozessors keine Programmausführung zulässt, kann eine Fehlfunktion unmittelbar festgestellt werden. Das Gleiche gilt für normales Voranschreiten des Befehlszählers an eine Adresse, die innerhalb eines solchen Speicherabschnitts liegt. Enthält einer der fälschlicherweise ausgeführten Befehle einen illegalen Operationscode und unterstützt der betrachtete Prozessor die Erkennung von Befehlen mit illegalen Operationscodes, wird eine Fehlfunktion nach Erreichen des Befehls bemerkt. Beim Einsatz eines Überwachungsschaltkreises, dem ablaufende Programme innerhalb festgelegter Zeitschranken durch Meldungen ihre korrekte Funktion anzeigen müssen, wird eine Fehlfunktion nach Überschreiten dieser Zeitschranken bemerkt, falls die Meldungen wegen der Fehlfunktion nicht mehr zeitgerecht erzeugt werden.
  • Für die vielfältigen Ursachen solcher Fehlfunktionen seien im Folgenden einige Beispiele gegeben. Bei einem Sprung an eine als Operand in einem Sprungbefehl codierte Adresse kann es zur Ausführung von Befehlen an einer unvorhergesehenen Stelle im Adressraum kommen, wenn die Adresse vom Programmierer oder durch ein Programmierwerkzeug falsch berechnet wurde. Es kann jedoch auch ein gerätetechnischer Fehler vorliegen, wie beispielsweise ein Defekt eines Festwertspeichers. Ein transienter Fehler beim Lesen der Operanden des Befehls aus dem Speicher ist ebenfalls möglich. Besteht ein Programm aus mehreren Teilen, die getrennt verändert wurden, könnte es zur Verschiebung des Sprungziels gekommen sein, ohne dass der Sprungbefehl aktualisiert wurde. Bei einem Sprungbefehl mit relativer Adressangabe führt auch die Verschiebung des Sprungbefehls ohne Anpassung der relativen Adressenangabe zu Sprüngen an falsche Stellen im Adressraum. Werden einzelne Teile eines Programms unabhängig voneinander geladen, könnte auch ein Sprung an eine korrekte Adresse zu einem Fehler führen, wenn der anzuspringende Programmteil nicht geladen ist.
  • Häufig ist es erforderlich, in Abhängigkeit des Inhalts von Registern oder Speicherzellen verschiedene Programmabschnitte anzuspringen. Ein solcher Verteiler kann durch Berechnung der Sprungadresse und anschließendes Springen realisiert werden. Diese Methode eignet sich besonders für Programmabschnitte mit gleicher Länge. Bei einem allgemeineren Ansatz für einen Verteiler wird die Sprungadresse aus einer Tabelle gelesen, in der die Adressen der Programmabschnitte hinterlegt sind. In beiden Fällen kann es zur Fortsetzung der Programmausführung an einer unvorhergesehenen Adresse kommen, wenn die zur Auswahl des Programmabschnitts herangezogenen Register oder Speicherzellen einen Wert annehmen, für den kein Programmabschnitt existiert. Weitere Fehlerquellen bei der Realisierung von Verteilern können fehlerhafte Rechenvorschriften oder fehlerhafte oder unvollständige Tabellen sein. Diese Fehler können wiederum auf Programmierer, Programmierwerkzeuge oder gerätetechnische und transiente Ausfälle zurückzuführen sein.
  • Mit einem Verteiler soll in der Regel nur einer unter verschiedenen auswählbaren Programmabschnitten zur Ausführung gebracht werden. Am Ende jedes Programmabschnitts, ggf. mit einer Ausnahme, müssen daher Sprungbefehle stehen, mit denen die möglichen Verzweigungen des Kontrollflusses wieder zusammengeführt werden. Fehlen diese Sprungbefehle, werden fälschlicherweise Befehle ausgeführt, die nach dem angesprungenen Programmabschnitt angeordnet sind und beispielsweise zu einem anderen auswählbaren Programmabschnitt gehören. Eine ähnliche Situation entsteht, wenn am Ende eines Unterprogramms oder einer Unterbrechungsbehandlungsroutine der Rücksprungbefehl fehlt. Die Programmausführung wird hinter dem Unterprogramm oder der Behandlungsroutine fortgesetzt und es werden Befehle ausgeführt, die in einem fehlerfreien Programm nur durch einen Sprung erreicht werden können. Fehlende Befehle können vom Programmierer vergessen oder durch ein fehlerhaftes Programmierwerkzeug nicht eingefügt worden sein. Durch gerätetechnische oder transiente Fehler kann das Bitmuster des Operationscodes eines Befehls derart verändert werden, dass statt des Rücksprungbefehls ein anderer Befehl erkannt wird. Rücksprungbefehle setzen die Programmausführung an Adressen fort, die zuvor durch Sprungbefehle für den Aufruf von Unterprogrammen oder infolge von Unterbrechungen gespeichert wurden.
  • Ist eine gespeicherte Rücksprungadresse nicht korrekt, dann kommt es bei der Ausführung eines Rücksprungbefehls zu einem Sprung an eine unvorhergesehene Stelle im Adressraum. Eine inkorrekte Rücksprungadresse kann durch verschiedene Fehler verursacht werden. Wird ein Unterprogramm nicht durch einen Sprungbefehl erreicht, der eine Rücksprungadresse speichert, sondern durch einen gewöhnlichen Sprungbefehl oder durch normales Voranschreiten des Befehlszählers, so wird keine Rücksprungadresse an dem dafür vorgesehen Speicherort abgelegt. Die Ausführung eines Rücksprungbefehls führt dennoch dazu, dass dieser Speicherort gelesen und die dort gespeicherte Adresse angesprungen wird. Es ist ebenfalls möglich, dass eine Rücksprungadresse zwar korrekt gespeichert wurde, nachfolgende Operationen sie jedoch unbeabsichtigt überschrieben haben, bevor sie durch einen Rücksprungbefehl gelesen wird. Darüber hinaus werden in vielen Prozessoren Rücksprungadressen auf einem Stapel gespeichert, der auch zur Zwischenspeicherung anderer Daten verwendet wird. Es kann zu Fehlern kommen, wenn zwischen Speichern und Lesen von Rücksprungadressen ein Stapel derart unsymmetrisch benutzt wird, dass die Menge der auf ihm abgelegten Daten nicht mit der Menge der von ihm heruntergenommen Daten übereinstimmt. In einem solchen Fall greift ein Rücksprungbefehl zum Lesen der Rücksprungadresse auf einen falschen Speicherort zu.
  • Damit beim Eintreten eines Ereignisses die laufende Programmausführung unterbrochen und eine Behandlungsroutine abgearbeitet werden kann, muss bei vielen Prozessoren die Adresse der Behandlungsroutine an einer bestimmten Stelle im Adressraum hinterlegt sein. Anschließend wird die Unterbrechungsbehandlung für das betreffende Ereignis aktiviert. Wenn versäumt wurde, die Adresse der Behandlungsroutine zu hinterlegen, oder die angegebene Adresse falsch ist, so wird beim Eintreten des Ereignisses an eine unvorhergesehene Adresse gesprungen. Bei einer anderen Variante der Unterbrechungsbearbeitung springt der Prozessor beim Eintreten eines Ereignisses, für das eine Unterbrechungsbehandlung aktiviert ist, immer an eine feste, dem Ereignis zugeordnete Adresse. An dieser Adresse muss entweder die Behandlungsroutine selbst beginnen oder ein Sprungbefehl stehen, der zur Behandlungsroutine verzweigt. Wenn dies nicht der Fall ist, werden falsche Befehle ausgeführt.
  • Lösung Die geschilderten Probleme werden erfindungsgemäß durch einen Prozessor nach Anspruch 1 gelöst. Der Befehlssatz des Prozessors enthält einen oder mehrere Ansprungbefehle. Diese Ansprungbefehle bilden die Gegenstücke zu den Sprungbefehlen des Prozessors, die genau genommen als Absprungbefehle betrachtet werden können. Im Befehlssatz des Prozessors ist jeder Ansprungbefehl einem oder mehreren Sprungbefehlen als passend zugeordnet. In fehlerfreien Programmen sind als Ziele von Sprungbefehlen nur Adressen erlaubt, an denen pas sende Ansprungbefehle stehen. Ein Sprung an eine Adresse, an der kein passender Ansprungbefehl steht, führt zu einem Fehlerzustand des Prozessors. Verfügt der Prozessor über ein Unterbrechungswerk, können Unterbrechungen hinsichtlich der Ansprungbefehle wie Sprungbefehle behandelt werden. In fehlerfreien Programmen müssen Behandlungsroutinen für Unterbrechungen mit passenden Ansprungbefehlen beginnen. Ein Aufruf einer Unterbrechungsbehandlungsroutine, an deren Beginn kein passender Ansprungbefehl steht, führt zu einem Fehlerzustand des Prozessors. Abhängig von der Art eines spezifischen Ansprungbefehls kann dieser wie ein Leerbefehl ausgeführt werden oder zu einem Fehlerzustand führen, wenn die Adresse des Ansprungbefehls nicht durch einen Sprung, sondern durch normales Voranschreiten des Befehlszählers erreicht wird. Die durch An- oder Abwesenheit von Ansprungbefehlen verursachten Fehlerzustände des Prozessors können Unterbrechungen auslösen oder den Prozessor zurücksetzen oder anhalten.
  • Ausführungsbeispiele In der einfachsten Form enthält der Befehlssatz des Prozessors nur einen einzigen Ansprungbefehl. Dieser ist allen Sprungbefehlen des Befehlssatzes als passend zugeordnet und wird als Leerbefehl ausgeführt, wenn er nicht durch einen Sprung, sondern durch normales Voranschreiten des Befehlszählers erreicht wird. Ein Sprung an eine Adresse, an der dieser Ansprungbefehl nicht steht, hält den Prozessor an.
  • In einer sehr umfassenden Realisierung wird jedem einzelnen Sprungbefehl im Befehlssatz des Prozessors jeweils ein Paar Ansprungbefehle gegenübergestellt und als passend zugeordnet. Von den beiden Ansprungbefehlen eines Paars wird jeweils einer als Leerbefehl ausgeführt, wenn er nicht durch einen Sprung, sondern durch normales Voranschreiten des Befehlszählers erreicht wird. Der andere Ansprungbefehl des Paares führt in der gleichen Situation zu einem Fehlerzustand des Prozessors. Es kann zwischen vielen verschiedenen durch An- oder Abwesenheit von Ansprungbefehlen verursachten Fehlerzuständen unterschieden werden. Jedem Sprungbefehl ist ein Fehlerzustand zugeordnet, den der Prozessor annimmt, wenn an der angesprungenen Adresse kein passender Ansprungbefehl steht. Den Ansprungbefehlen, die in fehlerfreien Programmen nicht durch Sprünge, sondern durch normales Voranschreiten des Befehlszählers erreicht werden dürfen, werden ebenfalls unterschiedliche Fehlerzustände zugeordnet. Die Fehlerzustände lösen Unterbrechungen aus, wobei jeder Fehlerzustand die Ausführung einer spezifischen Behandlungsroutine bewirken kann.
  • Ein Kompromiss zwischen Sicherheit und Komplexität des Prozessors lässt sich durch Einteilung der Sprungbefehle in Klassen erreichen. In einer möglichen Implementierung werden alle gewöhnlichen bedingten und unbedingten Sprungbefehle zu einer Klasse zusammengefasst und alle Sprungbefehle zum Aufruf von Unterprogrammen zu einer zweiten Klasse. Den Sprungbefehlen der ersten Klasse werden zwei Ansprungbefehle als passend zugeordnet. Der erste Ansprungbefehl wird als Leerbefehl ausgeführt, wenn er nicht durch einen Sprung, sondern durch normales Voranschreiten des Befehlszählers erreicht wird. Der zweite Ansprungbefehl führt in der gleichen Situation zu einem Fehlerzustand. Ein dritter Ansprungbefehl wird der zweiten Sprungbefehlsklasse als passend zugeordnet. Seine Ausführung führt ebenfalls zu einem Fehlerzustand, wenn er nicht durch einen Sprung erreicht wird. Auch die Ursachen der Fehlerzustände des Prozessors lassen sich gruppieren. In diesem Ausführungsbeispiel sind zwei Fehlerzustände denkbar. Der erste wird angenommen, wenn ein Sprungbefehl die Programmausführung an einer Adresse fortsetzt, an der kein passender Ansprungbefehl steht. Der zweite Fehlerzustand wird angenommen, wenn einer der beiden Ansprungbefehle, die nur angesprungen werden dürfen, durch normales Voranschreiten des Befehlszählers erreicht wird. Die Fehlerzustände können wiederum durch Unterbrechungen behandelt werden.
  • Ob ein auszuführender Befehl durch normales Voranschreiten des Befehlszählers erreicht wurde oder durch einen Sprungbefehl bzw. eine Unterbrechung, lässt sich mit unterschiedlichen Verfahren erkennen. Bei der Ausführung eines Befehls können Informationen gespeichert werden, die bei der Ausführung des nachfolgenden Befehls ausgewertet werden. In diesen Informationen kann enthalten sein, ob ein Sprungbefehl ausgeführt wurde und ggf. um welchen Sprungbefehl es sich handelte. Ebenso kann festgehalten werden, ob eine Unterbrechung stattfand. Eine weitere Methode, die bei Prozessoren mit fester Befehlslänge angewendet werden kann, ist die Überwachung des Befehlszählers. Damit können auch Sprünge erkannt werden, die nicht durch Sprungbefehle oder Unterbrechungen verursacht wurden, sondern durch unvorhergesehene Veränderungen des Inhalts des Befehlszählers, beispielsweise durch transiente Fehler.
  • Durch die Erfindung erreichte Vorteile Mit der vorliegenden Erfindung können Abweichungen vom vorgesehenen Kontrollfluss eines Programms, die durch fehlerhafte oder fehlende Sprungbefehle, fehlerhafte Unterbrechungsvektoren, fehlende Behandlungsroutinen für Unterbrechungen und weitere nicht vorgesehene Beeinflussungen des Befehlszählers verursacht wurden, bereits bei der Ausführung des ersten falschen Befehls erkannt und behandelt werden. Im Gegensatz dazu ist es nur in Ausnahmefällen bzw. unter besonderen Voraussetzungen und häufig erst nach einiger Zeit fehlerhafter Programmausführung möglich, die genannten Fehlfunktionen mit dem Stand der Technik entsprechender Mittel zu erkennen.

Claims (9)

  1. Prozessor, dessen Befehlssatz einen oder mehrere Sprungbefehle enthält, dadurch gekennzeichnet, a) dass der Befehlssatz des Prozessors einen oder mehrere Ansprungbefehle enthält, b) dass jedem Sprungbefehl des Befehlssatzes einer der Ansprungbefehle als passend zugeordnet ist und c) dass ein Sprung in Ausführung eines jeden der Sprungbefehle an eine Zieladresse, an der kein passender Ansprungbefehl steht, zu einem Fehlerzustand des Prozessors führt.
  2. Prozessor nach Anspruch 1 mit einem Unterbrechungswerk, dadurch gekennzeichnet, dass Unterbrechungen hinsichtlich der Ansprungbefehle wie das Auftreten von Sprungbefehlen behandelt werden, indem Behandlungsroutinen für Unterbrechungen in fehlerfreien Programmen mit einem passenden Ansprungbefehl beginnen müssen und der Aufruf einer Unterbrechungsbehandlungsroutine, an deren Beginn kein passender Ansprungbefehl steht, zu einem Fehlerzustand des Prozessors führt.
  3. Prozessor nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass ein oder mehrere Ansprungbefehle im Befehlssatz des Prozessors wie Leerbefehle ausgeführt werden, wenn sie im Programm nicht durch einen Sprung, sondern durch normales Voranschreiten des Befehlszählers erreicht werden.
  4. Prozessor nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass die Abarbeitung eines oder mehrerer Ansprungbefehle im Befehlssatz des Prozessors zu einem Fehlerzustand führt, wenn sie im Programm nicht durch einen Sprung, sondern durch normales Voranschreiten des Befehlszählers erreicht werden.
  5. Prozessor nach einem der Ansprüche 1 bis 4, dadurch gekennzeichnet, dass durch Speicherung und Auswertung von Informationen über den letzten ausgeführten Befehl und den Unterbrechungszustand des Prozessors erkannt wird, ob ein auszuführender Befehl durch normales Voranschreiten des Befehlszählers erreicht wurde oder durch einen Sprungbefehl bzw. eine Unterbrechung und ggf. um welchen Sprungbefehl es sich gehandelt hat.
  6. Prozessor nach einem der Ansprüche 1 bis 4, dadurch gekennzeichnet, dass durch Überwachung des Programmzählers erkannt wird, ob ein auszuführender Befehl durch normales Voranschreiten des Befehlszählers erreicht wurde oder durch einen Sprungbefehl bzw. eine Unterbrechung.
  7. Prozessor nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, dass durch An- oder Abwesenheit von Ansprungbefehlen verursachte Fehlerzustände Unterbrechungen auslösen.
  8. Prozessor nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, dass durch An- oder Abwesenheit von Ansprungbefehlen verursachte Fehlerzustände den Prozessor zurücksetzen.
  9. Prozessor nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, dass durch An- oder Abwesenheit von Ansprungbefehlen verursachte Fehlerzustände den Prozessor anhalten.
DE200810029231 2008-06-19 2008-06-19 Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses Expired - Fee Related DE102008029231B4 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE200810029231 DE102008029231B4 (de) 2008-06-19 2008-06-19 Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE200810029231 DE102008029231B4 (de) 2008-06-19 2008-06-19 Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses

Publications (2)

Publication Number Publication Date
DE102008029231A1 DE102008029231A1 (de) 2009-12-31
DE102008029231B4 true DE102008029231B4 (de) 2010-12-02

Family

ID=41360441

Family Applications (1)

Application Number Title Priority Date Filing Date
DE200810029231 Expired - Fee Related DE102008029231B4 (de) 2008-06-19 2008-06-19 Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses

Country Status (1)

Country Link
DE (1) DE102008029231B4 (de)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040088509A1 (en) * 2001-02-06 2004-05-06 Franz-Josef Brucklmayr Microprocessor circuit for data carriers and method for organizing access to data stored in a memory

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040088509A1 (en) * 2001-02-06 2004-05-06 Franz-Josef Brucklmayr Microprocessor circuit for data carriers and method for organizing access to data stored in a memory

Also Published As

Publication number Publication date
DE102008029231A1 (de) 2009-12-31

Similar Documents

Publication Publication Date Title
DE102009024605B4 (de) Vorrichtung und Verfahren zum Umgehen eines ersten Programmcodeabschnitts mit einem Ersatzprogrammcodeabschnitt
DE1901228B2 (de) Datenverarbeitungsanlage mit einrichtungen zur wiederholung von operationen beim auftreten eines fehlers
EP2188755A1 (de) Verfahren und vorrichtung zur sicherung eines programms gegen eine kontrollflussmanipulation und gegen einen fehlerhaften programmablauf
EP2614438A1 (de) Verfahren zum bereitstellen eines wertes zum ermitteln, ob bei einer ausführung eines programms ein fehler aufgetreten ist
EP1810139B1 (de) Verfahren, betriebssystem und rechengerät zum abarbeiten eines computerprogramms
DE2054830B2 (de) Informationsverarbeitungsanlage mit mitteln zum zugriff zu speicher-datenfeldern variabler laenge
EP1805617A1 (de) Verfahren zur abarbeitung eines computerprogramms auf einem computersystem
DE102014117971A1 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE102008029231B4 (de) Prozessor mit Ansprungbefehlen zur Überwachung des Kontrollflusses
DE102004046611A1 (de) Verfahren zur Abarbeitung eines Computerprogramms auf einem Computersystem
DE102004037713A1 (de) Verfahren, Betriebssystem und Rechengerät zum Abarbeiten eines Computerprogramms
WO2006089943A1 (de) Verfahren zur datensicherung und gerät zu dessen ausführung
WO2006045733A2 (de) Verfahren, betriebssystem und rechengerät zum abarbeiten eines computerprogramms
DE102005060714B4 (de) Datenverarbeitungsvorrichtung, Speicherkarte, Verfahren zum Betreiben einer Datenverarbeitungsvorrichtung und Herstellungsverfahren für eine Datenverarbeitungsvorrichtung
DE102009005449B4 (de) Prozessor, der zur Überwachung des Kontrollflusses Befehlen zugeordnete Eigen- und Folgekennungen auswertet
DE102016116221A1 (de) Verfahren und Einrichtung zur Überwachung der Ausführung eines Programmcodes
DE10349200A1 (de) System und Verfahren zur Überwachung und Verwaltung prozessinterner Speicher einer Prozessausführungseinheit
EP1577734A2 (de) Verfahren zum sicheren Betrieb eines tragbaren Datenträgers
EP1892639A2 (de) Sichere Programmcodeausführung
DE10229817B4 (de) Verfahren und Vorrichtung zum Ablegen eines Computerprogramms in einen Programmspeicher eines Steuergeräts
EP1516245B1 (de) Vorrichtung und verfahren zum verarbeiten einer sequenz von sprungbefehlen
DE10252347A1 (de) Überwachte Unterprogrammausführung
DE10110050A1 (de) Verfahren zur Absicherung sicherheitskritischer Programmteile vor versehentlicher Ausführung und eine Speichereinrichtung zur Durchführung dieses Verfahrens
EP1055984B1 (de) Verfahren für eine Fehleranalyse in prozessorgesteuerten Einrichtungen
DE102004019371B4 (de) Verfahren zur Wiederherstellung eines Betriebszustands eines Systems

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8120 Willingness to grant licences paragraph 23
8364 No opposition during term of opposition
R020 Patent grant now final

Effective date: 20110302

R085 Willingness to licence withdrawn
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee