DE102022125477A1 - Ausführung-vor-ort-architektur mit integritätsüberprüfung - Google Patents

Ausführung-vor-ort-architektur mit integritätsüberprüfung Download PDF

Info

Publication number
DE102022125477A1
DE102022125477A1 DE102022125477.1A DE102022125477A DE102022125477A1 DE 102022125477 A1 DE102022125477 A1 DE 102022125477A1 DE 102022125477 A DE102022125477 A DE 102022125477A DE 102022125477 A1 DE102022125477 A1 DE 102022125477A1
Authority
DE
Germany
Prior art keywords
data
partition
error detection
code
detection code
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.)
Pending
Application number
DE102022125477.1A
Other languages
English (en)
Inventor
Sunanda Manjunath
Jens Rosenbusch
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.)
Infineon Technologies AG
Original Assignee
Infineon Technologies AG
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 Infineon Technologies AG filed Critical Infineon Technologies AG
Publication of DE102022125477A1 publication Critical patent/DE102022125477A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1666Error detection or correction of the data by redundancy in hardware where the redundant component is memory or memory area
    • G06F11/167Error detection by comparing the memory output

Abstract

Systeme (100), Verfahren (300) und Schaltungen zum Überprüfen einer Integrität eines von einem externen Speicher (120) empfangenen Codes werden bereitgestellt. In einem Beispiel weist ein System (100) einen nichtflüchtigen Speicher (120) und einen Controller (110) auf. Der nichtflüchtige Speicher (120) weist eine erste Partition (122), die eingerichtet ist, einem Programmcode zugehörige erste Daten zu speichern und eine zweite Partition (124), die eingerichtet ist, einer Kopie der ersten Daten zugehörige zweite Daten zu speichern, auf. Der Controller (110) weist einen Prozessor (CPU 0, CPU 1) und Komparator-Schaltung (150) auf. Die Komparator-Schaltung (150) ist eingerichtet, einen Teil der ersten Daten und einen zugehörigen Teil der zweiten Daten zu empfangen, den Teil der ersten Daten mit dem Teil der zweiten Daten zu vergleichen, den Teil der ersten Daten dem Prozessor (CPU 0, CPU 1) bereitzustellen, wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, und ein Alarmsignal zu erzeugen wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt.

Description

  • Die vorliegende Offenbarung betrifft das Gebiet von Mikrocontroller-Einheiten (MCUs) und zentralen Verarbeitungseinheiten (CPUs), die in einem externen Speicher gespeicherte Instruktionen ausführen.
  • Moderne integrierte Schaltungen werden unter Verwendung von weit-unter-Mikrometer-Technologie gefertigt. Dies erhöht die Kosten für eingebettete nichtflüchtige Speicher erheblich.
  • Einige Beispiele von Schaltungen, Vorrichtungen und/oder Verfahren werden im Folgenden nur beispielhaft beschrieben. In diesem Zusammenhang wird auf die beigefügten Figuren Bezug genommen.
    • 1 ist ein Blockdiagramm einer beispielhaften Architektur, die einen Controller mit einer Integritäts-Überprüfungs-Schaltung, welche die Integrität von aus einem externen Speicher gelesenen Instruktionen gemäß verschiedenen beschriebenen Aspekten verifiziert, aufweist.
    • 2 ist ein Blockdiagramm einer beispielhaften Komparator-Schaltung gemäß verschiedenen offenbarten Aspekten.
    • 3 ist ein Flussdiagramm, das ein beispielhaftes Verfahren des Verifizierens der Integrität von aus einem externen Speicher gelesenen Instruktionen gemäß verschiedenen beschriebenen Aspekten erläutert.
    • 4 ist ein Flussdiagramm, das ein anderes beispielhaftes Verfahren des Verifizierens der Integrität von aus einem externen Speicher gelesenen Instruktionen gemäß verschiedenen beschriebenen Aspekten erläutert.
    • 5 ist ein Flussdiagramm, das ein beispielhaftes Verfahren des Aktualisierens von in einem Speicher gespeicherten Instruktionen gemäß verschiedenen beschriebenen Aspekten erläutert.
  • Controller, die in sicherheitsbezogenen Anwendungen verwendet werden, verwenden Informations-Redundanz-Maßnahmen zum Schutz vor fehlerhaftem Betrieb. Um zum Beispiel als Automobil-Sicherheits-und-Integritäts-Level D (ASIL-D) klassifiziert zu werden, sollte ein Controller-System-auf-einem-Chip (SoC) eine Art von Verifizierungsmaßnahme für ausgeführten Programmcode aufweisen. Eine Möglichkeit einen von einem (bezüglich des SoC) externen Speicher empfangenen Programmcode zu verifizieren besteht darin, den Programmcode zuerst in einen (bezüglich des SoC) internen statischen Direktzugriffsspeicher (SRAM) zu kopieren. Vor dem Ausführen des Programmcodes kann der Controller basierend auf dem kopierten Programmcode einen Fehlererkennungscode (EDC) berechnen und den berechneten EDC mit einem gespeicherten EDC, der mit dem Programmcode empfangen wurde, abgleichen. Ein Beispiel eines EDC ist ein zyklischer Redundanzprüfungs-(CRC)-Code.
  • Aufgrund der zum Berechnen des EDC erforderlichen Verarbeitung und des zur Speicherung des EDC verwendeten Speichers wird der EDC üblicherweise basierend auf dem gesamten Programmcode oder relativ großen Teilen des Programmcodes berechnet. Um die Verifizierung des Programmcodes zu ermöglichen, sollte der Teil des Programmcodes, der in den internen SRAM eines ASIL-D zertifizierten SoC kopiert wird, einen vorberechneten EDC haben, welcher den gesamten Teil abdeckt. Das bedeutet, dass der gesamte Programmcode oder ein großer Teil des Programmcodes in den internen SRAM kopiert wird, um eine Verifizierung zu ermöglichen. Da die Kosten eines SRAM hoch sind, kann es kostenintensiv sein, ausreichend internen SRAM bereitzustellen, um solch große Mengen von Programmcode zu speichern. Eine Lösung wäre, die EDCs für kleinere Teile des Programmcodes zu berechnen. Allerdings erfordert dies zusätzliche Verarbeitung zum Berechnen vieler EDCs und Speicher zum Speichern der vielen EDCs. Ferner führt dieser Ansatz zu einer zusätzlichen Laufzeitlatenz, da die vielen EDCs berechnet und überprüft werden müssen.
  • Die folgende Beschreibung erläutert Systeme, Verfahren und Schaltungen, die eine Verifizierung von extern gespeichertem Programmcode ermöglichen, wenn der Programmcode mittels einer SoC-Schnittstelle empfangen wird. Die Verifizierung des Programmcodes kann wortweise oder auf einer anderen feingranularen Basis durchgeführt werden.
  • 1 veranschaulicht ein Beispiel eines Controller-Systems 100, welches ein Controller-SoC 110, einen externen Speicher 120 und einen Speichercontroller 125 aufweist. Das Controller-SoC 110 weist einen oder mehrere Prozessoren (CPU 0, CPU 1) und eine serielle Peripherie-Schnittstelle (SPI) 130 auf. Die SPI 130 ist eingerichtet, Daten an den externen Speicher 120 zu übermitteln und von diesem zu empfangen. In einem Beispiel empfängt/übermittelt die SPI 130 Daten wortweise. Obgleich in dem beschriebenen System eine SPI als eine Schnittstelle verwendet wird, kann jede Art von Schnittstelle verwendet werden, welche verwendet werden kann, um kleine Teile von Daten aus dem externen Speicher 120 zu lesen und in diesen zu schreiben.
  • Das Controller-SoC 110 weist auch eine Integritäts-Überprüfungs-Schaltung 140 auf, die Programmcode-Daten verifiziert, sobald diese mittels der SPI 130 empfangen werden. Ein Betrieb der Integritäts-Überprüfungs-Schaltung 140 wird nachstehend ausführlicher beschrieben.
  • Der externe Speicher 120 ist eingerichtet, eine erste Partition 122 aufzuweisen, die einem Programmcode zugehörige erste Daten speichert. Der externe Speicher 120 ist eingerichtet, eine zweite Partition 124 aufzuweisen, die einer Kopie des Programmcodes zugehörige zweite Daten speichert. Für den Zweck dieser Beschreibung ist der Begriff „Partition“ so zu versstehen, dass dieser jeden vordefinierten oder zugewiesenen Teil eines Speichermediums, der dem Speichern eines bestimmten Datensatzes zugeordnet ist (z.B. ersten Daten, zweiten Daten, einem EDC, und so weiter), aufweist. Als Beispiel kann eine Partition ein physischer Sektor in einen nichtflüchtigen Speicher sein.
  • Der Begriff „Kopie“ ist breit zu verstehen in der Bedeutung von Daten, die von den ersten Daten abgeleitet sind und die verwendet werden können, um die ersten Daten zu verifizieren und wiederherzustellen. So können die zweiten Daten ein exaktes Duplikat der ersten Daten sein. In anderen Beispielen entsprechen die zweiten Daten einer invertierten Kopie der ersten Daten. In anderen Beispielen entsprechen die zweiten Daten anderen Versionen der ersten Daten, die verwendet werden können, um die ersten Daten zu verifizieren und wiederherzustellen.
  • Eine dritten Partition 126 des externen Speichers speichert einen für den in der ersten Partition 122 gespeicherten Programmcode berechneten EDC (z.B. CRC). Die dritte Partition 126 kann auch einen Repariercode speichert, der, wenn dieser mittels des Controller-SoC 110 ausgeführt wird, diesen veranlasst, dass die Integrität des in der ersten Partition 122 gespeicherten Programmcodes unter Verwendung des in der dritten Partition 126 gespeicherten EDC verifiziert wird. Eine vierte Partition 128 des externen Speichers speichert einen für die Kopie des in der ersten Partition 124 gespeicherten Programmcodes berechneten EDC (z.B. CRC). Die vierte Partition 128 kann auch einen Repariercode speichern, der, wenn dieser mittels des Controller-SoC ausgeführt wird, diesen veranlasst, dass die Integrität der in der zweiten Partition 124 gespeicherten Kopie des Programmcodes unter Verwendung des in der vierten Partition 128 gespeicherten EDC verifiziert wird. In manchen Beispielen sind die erste Partition, die zweite Partition, die dritte Partition und die vierte Partition nicht überlappend, um vor regional begrenzten Speicherfehlern zu schützen.
  • Die Integritäts-Überprüfungs-Schaltung 140 weist eine Komparator-Schaltung 150 und eine Reparierschaltung 160 auf. Die Komparator-Schaltung 150 kann ein Lockstep-Komparator sein. Die Komparator-Schaltung ist eingerichtet, mittels der SPI 130 einen Teil (z.B. ein Wort) der in der ersten Partition 122 gespeicherten ersten Daten zu empfangen. Die Komparator-Schaltung 150 ist eingerichtet, mittels der SPI 130 auch einen Teil (z.B. ein Wort) der in der ersten Partition 124 gespeicherten zweiten Daten zu empfangen. Der empfangene Teil der zweiten Daten ist dem empfangenen Teil der ersten Daten zugehörig. In einem Beispiel bedeutet der empfangene Teil der dem Teil der ersten Daten zugehörigen zweiten Daten, dass sich der empfangene Teil der zweiten Daten innerhalb der zweiten Partition an der gleichen relativen Position befindet, an der sich der Teil der ersten Daten in der ersten Partition befindet. Anders ausgedrückt ist der Teil der zweiten Daten, der dem Teil der ersten Daten zugehörig ist, sofern unbeschädigt, eine Kopie des Teils der ersten Daten, sofern der Teil der ersten Daten unbeschädigt ist.
  • Die Komparator-Schaltung 150 vergleicht den Teil der ersten Daten und den Teil der zweiten Daten und stellt, sofern die Teile übereinstimmen, die ersten Daten (oder die zweiten Daten) den Prozessoren CPU 0, CPU 1 zur Ausführung bereit. Für den Zweck dieser Beschreibung ist der Begriff „übereinstimmen“ breit zu verstehen in der Bedeutung des Ermittelns, dass der empfangene Teil der zweiten Daten mit dem empfangenen Teil der ersten Daten angeglichen oder anderweitig äquivalent ist. In einem Beispiel stimmen die empfangenen Teile überein, wenn jedes entsprechende Bit in den Teilen übereinstimmt. In einem anderen Beispiel stimmen die empfangenen Teile überein, wenn jedes Paar entsprechender Bits der Teile entgegengesetzt ist (z.B., wenn die zweiten Daten eine invertierte Kopie der ersten Daten sind).
  • 2 veranschaulicht eine beispielhafte Komparator-Schaltung 250, die unter Verwendung eines Lockstep-Vergleichsverfahrens implementiert ist. Die Komparator-Schaltung 250 weist eine Vergleichslogik 270 auf, die zwei gesperrte CPU-Ausgänge, den Ausgang der Leseoperation auf Partition 122 und der Leseoperation auf Partition 124, vergleicht. In einem Beispiel kann die Vergleichslogik 270 eine XOR-Operation implementieren (z.B., wenn die Partition 124 ein Duplikat der Daten in Partition 122 speichert). In einem anderen Beispiel kann die Vergleichslogik 270 eine XNOR-Operation implementieren (z.B., wenn die Partition 124 eine invertierte Kopie der Daten in Partition 122 speichert). Die Vergleichslogik 270 gibt das Alarmsignal aus, wenn die Ausgänge der zwei gesperrten Leseoperationen nicht übereinstimmen. Die Vergleichslogik 270 kann auch eine Reparierschaltung 160 triggern, wenn die Ausgänge der zwei gesperrten Leseoperationen nicht übereinstimmen.
  • Zurück zu 1, die Komparator-Schaltung 150 erzeugt, wenn der Teil der ersten Daten und der Teil der zweiten Daten nicht übereinstimmt, das Alarmsignal, welches angibt, dass es einen Fehler bei der Übertragung des Programmcodes aus dem externen Speicher 120 zu den Prozessoren gibt. Auf diese Weise überprüft die Komparator-Schaltung 150 die Integrität des empfangenen Programmcodes in Echtzeit basierend auf dem Vergleich des empfangenen Teils der ersten Daten und des empfangenen Teils der zweiten Daten. Es entsteht keine Laufzeitlatenz, wenn der empfangene Teil der ersten Daten und der empfangene Teil der zweiten Daten übereinstimmen. Wenn der empfangene Teil der ersten Daten und der empfangene Teil der zweiten Daten nicht übereinstimmen, erzeugt die Komparator-Schaltung 150 ein Alarmsignal, so dass Maßnahmen ergriffen werden können, um zu verhindern, dass möglicherweise beschädigter Programmcode durch die Prozessoren ausgeführt wird. In einem Beispiel ist das Alarmsignal ein Unterbrechungssignal.
  • Das Alarmsignal kann eine beliebige Anzahl an Maßnahmen innerhalb des Controller-Systems 100 auslösen. Zum Beispiel kann das Alarmsignal das Controller-System 100 dazu veranlassen, eine Maßnahme durchzuführen, um beschädigte Daten in der ersten Partition 122 oder der zweiten Partition 124 zu diagnostizieren und zu reparieren. In einem Beispiel veranlasst das Alarmsignal den Speichercontroller 125 eine Reparier-Routine durchzuführen, welche ein Ausführen einer EDC-Überprüfung der ersten Daten in der ersten Partition 122 basierend auf dem in der dritten Partition 126 gespeicherten EDC und der zweiten Daten in der zweiten Partition 124 basierend auf dem in der vierten Partition 128 gespeicherten EDC aufweist. Wenn einer der ersten Daten oder der zweiten Daten die EDC-Überprüfung nicht besteht (z.B. beschädigt ist) während die anderen der ersten Daten oder der zweiten Daten die EDC-Überprüfung besteht (z.B. unbeschädigt ist), weist die Reparier-Routine ein Ersetzen der beschädigten ersten oder zweiten Daten mit einer Kopie der unbeschädigten zweiten bzw. ersten Daten und ein Berechnen und Speichern eines EDC für die Kopie der unbeschädigten zweiten bzw. ersten Daten auf.
  • In dem veranschaulichten Beispiel veranlasst die Komparator-Schaltung, wenn die Komparator-Schaltung 150 das Alarmsignal erzeugt, auch die Reparierschaltung 160, um das Controller-SoC 110 zu veranlassen, die Reparier-Routine durchzuführen. Die Reparierschaltung 160 ruft einen Repariercode oder Reparierinstruktionen aus der dritten Partition 126 ab. Der Repariercode führt die Reparier-Routine durch, wenn dieser mittels der Prozessoren CPU 0, CPU 1 ausgeführt wird. Die Reparierschaltung 160 ruft den EDC für die ersten Daten aus der dritten Partition 126 ab. Die Prozessoren CPU 0, CPU 1 führen den Repariercode aus, um die ersten Daten mittels der SPI 130 zu lesen und einen EDC für die ersten Daten zu berechnen. Der berechnete EDC wird mit dem in der dritten Partition 126 gespeicherten EDC verglichen, um zu ermitteln, ob die ersten Daten beschädigt sind. Die Reparierschaltung 160 ruft den Repariercode und den EDC für die zweiten Daten aus der vierten Partition 128 ab. Die Prozessoren CPU 0, CPU 1 führen den Repariercode aus, um die zweiten Daten mittels der SPI 130 zu lesen und einen EDC für die zweiten Daten zu berechnen. Der berechnete EDC wird mit dem in der vierten Partition 128 gespeicherten EDC verglichen, um zu ermitteln, ob die zweiten Daten beschädigt sind.
  • Wenn nur die ersten Daten oder die zweiten Daten beschädigt sind, veranlasst die Reparierschaltung 160 die Ersetzung der beschädigten ersten oder zweiten Daten mit einer Kopie der unbeschädigten zweiten bzw. ersten Daten. Die Reparierschaltung 160, CPU 0/CPU 1 oder der Speichercontroller 125 berechnet und speichert einen EDC für die Kopie der unbeschädigten zweiten bzw. ersten Daten. Dann kann die Ausführung des Programmcodes ohne Reparatur erneut beginnen.
  • In manchen Beispielen ist der Repariercode in einem SRAM in dem Controller-SoC 110 anstatt des externen Speichers 120 gespeichert. In manchen Beispielen ist der Repariercode in der dritten Partition 126 gespeichert und eine Kopie des Repariercodes ist in der vierten Partition 128 gespeichert und die Komparator-Schaltung 150 wird verwendet, um vor Ausführen des Repariercodes die Integrität des Repariercodes durch Vergleichen der Repariercode-Programmdaten der Kopien zu verifizieren.
  • Wenn die Reparier-Routine ermittelt, dass weder die ersten Daten noch die zweiten Daten beschädigt sind, dann kann angenommen werden, dass der Fehler vorübergehend war und die Ausführung des Programmcodes kann fortgesetzt werden. Das Alarmsignal kann dann beendet werden.
  • In manchen Beispielen kann die Komparator-Schaltung 150 zusätzlich zum Erzeugen des Alarmsignals auch Absicherungsmaßnahmen ergreifen, um zu verhindern, dass die potentiell beschädigten Daten den Prozessoren bereitgestellt werden.
  • Es ist ersichtlich, dass die Verifizierung der ersten Daten und zweiten Daten unter Verwendung des EDC nur als Reaktion auf eine Nichtübereinstimmung zwischen den ersten Daten und den zweiten Daten durchgeführt wird. Das bedeutet, dass eine Laufzeitlatenz nicht durch die Durchführung einer EDC-Überprüfung beeinträchtigt wird, außer in Fällen, in denen entweder die ersten Daten oder die zweiten Daten beschädigt sind.
  • In manchen Aspekten kann das hierin beschriebene Code-Verifizierungs-Verfahren bestehende Speicher-Partitionierungs-Schemata nutzen, die verwendet werden, um Software-über-die-Luft-(SOTA)-Aktualisierungen zu ermöglichen. Um SOTA zu ermöglichen, ist Speicher, der Betriebscode speichert, eingerichtet, mindestens zwei Partitionen (z.B. Partitionen 122, 124) aufzuweisen. Eine erste Partition speichert die derzeit verwendete Version des Betriebscodes während eine zweite Partition die unmittelbar vorhergehende Version des Codes speichert. Wenn bei einer SOTA-Aktualisierung neuer Programmcode empfangen wird, speichert der Speichercontroller 125 dem neuen Programmcode zugehörige neue erste Daten in der zweiten Partition, welche die unmittelbar vorhergehende Version des Programmcodes speichert. Der Speichercontroller berechneten einen EDC für die gespeicherten neuen ersten Daten und vergleich den berechneten EDC mit einem empfangenen EDC. Wenn der berechnete EDC mit dem empfangenen EDC übereinstimmt, speichert der Speichercontroller 125 den EDC (z.B. in entweder der dritten Partition 126 oder der vierten Partition 128). An diesem Punkt beginnt das SoC den Betrieb basierend auf dem in der zweiten Partition gespeicherten neuen Programmcode. Die erste Partition speichert weiterhin die jetzt unmittelbar vorherige Version des Programmcodes für den Fall, beim Betrieb zur vorherigen Version des Programmcodes zurückzukehren.
  • Um das hierin beschriebene Code-Verifizierungs-Verfahren zu ermöglichen, kann dieses Zwei-Partitionen-Schema derart verwendet werden, dass nach Verifizierung des bei der SOTA-Aktualisierung empfangenen Programmcodes eine Kopie des verifizierten Programmcodes in einer anderen Partition gespeichert werden kann. Das bedeutet, dass, anstatt des Speicherns einer derzeitigen Version des Programmcodes in einer Partition und einer vorhergehenden Version des Programmcodes in einer anderen Partition, beide Partitionen die derzeitige Version des Programmcodes speichern. Der SOTA-Aktualisierungs-Prozess kann also wie folgt aktualisiert werden.
  • Der Speichercontroller 125 erstellt eine Kopie der ersten Daten, um die zweiten Daten zu erzeugen. Der Speichercontroller 125 speichert die zweiten Daten in der zweiten Partition 124 und berechnet einen zweiten EDC für die gespeicherten zweiten Daten. Wenn der berechnete EDC für die gespeicherten zweiten Daten mit dem EDC für die ersten Daten übereinstimmt, speichert der Speichercontroller den EDC in der vierten Partition 128.
  • Wenn die Kopie der ersten Daten eine invertierte Kopie ist, wird nach Durchführung der Invertierung ein Ziel-EDC für die Schreibdaten berechnet. Nach dem Speichern der Schreibdaten in der zweiten Partition 124 können die Daten aus der zweiten Partition ausgelesen werden und ein EDC kann für die ausgelesenen Daten berechnet werden. Wenn der berechnete EDC mit dem Ziel-EDC übereinstimmt, dann werden die zweiten Daten bestätigt.
  • Es ist ersichtlich aus der voranstehenden Beschreibung, dass die beschriebenen Lösungen ermöglichen, dass ein nicht-modifizierter externer Speicher, der Programmcode und eine Kopie des Programmcodes speichert, eine Echtzeit-Verifizierung von Programmcode, der zur Ausführung durch ein SoC abgerufen wird, unterstützt. Die beschriebenen Lösungen können auch eine Diagnoseabdeckung ohne einen Zugriffsnachteil im Programmabrufpfad unterstützen.
  • Es folgen mehrere Flussdiagramme, die beispielhafte Verfahren erläutern. In dieser Beschreibung und den beigefügten Ansprüchen ist der Begriff „ermitteln“ in Bezug auf eine Entität (z.B. einen Parameter, eine Variable, und so weiter) beim Beschreiben eines Verfahrensschritts oder einer Funktion breit zu verstehen. Zum Beispiel soll „Ermitteln" so verstanden werden, dass dieser zum Beispiel ein Empfangen und Parsen einer Kommunikation, die die Entität oder einen Wert einer Entität codiert, beinhaltet. „Ermitteln“ soll so verstanden werden, dass dieses ein Zugreifen und Lesen eines Speichers (z.B. einer Lookup-Tabelle, eines Registers, eines Vorrichtungsspeichers, eines Remotespeichers, und so weiter), der die Entität oder einen Wert der Entität speichert, beinhaltet. „Ermitteln“ soll so verstanden werden, dass dieses ein Berechnen und Ableiten der Entität oder eines Werts der Entität basierend auf anderen Quantitäten oder Entitäten beinhaltet. „Ermitteln“ soll so verstanden werden, dass dieses jede Art von Ableiten oder Identifizieren einer Entität oder eines Werts der Entität beinhaltet.
  • Wie hierin verwendet, ist der Begriff identifizieren, wenn dieser in Bezug auf eine Entität oder einen Wert einer Entität verwendet wird, breit zu verstehen und jede Art von Ermitteln der Entität bzw. des Werts der Entität beinhalten. Zum Beispiel ist der Begriff identifizieren so zu verstehen, dass dieser beispielsweise ein Empfangen und Parsen einer Kommunikation, die die Entität oder einen Wert einer Entität codiert, beinhaltet. Der Begriff identifizieren soll so verstanden werden, dass dieser ein Zugreifen und Lesen eines Speichers (z.B. einer Vorrichtungs-Warteschlange, einer Lookup-Tabelle, eines Registers, eines Vorrichtungsspeichers, eines Remotespeichers, und so weiter), der die Entität oder einen Wert der Entität speichert, beinhaltet.
  • 3 ist ein Flussdiagramm, das ein beispielhaftes Verfahren 300 zum Verifizieren von aus einem externen Speicher abgerufenen Programmcode erläutert. Das Verfahren kann beispielsweise mittels der Integritäts-Überprüfungs-Schaltung 140 von 1 durchgeführt werden. Das Verfahren weist, in 310, ein Empfangen eines Teils erster Daten von einer ersten Partition eines externen Speichers auf. Die ersten Daten sind einem Programmcode zugehörig. Das Verfahren weist, in 320, ein Empfangen eines zugehörigen Teils zweiter Daten von einer zweiten Partition des externen Speichers auf, wobei die zweiten Daten einer Kopie der ersten Daten zugehörig sind. Der erste Teil und der zweite Teil von Daten können beispielsweise jeweils ein Wort sein. Die zweiten Daten können eine invertierte Kopie der ersten Daten sein.
  • Das Verfahren weist, in 330, ein Vergleichen des Teils der ersten Daten mit dem Teil der zweiten Daten auf. Wenn in 340 der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, wird in 350 der Teil der ersten Daten ein oder mehreren Prozessoren zur Ausführung bereitgestellt. In 360 wird, wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, ein Alarmsignal erzeugt. Das Alarmsignal kann zum Beispiel ein Unterbrechungssignal sein, das einen Betrieb von CPU 1 und CPU 2 stoppt.
  • 4 ist ein Flussdiagramm, das ein beispielhaftes Verfahren 400 zum Verifizieren von aus einem externen Speicher abgerufenen Programmcode erläutert. Das Verfahren kann beispielsweise mittels der Integritäts-Überprüfungs-Schaltung 140 von 1 durchgeführt werden. Das Verfahren weist, in 410, ein Empfangen eines Teils erster Daten von einer ersten Partition eines externen Speichers auf. Die ersten Daten sind einem Programmcode zugehörig. Das Verfahren weist, in 420, ein Empfangen eines zugehörigen Teils zweiter Daten von einer zweiten Partition des externen Speichers auf, wobei die zweiten Daten einer Kopie der ersten Daten zugehörig sind. Der erste Teil und der zweite Teil von Daten können beispielsweise jeweils ein Wort sein. Die zweiten Daten können eine invertierte Kopie der ersten Daten sein.
  • Das Verfahren weist, in 430, ein Vergleichen des Teils der ersten Daten mit dem Teil der zweiten Daten auf. Wenn in 440 der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, wird in 450 der Teil der ersten Daten ein oder mehreren Prozessoren zur Ausführung bereitgestellt. In 460 wird, wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, ein Alarmsignal erzeugt. In 470 wird weder der Teil der ersten Daten noch der Teil der zweiten Daten den ein oder mehreren Prozessoren bereitgestellt. Daher weist das Verfahren 400 zusätzlich zum Erzeugen des Alarmsignals eine zusätzliche Absicherungsmaßnahme auf, die verhindert, dass der potentiell beschädigte Teil von Daten den ein oder mehreren Prozessoren bereitgestellt wird.
  • In einem Beispiel weist das Verfahren 300 oder das Verfahren 400 die folgenden Maßnahmen in Reaktion auf ein Empfangen des Alarmsignals auf. Ein erster Fehlererkennungscode wird aus einer dritten Partition des externen Speichers abgerufen und ein zweiter Fehlererkennungscode wird aus einer vierten Partition des externen Speichers abgerufen. Die ersten Daten werden unter Verwendung des ersten Fehlererkennungscodes verifiziert und die zweiten Daten werden unter Verwendung des zweiten Fehlererkennungscodes verifiziert. Wenn entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und die anderen der ersten Daten oder der zweiten Daten unbeschädigte Daten sind, weist das Verfahren ein Reparieren der beschädigten Daten basierend auf den unbeschädigten Daten auf. In manchen Beispielen weist das Verfahren ein Abrufen von Reparierinstruktionen aus dem externen Speicher und ein Ausführen des Repariercodes auf, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  • 5 ist ein Flussdiagramm, das ein beispielhaftes Verfahren 500 zum Aktualisieren von in einen nichtflüchtigen Speicher gespeicherten Programmcode erläutert. Das Verfahren kann beispielsweise mittels des Speichercontrollers 125 von 1 durchgeführt werden. Das Verfahren weist, in 510, ein Empfangen einer Aktualisierungsinstruktion auf, die einem Programmcode zugehörige erste Daten und einen ersten Fehlererkennungscode für die ersten Daten aufweist. Das Verfahren weist, in 520, ein Speichern der ersten Daten in einer ersten Partition des nichtflüchtigen Speichers auf. Das Verfahren weist, in 530, ein Speichern des ersten Fehlererkennungscodes in einer zweiten Partition des nichtflüchtigen Speichers auf.
  • Das Verfahren weist, in 540, ein Verifizieren der ersten Daten unter Verwendung des ersten Fehlererkennungscodes auf. Wenn die ersten Daten erfolgreich verifiziert werden, weist das Verfahren, in 550, ein Erzeugen von einer Kopie der ersten Daten zugehörigen zweiten Daten auf. In 560 werden die zweiten Daten in einer dritten Partition des nichtflüchtigen Speichers gespeichert. In 570 wird ein zweiter Fehlererkennungscode für die zweiten Daten berechnet. Das Verfahren weist, in 580, ein Speichern des zweiten Fehlererkennungscodes in einer vierten Partition des nichtflüchtigen Speichers auf. In einem Beispiel sind die erste Partition, die zweite Partition, die dritte Partition, und die vierte Partition nicht überlappend.
  • Aus der voranstehenden Beschreibung ist ersichtlich, dass die beschriebenen Systeme, Verfahren und Schaltungen eine Laufzeit-Verifizierung und - Integritätsüberprüfung von Programmcode mit minimaler Latenz in einem Abrufpfad und minimaler Auswirkung auf On-Chip-Speicherressourcen unterstützen. Die beschriebenen Systeme, Verfahren und Schaltungen können auch eine Reparatur von beschädigtem Programmcode unterstützen.
  • Obgleich die Erfindung mit Bezug auf eine oder mehrere Implementierungen veranschaulicht und beschrieben worden ist, können an den dargestellten Beispielen Änderungen und/oder Modifikationen vorgenommen werden, ohne von Bedeutung und Umfang der beigefügten Ansprüche abzuweichen. Insbesondere in Hinblick auf die verschiedenen mittels den voranstehend beschriebenen Komponenten oder Strukturen (Baugruppen, Vorrichtungen, Schaltungen, Schaltkreise, Systeme, etc.) durchgeführten Funktionen, sollen die zum Beschreiben solcher Komponenten verwendeten Begriffe (einschließlich eine Referenz zu einem „Mittel“), sofern nicht anders angegeben, jeder Komponente oder Struktur entsprechen, die die spezifische Funktion der beschriebenen Komponente (z.B. die funktional äquivalent ist) ausführt, auch wenn diese strukturell nicht äquivalent zu der offenbarten Struktur ist, welche die Funktion in den hierin veranschaulichten beispielhaften Implementierungen der Erfindung ausführt.
  • Beispiele können jeweils einen Gegenstand aufweisen, wie beispielsweise ein Verfahren, Mittel zum Ausführen von Handlungen oder Blöcken des Verfahrens, mindestens ein maschinenlesbares Medium, das Instruktionen speichert, die, wenn diese mittels einer Maschine ausgeführt werden, die Maschine veranlassen ein Sicherheitsmanagement auf Basis einer Anwendungsgruppe gemäß hierin beschriebenen Ausführungsformen und Beispielen bereitzustellen.
  • Beispiel 1 ist ein System, das einen nichtflüchtigen Speicher und einen Controller aufweist. Der nichtflüchtige Speicher weist eine erste Partition, die eingerichtet ist, einem Programmcode zugehörige erste Daten zu speichern, und eine zweite Partition, die eingerichtet ist, einer Kopie der ersten Daten zugehörige zweite Daten zu speichern, auf. Der Controller weist einen oder mehrere Prozessoren, die eingerichtet sind, den Programmcode auszuführen, und eine Komparator-Schaltung auf. Die Komparator-Schaltung ist eingerichtet, einen Teil der ersten Daten und einen zugehörigen Teil der zweiten Daten zu empfangen, den Teil der ersten Daten mit dem Teil der zweiten Daten zu vergleichen, wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, den Teil der ersten Daten den ein oder mehreren Prozessoren bereitzustellen, und wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, ein Alarmsignal zu erzeugen.
  • Beispiel 2 weist den Gegenstand von Beispiel 1 auf, optionale Elemente aufweisend oder weglassend, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  • Beispiel 1 weist den Gegenstand von Beispiel 1 auf, optionale Elemente aufweisend oder weglassend, wobei der nichtflüchtige Speicher eingerichtet ist, einen für die ersten Daten berechneten ersten Fehlererkennungscode und einen für die zweiten Daten berechneten zweiten Fehlererkennungscode zu speichern; und wobei der Controller eine Reparierschaltung aufweist, die eingerichtet ist: das Alarmsignal zu empfangen; in Reaktion auf das Alarmsignal, die ersten Daten unter Verwendung des ersten Fehlererkennungscodes zu verifizieren und die zweiten Daten unter Verwendung des zweiten Fehlererkennungscodes zu verifizieren; basierend auf der Verifizierung der ersten Daten und der Verifizierung der zweiten Daten, zu ermitteln, dass entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und dass die anderen der ersten Daten bzw. zweiten Daten unbeschädigte Daten sind; und die beschädigten Daten basierend auf den unbeschädigten Daten zu reparieren.
  • Beispiel 4 weist den Gegenstand von Beispiel 3 auf, optionale Elemente aufweisend oder weglassend, wobei der erste Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist und der zweite Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  • Beispiel 5 weist den Gegenstand von Beispiel 3 auf, optionale Elemente aufweisend oder weglassend, wobei der erste Fehlererkennungscode in einer dritten Partition des nichtflüchtigen Speichers gespeichert ist und wobei der zweite Fehlererkennungscode in einer vierten Partition des nichtflüchtigen Speichers gespeichert ist, wobei die erste Partition, die zweite Partition, die dritte Partition, und die vierte Partition nicht überlappend sind.
  • Beispiel 6 weist den Gegenstand von Beispiel 5 auf, optionale Elemente aufweisend oder weglassend, wobei der nichtflüchtige Speicher dritte Daten, die einen Repariercode codieren, speichert; und wobei die Reparierschaltung eingerichtet ist, in Reaktion auf ein Empfangen des Alarmsignals, die dritten Daten aus dem nichtflüchtigen Speicher abzurufen; und den durch die dritten Daten codierten Repariercode auszuführen, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  • Beispiel 7 weist den Gegenstand von Beispiel 6 auf, optionale Elemente aufweisend oder weglassend, wobei der nichtflüchtige Speicher einer Kopie der dritten Daten zugehörige vierte Daten speichert; und wobei die Komparator-Schaltung eingerichtet ist: einen Teil der dritten Daten und einen zugehörigen Teil der vierten Daten zu empfangen; den Teil der dritten Daten mit dem Teil der vierten Daten zu vergleichen, den Teil der dritten Daten der Reparierschaltung bereitzustellen, wenn der Teil der dritten Daten mit dem Teil der vierten Daten übereinstimmt, und ein Alarmsignal zu erzeugen und ein Bereitstellen des Teils der dritten Daten oder des Teils der vierten Daten der Reparierschaltung zu unterlassen, wenn der Teil der dritten Daten nicht mit dem Teil der vierten Daten übereinstimmt.
  • Beispiel 8 weist den Gegenstand von Beispiel 1 auf, optionale Elemente aufweisend oder weglassend, wobei die Komparator-Schaltung ferner eingerichtet ist, ein Bereitstellen des Teils der ersten Daten oder des Teils der zweiten Daten den ein oder mehreren Prozessoren zu unterlassen, wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt.
  • Beispiel 9 ist ein Verfahren zum Aktualisieren eines nichtflüchtigen Speichers, aufweisend: Empfangen einer Aktualisierungsinstruktion, die einem Programmcode zugehörige erste Daten und einen ersten Fehlererkennungscode für die ersten Daten aufweist; Speichern der ersten Daten in einer ersten Partition des nichtflüchtigen Speichers; Speichern des ersten Fehlererkennungscodes in einer zweiten Partition des nichtflüchtigen Speichers; Verifizieren der ersten Daten unter Verwendung des ersten Fehlererkennungscodes; wenn die ersten Daten erfolgreich verifiziert werden, Erzeugen von einer Kopie der ersten Daten zugehörigen zweiten Daten; Speichern der zweiten Daten in einer dritten Partition des nichtflüchtigen Speichers, Berechnen eines zweiten Fehlererkennungscodes für die zweiten Daten; und Speichern des zweiten Fehlererkennungscodes in einer vierten Partition des nichtflüchtigen Speichers.
  • Beispiel 10 weist den Gegenstand von Beispiel 9 auf, optionale Elemente aufweisend oder weglassend, wobei der Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  • Beispiel 11 weist den Gegenstand von Beispiel 9 auf, optionale Elemente aufweisend oder weglassend, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  • Beispiel 12 weist den Gegenstand von Beispiel 9 auf, optionale Elemente aufweisend oder weglassend, wobei die erste Partition, die zweite Partition, die dritte Partition, und die vierte Partition nicht überlappend sind.
  • Beispiel 13 ist ein System-auf-einem-Chip, das einen oder mehrere Prozessoren, die eingerichtet sind, Programmcode auszuführen, und eine Komparator-Schaltung aufweist. Die Komparator-Schaltung ist eingerichtet, einen Teil erster Daten von einer ersten Partition eines externen Speichers zu empfangen, wobei die ersten Daten dem Programmcode zugehörig sind; einen zugehörigen Teil zweiter Daten von einer zweiten Partition des externen Speichers zu empfangen, wobei die zweiten Daten einer Kopie der ersten Daten zugehörig sind; den Teil der ersten Daten mit dem Teil der zweiten Daten zu vergleichen, wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, den Teil der ersten Daten den ein oder mehreren Prozessoren bereitzustellen, und wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, ein Alarmsignal zu erzeugen.
  • Beispiel 14 weist den Gegenstand von Beispiel 13 auf, optionale Elemente aufweisend oder weglassend, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  • Beispiel 15 weist den Gegenstand von Beispiel 13 auf, optionale Elemente aufweisend oder weglassend, ferner aufweisend eine Reparierschaltung, die eingerichtet ist: das Alarmsignal zu empfangen und in Reaktion darauf einen in einer dritten Partition des externen Speichers gespeicherten ersten Fehlererkennungscode abzurufen; einen in einer vierten Partition des externen Speichers gespeicherten zweiten Fehlererkennungscode abzurufen; die ersten Daten unter Verwendung eines ersten Fehlererkennungscodes zu verifizieren; die zweiten Daten unter Verwendung des zweiten Fehlererkennungscodes zu verifizieren; basierend auf der Verifizierung der ersten Daten und der Verifizierung der zweiten Daten, zu ermitteln, dass entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und dass die anderen der ersten Daten bzw. zweiten Daten unbeschädigte Daten sind; und die beschädigten Daten basierend auf den unbeschädigten Daten zu reparieren.
  • Beispiel 16 weist den Gegenstand von Beispiel 15 auf, optionale Elemente aufweisend oder weglassend, wobei der erste Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist und der zweite Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  • Beispiel 17 weist den Gegenstand von Beispiel 15 auf, optionale Elemente aufweisend oder weglassend, wobei die erste Partition, die zweite Partition, die dritte Partition, und die vierte Partition nicht überlappend sind.
  • Beispiel 18 weist den Gegenstand von Beispiel 15 auf, optionale Elemente aufweisend oder weglassend, wobei die Reparierschaltung eingerichtet ist, in Reaktion auf ein Empfangen des Alarmsignals, einen Repariercode aus dem externen Speicher abzurufen; und den Repariercode auszuführen, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  • Beispiel 19 ist ein Verfahren, aufweisend: Empfangen eines Teils erster Daten von einer ersten Partition eines externen Speichers, wobei die ersten Daten einem Programmcode zugehörig sind; Empfangen eines zugehörigen Teils zweiter Daten von einer zweiten Partition des externen Speichers, wobei die zweiten Daten einer Kopie der ersten Daten zugehörig sind; Vergleichen des Teils der ersten Daten mit dem Teil der zweiten Daten, wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, Bereitstellen des Teils der ersten Daten einem oder mehrere Prozessoren zur Ausführung, und wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, Erzeugen eines Alarmsignals.
  • Beispiel 20 weist den Gegenstand von Beispiel 19 auf, optionale Elemente aufweisend oder weglassend, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  • Beispiel 21 weist den Gegenstand von Beispiel 19 auf, optionale Elemente aufweisend oder weglassend, ferner aufweisend: Empfangen des Alarmsignals, und in Reaktion darauf Abrufen eines in einer dritten Partition des externen Speichers gespeicherten ersten Fehlererkennungscodes; Abrufen eines in einer vierten Partition des externen Speichers gespeicherten zweiten Fehlererkennungscodes; Verifizieren der ersten Daten unter Verwendung eines ersten Fehlererkennungscodes; Verifizieren der zweiten Daten unter Verwendung des zweiten Fehlererkennungscodes; basierend auf der Verifizierung der ersten Daten und der Verifizierung der zweiten Daten, Ermitteln, dass entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und dass die anderen der ersten Daten bzw. zweiten Daten unbeschädigte Daten sind; und Reparieren der beschädigten Daten basierend auf den unbeschädigten Daten.
  • Beispiel 22 weist den Gegenstand von Beispiel 21 auf, optionale Elemente aufweisend oder weglassend, wobei der erste Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist und der zweite Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  • Beispiel 23 weist den Gegenstand von Beispiel 21 auf, optionale Elemente aufweisend oder weglassend, ferner aufweisend, in Reaktion auf ein Empfangen des Alarmsignals, Abrufen eines Repariercodes aus dem externen Speicher; und Ausführen des Repariercodes, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  • Beispiel 24 weist den Gegenstand von Beispiel 19 auf, optionale Elemente aufweisend oder weglassend, ferner aufweisend: Unterlassen eines Bereitstellens des Teils der ersten Daten oder des Teils der zweiten Daten den ein oder mehreren Prozessoren, wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt.
  • Die voranstehende Beschreibung einer oder mehrerer Implementierungen stellt eine Veranschaulichung und Beschreibung bereit, aber soll nicht erschöpfend sein oder den Umfang der beispielhaften Ausführungsformen auf die genau offenbarte Form beschränken. Modifikationen und Variationen sind im Lichte der voranstehend Lehren möglich bzw. können aus der Anwendung verschiedener Implementierungen der beispielhaften Ausführungsformen erlangt werden.
  • Verschiedene in Verbindung mit hierin offenbarten Aspekten beschriebene veranschaulichende Logiken, Logikblöcke, Module, Schaltkreise und Schaltungen können implementiert oder durchgeführt werden mit einem Allzweckprozessor, einem digitalen Signalprozessor (DSP), einer anwendungsspezifischen integrierten Schaltung (ASIC), einem feldprogrammierbaren Gatterarray (FPGA) oder anderen programmierbaren Logikvorrichtungen, einer diskreten Gatter- oder Transistor-Logik, diskreten Hardware-Komponenten, oder jeder Kombination davon, die dazu bestimmt ist, hierin beschriebene Funktionen durchzuführen. Ein Allzweckprozessor kann ein Mikroprozessor sein, aber alternativ kann ein Prozessor auch jeder herkömmliche Prozessor, Controller, Mikrocontroller oder ein Zustandsautomat sein.
  • In der vorliegenden Offenbarung werden durchgehend gleiche Bezugszeichen verwendet, um sich auf gleiche Elemente zu beziehen, und wobei die dargestellten Strukturen und Vorrichtungen nicht notwendigerweise maßstabsgetreu sind. Wie hierin verwendet, sollen sich die Begriffe „Modul“, „Komponente,“ „System,“ „Schaltung,“ „Schaltkreis,“ „Element,“ „slice,“ und dergleichen auf eine computerbezogene Entität, Hardware, Software (z.B. in Ausführung), und/oder Firmware geziehen. Zum Beispiel kann ein Schaltkreis oder ähnlicher Ausdruck ein Prozessor, ein auf einem Prozessor laufender Prozess, ein Controller, ein Objekt, ein ausführbares Programm, eine Speichervorrichtung und/oder ein Computer mit einer Verarbeitungs-Vorrichtung sein. Zur Veranschaulichung kann eine auf einem Server laufende Anwendung und auch der Server eine Schaltung sein. Eine oder mehrere Schaltungen können sich innerhalb eines Prozesses befinden und eine Schaltung kann sich auf einem Computer und/oder verteilt zwischen zwei oder mehr Computern befinden. Ein Satz von Elementen oder ein Satz von anderen Schaltungen kann hierin beschrieben sein, in welchen der Begriff „Satz“ als „ein oder mehrere“ interpretiert werden kann.
  • Als ein anderes Beispiel kann eine Schaltung oder ein ähnlicher Begriff eine Vorrichtung mit einer spezifischen Funktionalität sein, die durch mittels einer elektrischen oder elektronischen Schaltung betriebenen mechanischen Teilen bereitgestellt wird, wobei die elektrische oder elektronische Schaltung mittels einer Software-Anwendung oder einer Firmware-Anwendung, die durch einen oder mehrere Prozessoren ausgeführt wird, betrieben werden kann. Die ein oder mehreren Prozessoren können intern oder extern der Vorrichtung sein und können zumindest einen Teil der Software- oder Firmware-Anwendung ausführen. Als ein noch anderes Beispiel kann eine Schaltung eine Vorrichtung sein, die eine spezifische Funktionalität durch elektronische Komponenten oder mechanische Teile bereitstellt; die elektronischen Komponenten können darin Feldgatter, Logikkomponenten, hardwarecodierte Logik, Register-Transfer-Logik, einen oder mehrere Prozessoren aufweisen, um Software und/oder Firmware auszuführen, die zumindest teilweise die Funktionalität der elektronischen Komponenten verleiht.
  • Die Verwendung des Wortes beispielhaft soll dazu dienen, Konzepte in einer konkreten Weise darzustellen. Die hierin verwendete Terminologie dient nur dem Zweck des Beschreibens bestimmter Beispiele und soll die Beispiele nicht beschränken. Wie hierin verwendet, sollen die Singularformen „ein“, „eine“, „eines“ und „der“, „die“, „das“ auch die Pluralformen aufweisen, sofern der Kontext nicht explizit anderes angibt. Es wird ferner verstanden, dass die Begriffe „aufweisen“, und/oder „aufweisend“, wenn diese hierin verwendet werden, das Vorhandensein der angegebenen Merkmale, Ganzzahlen, Schritten, Operationen, Elementen und/oder Komponenten spezifizieren, aber das Vorhandensein oder Hinzufügen ein oder mehrerer anderer Merkmale, Ganzzahlen, Schritten, Operationen, Elementen, Komponenten und/oder Gruppen davon nicht ausschließen. Wie hierin verwendet weist der Begriff „oder“ die Option aller Elemente bezüglich des Worts oder auf. Zum Beispiel A oder B zu verstehen als nur A, nur B und beide, A und B, einschließend. Ferner ist „ein oder mehrere von“ gefolgt von A, B oder C zu verstehen als A, B, C, AB, AC, BC, und ABC einschließend.

Claims (24)

  1. Ein System (100), aufweisend: einen nichtflüchtigen Speicher (120), der aufweist: eine erste Partition (122), die eingerichtet ist, einem Programmcode zugehörige erste Daten zu speichern; und eine zweite Partition (124), die eingerichtet ist, einer Kopie der ersten Daten zugehörige zweite Daten zu speichern; und einen Controller (110), der aufweist: einen oder mehrere Prozessoren (CPU 0, CPU 1), die eingerichtet sind, den Programmcode auszuführen; und eine Komparator-Schaltung (150), die eingerichtet ist: einen Teil der ersten Daten und einen zugehörigen Teil der zweiten Daten zu empfangen, den Teil der ersten Daten mit dem Teil der zweiten Daten zu vergleichen, wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, den Teil der ersten Daten den ein oder mehreren Prozessoren (CPU 0, CPU 1) bereitzustellen, und wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, ein Alarmsignal zu erzeugen.
  2. Das System (100) nach Anspruch 1, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  3. Das System (100) nach einem der Ansprüche 1 oder 2, wobei der nichtflüchtige Speicher (120) eingerichtet ist, einen für die ersten Daten berechneten ersten Fehlererkennungscode und einen für die zweiten Daten berechneten zweiten Fehlererkennungscode zu speichern; und der Controller (110) eine Reparierschaltung (160) aufweist, die eingerichtet ist: das Alarmsignal zu empfangen; in Reaktion auf das Alarmsignal, die ersten Daten unter Verwendung des ersten Fehlererkennungscodes zu verifizieren und die zweiten Daten unter Verwendung des zweiten Fehlererkennungscodes zu verifizieren; basierend auf der Verifizierung der ersten Daten und der Verifizierung der zweiten Daten, zu ermitteln, dass entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und dass die anderen der ersten Daten bzw. zweiten Daten unbeschädigte Daten sind; und die beschädigten Daten basierend auf den unbeschädigten Daten zu reparieren.
  4. Das System (100) nach Anspruch 3, wobei der erste Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist und der zweite Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  5. Das System (100) nach einem der Ansprüche 3 oder 4, wobei der erste Fehlererkennungscode in einer dritten Partition (126) des nichtflüchtigen Speichers (120) gespeichert ist und wobei der zweite Fehlererkennungscode in einer vierten Partition (128) des nichtflüchtigen Speichers (120) gespeichert ist, wobei die erste Partition (122), die zweite Partition (124), die dritte Partition (126), und die vierte Partition (128) nicht überlappend sind.
  6. Das System (100) nach Anspruch 5, wobei der nichtflüchtige Speicher (120) dritte Daten, die einen Repariercode codieren, speichert; und die Reparierschaltung (160) eingerichtet ist, in Reaktion auf ein Empfangen des Alarmsignals, die dritten Daten aus dem nichtflüchtigen Speicher (120) abzurufen; und den durch die dritten Daten codierten Repariercode auszuführen, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  7. Das System (100) nach Anspruch 6, wobei der nichtflüchtige Speicher (120) einer Kopie der dritten Daten zugehörige vierte Daten speichert; und die Komparator-Schaltung (150) eingerichtet ist: einen Teil der dritten Daten und einen zugehörigen Teil der vierten Daten zu empfangen; den Teil der dritten Daten mit dem Teil der vierten Daten zu vergleichen, den Teil der dritten Daten der Reparierschaltung bereitzustellen, wenn der Teil der dritten Daten mit dem Teil der vierten Daten übereinstimmt, und ein Alarmsignal zu erzeugen und ein Bereitstellen des Teils der dritten Daten oder des Teils der vierten Daten der Reparierschaltung zu unterlassen, wenn der Teil der dritten Daten nicht mit dem Teil der vierten Daten übereinstimmt.
  8. Das System (100) nach einem der Ansprüche 1 bis 7, wobei die Komparator-Schaltung (150) ferner eingerichtet ist, ein Bereitstellen des Teils der ersten Daten oder des Teils der zweiten Daten den ein oder mehreren Prozessoren (CPU 0, CPU 1) zu unterlassen, wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt.
  9. Ein Verfahren zum Aktualisieren eines nichtflüchtigen Speichers (120), aufweisend: Empfangen einer Aktualisierungsinstruktion, die einem Programmcode zugehörige erste Daten und einen ersten Fehlererkennungscode für die ersten Daten aufweist; Speichern der ersten Daten in einer ersten Partition (122) des nichtflüchtigen Speichers (120); Speichern des ersten Fehlererkennungscodes in einer zweiten Partition (124) des nichtflüchtigen Speichers (120); Verifizieren der ersten Daten unter Verwendung des ersten Fehlererkennungscodes; wenn die ersten Daten erfolgreich verifiziert werden, Erzeugen von einer Kopie der ersten Daten zugehörigen zweiten Daten; Speichern der zweiten Daten in einer dritten Partition (126) des nichtflüchtigen Speichers (120), Berechnen eines zweiten Fehlererkennungscodes für die zweiten Daten; und Speichern des zweiten Fehlererkennungscodes in einer vierten Partition (128) des nichtflüchtigen Speichers (120).
  10. Das Verfahren nach Anspruch 9, wobei der Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  11. Das Verfahren nach einem der Ansprüche 9 oder 10, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  12. Das Verfahren nach einem der Ansprüche 9 bis 11, wobei die erste Partition (122), die zweite Partition (124), die dritte Partition (126) und die vierte Partition (128) nicht überlappend sind.
  13. Ein System-auf-einem-Chip (100), aufweisend: einen oder mehrere Prozessoren (CPU 0, CPU 1), die eingerichtet sind, Programmcode auszuführen; und eine Komparator-Schaltung (150), die eingerichtet ist: einen Teil erster Daten von einer ersten Partition (122) eines externen Speichers (120) zu empfangen, wobei die ersten Daten dem Programmcode zugehörig sind; einen zugehörigen Teil zweiter Daten von einer zweiten Partition (124) des externen Speichers (120) zu empfangen, wobei die zweiten Daten einer Kopie der ersten Daten zugehörig sind; den Teil der ersten Daten mit dem Teil der zweiten Daten zu vergleichen, wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, den Teil der ersten Daten den ein oder mehreren Prozessoren (CPU 0, CPU 1) bereitzustellen, und wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, ein Alarmsignal zu erzeugen.
  14. Das System-auf-einem-Chip (100) nach Anspruch 13, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  15. Das System-auf-einem-Chip (100) nach einem der Ansprüche 13 oder 14, ferner aufweisend eine Reparierschaltung (160), die eingerichtet ist: das Alarmsignal zu empfangen und in Reaktion darauf einen in einer dritten Partition (126) des externen Speichers (120) gespeicherten ersten Fehlererkennungscode abzurufen; einen in einer vierten Partition (128) des externen Speichers (120) gespeicherten zweiten Fehlererkennungscode abzurufen; die ersten Daten unter Verwendung eines ersten Fehlererkennungscodes zu verifizieren; die zweiten Daten unter Verwendung des zweiten Fehlererkennungscodes zu verifizieren; basierend auf der Verifizierung der ersten Daten und der Verifizierung der zweiten Daten, zu ermitteln, dass entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und dass die anderen der ersten Daten bzw. zweiten Daten unbeschädigte Daten sind; und die beschädigten Daten basierend auf den unbeschädigten Daten zu reparieren.
  16. Das System-auf-einem-Chip (100) nach Anspruch 15, wobei der erste Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist und der zweite Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  17. Das System-auf-einem-Chip (100) nach einem der Ansprüche 15 oder 16, wobei die erste Partition (122), die zweite Partition (124), die dritte Partition (126), und die vierte Partition (128) nicht überlappend sind.
  18. Das System-auf-einem-Chip (100) nach einem der Ansprüche 15 bis 17, wobei die Reparierschaltung (160) eingerichtet ist, in Reaktion auf ein Empfangen des Alarmsignals, einen Repariercode aus dem externen Speicher (120) abzurufen; und den Repariercode auszuführen, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  19. Ein Verfahren (300), aufweisend: Empfangen eines Teils erster Daten von einer ersten Partition (122) eines externen Speichers (120), wobei die ersten Daten einem Programmcode zugehörig sind (310); Empfangen eines zugehörigen Teils zweiter Daten von einer zweiten Partition (124) des externen Speichers (120), wobei die zweiten Daten einer Kopie der ersten Daten zugehörig sind (320); Vergleichen des Teils der ersten Daten mit dem Teil der zweiten Daten (330), wenn der Teil der ersten Daten mit dem Teil der zweiten Daten übereinstimmt, Bereitstellen des Teils der ersten Daten einem oder mehrere Prozessoren (CPU 0, CPU 1) zur Ausführung (350), und wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt, Erzeugen eines Alarmsignals (360).
  20. Das Verfahren (300) nach Anspruch 19, wobei die zweiten Daten eine invertierte Kopie der ersten Daten aufweisen.
  21. Das Verfahren (300) nach einem der Ansprüche 19 oder 20, ferner aufweisend: Empfangen des Alarmsignals, und in Reaktion darauf Abrufen eines in einer dritten Partition des externen Speichers (120) gespeicherten ersten Fehlererkennungscodes; Abrufen eines in einer vierten Partition des externen Speichers (120) gespeicherten zweiten Fehlererkennungscodes; Verifizieren der ersten Daten unter Verwendung eines ersten Fehlererkennungscodes; Verifizieren der zweiten Daten unter Verwendung des zweiten Fehlererkennungscodes; basierend auf der Verifizierung der ersten Daten und der Verifizierung der zweiten Daten, Ermitteln, dass entweder die ersten Daten oder die zweiten Daten beschädigte Daten sind und dass die anderen der ersten Daten bzw. zweiten Daten unbeschädigte Daten sind; und Reparieren der beschädigten Daten basierend auf den unbeschädigten Daten.
  22. Das Verfahren (300) nach Anspruch 21, wobei der erste Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist und der zweite Fehlererkennungscode einen zyklischen Redundanzprüfungs-(CRC)-Code aufweist.
  23. Das Verfahren (300) nach einem der Ansprüche 21 oder 22, ferner aufweisend, in Reaktion auf ein Empfangen des Alarmsignals, Abrufen eines Repariercodes aus dem externen Speicher (120); und Ausführen des Repariercodes, um die ersten Daten und die zweiten Daten zu verifizieren und die beschädigten Daten zu reparieren.
  24. Das Verfahren (300) nach einem der Ansprüche 19 bis 23, ferner aufweisend Unterlassen eines Bereitstellens des Teils der ersten Daten oder des Teils der zweiten Daten den ein oder mehreren Prozessoren (CPU 0, CPU 1), wenn der Teil der ersten Daten nicht mit dem Teil der zweiten Daten übereinstimmt.
DE102022125477.1A 2021-10-15 2022-10-04 Ausführung-vor-ort-architektur mit integritätsüberprüfung Pending DE102022125477A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/502,300 US11640332B1 (en) 2021-10-15 2021-10-15 Execute in place architecture with integrity check
US17/502,300 2021-10-15

Publications (1)

Publication Number Publication Date
DE102022125477A1 true DE102022125477A1 (de) 2023-04-20

Family

ID=85773301

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022125477.1A Pending DE102022125477A1 (de) 2021-10-15 2022-10-04 Ausführung-vor-ort-architektur mit integritätsüberprüfung

Country Status (3)

Country Link
US (1) US11640332B1 (de)
JP (1) JP2023059860A (de)
DE (1) DE102022125477A1 (de)

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5619642A (en) * 1994-12-23 1997-04-08 Emc Corporation Fault tolerant memory system which utilizes data from a shadow memory device upon the detection of erroneous data in a main memory device
US6009547A (en) * 1997-12-03 1999-12-28 International Business Machines Corporation ECC in memory arrays having subsequent insertion of content
TW511340B (en) * 2000-12-12 2002-11-21 Elan Microelectronics Corp Method and system for data loss detection and recovery in wireless communication
DE102007029116A1 (de) * 2007-06-25 2009-01-02 Continental Automotive Gmbh Verfahren zum Betreiben eines Mikrocontrollers und einer Ausführungseinheit sowie ein Mikrocontroller und eine Ausführungseinheit
EP2294581B1 (de) * 2008-06-20 2013-01-09 Freescale Semiconductor, Inc. System zum verteilen eines verfügbaren speicherbetriebsmittels
US8589737B2 (en) * 2008-06-20 2013-11-19 Freescale Semiconductor, Inc. Memory system with redundant data storage and error correction
US20180107591A1 (en) * 2011-04-06 2018-04-19 P4tents1, LLC System, method and computer program product for fetching data between an execution of a plurality of threads
US8909981B2 (en) * 2011-06-21 2014-12-09 Hamilton Sundstrand Corporation Control system software execution during fault detection
US9362913B1 (en) * 2014-09-26 2016-06-07 Altera Corporation Circuitry for implementing multi-mode redundancy and arithmetic functions
US10496484B2 (en) * 2016-08-05 2019-12-03 Sandisk Technologies Llc Methods and apparatus for error detection for data storage devices
US10606829B1 (en) * 2018-04-17 2020-03-31 Intuit Inc. Methods and systems for identifying data inconsistencies between electronic record systems using data partitioning
KR102657783B1 (ko) * 2018-10-12 2024-04-15 수퍼멤, 인크. 오류 정정 및 데이터 클리닝 회로가 구비된 메모리 시스템
US20210311832A1 (en) * 2021-06-22 2021-10-07 Intel Corporation Register fault detector

Also Published As

Publication number Publication date
US11640332B1 (en) 2023-05-02
JP2023059860A (ja) 2023-04-27
US20230123080A1 (en) 2023-04-20

Similar Documents

Publication Publication Date Title
DE102012109614B4 (de) Verfahren zum Wiederherstellen von Stapelüberlauf- oder Stapelunterlauffehlern in einer Softwareanwendung
DE102010037457B4 (de) Verfahren zur Datenverarbeitung zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Verfahren zum Erzeugen von Programm-Code, Datenverarbeitungsanordnungen zum Bereitstellen eines Wertes zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, Datenverarbeitungsanordnungen zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist, und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
DE102011108933B4 (de) Sichere Speicherung durch interne Betriebssicherstellung
DE102013211077A1 (de) Verfahren zum Testen eines Speichers und Speichersystem
US10503601B2 (en) Method and apparatus for tracking objects in a first memory
DE112007003015T5 (de) Verfahren und Vorrichtung zur Cache-gestützten Fehlerdetektion und -korrektur in einem Speicher
DE102013201174A1 (de) Online-Überprüfung einer Standby-Datenbank in physischen Replikationsumgebungen mit Protokollversand
KR102031606B1 (ko) 버저닝된 메모리 구현
DE102016107718A1 (de) Auslesen von Fehlervektoren aus einer Speichereinheit
DE102011112174A1 (de) Vorrichtung und Verfahren zum Schutz und zur zerstörungsfreien Prüfung sicherheitsrelevanter Register
DE102018124628A1 (de) System, Gerät und Verfahren zum funktionellen Testen eines oder mehrerer Gefüge eines Prozessors
DE102011011333B4 (de) Lesen in Peripheriegeräte und schreiben aus Peripheriegeräten mit zeitlich getrennter, redundanter Prozessorausführung
DE102013018647A1 (de) Funktionalität für Ausfallsicherheitscode
DE102022105600A1 (de) Register-fehlerdetektor
DE102015210651B4 (de) Schaltung und Verfahren zum Testen einer Fehlerkorrektur-Fähigkeit
DE102004011450A1 (de) Anvisierte Fehlertoleranz durch spezielle CPU-Befehle
DE102022125477A1 (de) Ausführung-vor-ort-architektur mit integritätsüberprüfung
DE102007040721B4 (de) Datenverarbeitungsanordnung, Verfahren zur Datenverarbeitung, Computerprogrammelement und Überprüfungsanordnung für einen Speicher
DE102014114157B4 (de) Verfahren zur Datenverarbeitung zum Ermitteln, ob bei einer Ausführung eines Programms ein Fehler aufgetreten ist und Datenverarbeitungsanordnungen zum Erzeugen von Programm-Code
Montrucchio et al. Software-implemented fault injection in operating system kernel mutex data structure
DE112021001930T5 (de) Schutz der physikalischen ethernet-schicht
Pfähler et al. Crash-safe refinement for a verified flash file system
DE102022208557A1 (de) Verfahren zur fehlerprüfungs- und bereinigungsoperation und halbleitersystem, das dasselbe verwendet
JP3342039B2 (ja) ファイルを管理する処理装置
Gawkowski et al. Experimental evaluation of fault handling mechanisms