-
Die Erfindung betrifft ein Verfahren zum Prüfen eines Hauptspeichers eines Prozessors. Des Weiteren betrifft die Erfindung eine Vorrichtung zum Prüfen eines Hauptspeichers eines Prozessors.
-
In modernen Computersystemen ist es üblich, dass der Prozessor einen möglichst großen und kostengünstigen Hauptspeicher aufweist. Für die Abarbeitung von Programmen durch den Prozessor sind dabei verschiedene Speicherzugriffe, wie Laden/Lesen, Speichern und/oder Schreiben von Daten, Operanten und/oder Befehlen erforderlich.
-
Aufgrund von Sicherheits- und/oder Betriebsanforderungen ist es üblich, Teile des Hauptspeichers von Zeit zu Zeit zu prüfen. Bedingt durch die Größe des Hauptspeichers und relativ langen Zugriffszeiten des Prozessors auf den Hauptspeicher benötigt ein Speichertest viel Zeit und widerspricht beispielsweise der Forderung nach kurzen Hochlaufzeiten des Prozessors.
-
Der Erfindung liegt daher die Aufgabe zugrunde, ein Verfahren zum Prüfen eines Hauptspeichers eines Prozessors zu beschleunigen. Des Weiteren ist es Aufgabe der Erfindung eine Vorrichtung zum Prüfen des Hauptspeichers zu vereinfachen.
-
Die Aufgabe hinsichtlich des Verfahrens wird erfindungsgemäß durch die im Anspruch 1 angegebenen Merkmale gelöst. Hinsichtlich der Vorrichtung wird die Aufgabe durch die im Anspruch 11 angegebenen Merkmale gelöst.
-
Vorteilhafte Ausgestaltungen der Erfindung sind Gegenstand der Unteransprüche.
-
Beim Verfahren zum Prüfen eines Hauptspeichers eines Prozessors, wobei der Hauptspeicher eine Mehrzahl von Speicherzellen aufweist, wird vor dem Ausführen eines Speichertests eine gegebenenfalls momentan ablaufende Hochlaufsequenz unterbrochen und temporäre für den Speichertest erforderliche Daten, wie z. B. Programmvariablen, in mindestens ein Register geschrieben oder dort gehalten. Darüber hinaus wird der Zugriff vom Cache-Speicher auf den Hauptspeicher aktiviert, wobei der Zugriff auf die Speicherzellen des Hauptspeichers über einen Cache-Speicher während des Speichertests derart erfindungsgemäß ausgeführt wird, dass Bitmuster in den Cache-Speicher und über diesen in den Hauptspeicher geschrieben und aus dem Hauptspeicher über den Cache-Speicher wieder ausgelesen und verglichen werden, wobei der zu testende Bereich des Hauptspeichers größer ist als die Größe des Cache-Speichers. Anschließend wird die gegebenenfalls vor dem Ausführen des Speichertests unterbrochene Hochlaufsequenz erneut gestartet oder fortgesetzt.
-
Nach Ablauf des Speichertests wird dann der Cache-Speicher wieder vom Hauptspeicher getrennt und die vor dem Ausführen des Speichertests unterbrochene Hochlaufsequenz erneut gestartet oder fortgesetzt. Darüber hinaus werden die aus dem Hauptspeicher wieder ausgelesenen Bitmuster mit erzeugten Soll-Bitmustern verglichen. Insbesondere wird der Speichertest vor einem Start des Betriebssystems ausgeführt, wobei die momentan laufende Hochlaufsequenz ein Vor- oder das Initialisierungsprogramm eines Computerprogramms des Prozessors ist.
-
Ein derartiges Verfahren unter Verwendung von mindestens einem schnellen Cache-Speicher mit wesentlich kürzeren Zugriffszeiten ermöglicht ein sicheres und gegenüber dem Stand der Technik deutlich schnelleres Testverfahren für den Hauptspeicher. Dabei kann der Test des Hauptspeichers stufenweise und/oder blockweise ausgeführt werden.
-
Der Prozessor ist vorzugsweise als ein Mikroprozessor ausgebildet. Mikroprozessoren sind Prozessoren, bei denen alle Komponenten auf einem Mikrochip angeordnet sind.
-
Zweckmäßigerweise wird zum insbesondere wortweisen, zellenweisen und/oder blockweisen Prüfen des Hauptspeichers als Bitmuster ein Muster mit Nullen und/oder Einsen verwendet. Dabei wird beispielsweise der Hauptspeicher in gleichgroße, voneinander unabhängige Bereiche, z. B. Worte, Blöcke, und somit wortweise bzw. blockweise, unterteilt, die zeitlich verschieden gelesen oder beschrieben werden können. Beispielsweise werden aufeinander folgende Speicherworte zyklisch in aufeinander folgende Speicherbänke oder -blöcke geschrieben oder aus diesen gelesen. Durch Testen von aufeinander folgenden Speicherbänken bzw. -blöcken kann die Zugriffszeit verkürzt werden, da die Breite des Datenbusses zum Hauptspeicher größer als die Wortbreite des Prozessors ist.
-
Für einen dauerhaft sicheren Betrieb des Hauptspeichers werden bei einer zellenweisen Prüfung ein oder mehrere Speicherzellen des Hauptspeichers mehrfach getestet. Analog dazu werden bei einem blockweisen Test ein oder mehrere Speicherblöcke mehrfach getestet. Jede Speicherzelle wird mit einem bekannten Wert und dem Komplement (Invertierung) des Wertes beschrieben, so dass jedes Bit einmal auf den Wert „1” und einmal den Wert „0” halten muss.
-
In einer einfachen Ausführungsform werden ein oder mehrere Speicherzellen und/oder -blocks des Hauptspeichers zyklisch getestet. Alternativ oder zusätzlich kann der Test ereignisgesteuert ausgeführt werden. Beispielsweise wird der Speichertest vom Bootlader vor dem Start des Betriebssystems ausgeführt. Darüber hinaus kann nach einem fehlerhaften Programmablauf der Hauptspeichertest vom Prozessor automatisch aktiviert und zumindest einmal oder mehrmals ausgeführt werden.
-
Zweckmäßigerweise wird vor einem Durchführen eines Speichertests des Hauptspeichers ein Test von Adress- und/oder Datenleitungen ausgeführt. Dabei werden die Tests von Adress- und/oder Datenleitungen über den Direktzugriff des Prozessors auf den Hauptspeicher und nicht über den Cache-Speicher ausgeführt. Der Test der Adress- und/oder Datenleitungen wird somit in herkömmlicher Art und Weise durch den Direktzugriff vor dem Speichertest ausgeführt werden. Mittels der Ausführung des Tests der Adress- und/oder Datenleitungen vor einem Speichertest werden insbesondere mögliche Fertigungsfehler, z. B. Leitungsunterbrechungen, Leitungskurzschlüsse, identifiziert. Der Speichertest zur Identifizierung eines Speicherchipfehlers wird insbesondere erst dann ausgeführt, wenn beide vorherigen Tests, d. h. der Test der Adressleitungen und der Test der Datenleitungen, ordnungsgemäß, d. h. fehlerfrei, durchlaufen sind.
-
Zur Vermeidung von Datenverlusten werden temporäre Programmdaten oder -variablen während eines Speichertests, insbesondere nach dem Test der Adress- und/oder Datenleitungen und vor dem Speichertest in einem Register zwischengespeichert. Nach Ablauf des Speichertests können diese Programmdaten oder -variablen wieder ausgelesen und in den Cache-Speicher und/oder Hauptspeicher geschrieben werden. Insbesondere wird, wenn die Anzahl von Registern zur Zwischenspeicherung der temporären Daten nicht ausreicht, die Hochlaufsequenz neu gestartet und somit wiederholt, um die temporären Daten wiederherzustellen. Für den Fall, dass während des Speichertests verworfene temporäre Daten nicht mehr gebraucht werden, wird die Hochlaufsequenz fortgesetzt.
-
Zur Analyse des ausgeführten Speichertests wird das aus dem Vergleich der Bitmuster resultierende Ergebnis in ein Register des Prozessors geschrieben.
-
In einer Weiterbildung der Erfindung werden mehrere Cache-Speicher verwendet, wobei einer der Cache-Speicher zum Speichern von Programmcode (auch Programm- oder Instructions-Cache genannt) und ein weiterer Cache-Speicher zum Speichern von aktuellen, d. h. momentan verwendeten, Daten und/oder Variablen, wie Programmvariablen und Adressdaten, (auch Daten-Cache genannt) verwendet wird. Dabei dient der den Programm-Code speichernde Cache-Speicher der Beschleunigung der Zugriffe auf den Programm-Code. Der Daten-Cache, d. h. der die temporären Daten speichernde Cache-Speicher, dient insbesondere der Speicherung und Beschleunigung der Zugriffe auf den Hauptspeicher.
-
Vorzugsweise wird der Programmcode und insbesondere der den Speichertest enthaltende Programmcode in einem Lesespeicher (ROM = read-only-memory-Speicher) hinterlegt.
-
In einer Weiterbildung der Erfindung wird der den Speichertest enthaltende Programmcode im Hauptprogramm implementiert. Dadurch wird ein Unterprogramm-Aufruf verhindert, der einen funktionsfähigen Stack-Speicher bedingen würde. Alternativ kann der Speichertest als ein Unterprogramm implementiert werden. In diesem Fall erfolgt die Fortsetzung des Programms in Unterprogrammaufrufen; ein Rücksprung in das Hauptprogramm wird aufgrund möglicherweise verlorengegangener Programmvariablen aus dem Cache-Speicher verhindert.
-
Hinsichtlich der Vorrichtung zum Prüfen des Hauptspeichers ist erfindungsgemäß zwischen dem Hauptspeicher und dem Prozessor ein Cache-Speicher derart angeordnet, dass während eines Speichertests ein Zugriff auf die Speicherzellen des Hauptspeichers über den Cache-Speicher derart ausführbar ist, dass vorgebbare Bitmuster in den Cache-Speicher, insbesondere in dessen Speicherzellen und über diesen in den Hauptspeicher, insbesondere in dessen Speicherzellen schreibbar und aus diesen über den Cache-Speicher wieder auslesbar sind, wobei der Prozessor die aus dem Hauptspeicher wieder ausgelesenen Bitmuster mit Soll-Bitmustern vergleicht, anderenfalls der Cache-Speicher vom Hauptspeicher getrennt ist und für die Aufnahme von temporären Daten, insbesondere Programmdaten, zur Verfügung steht, wobei die Größe des Cache-Speichers kleiner ist als der zu testende Bereich des Hauptspeichers.
-
Die Verwendung eines Cache-Speichers als Zwischenspeicher mit schnellen Zugriffszeiten ermöglicht eine Beschleunigung von Speichertests des Hauptspeichers. Vorzugsweise kann dabei der Cache-Speicher auf dem Prozessorchip selbst integriert sein.
-
Weitere Vorteile, Merkmale und Einzelheiten der Erfindung werden im Folgenden anhand von Ausführungsbeispielen unter Bezugnahme auf Zeichnungen näher beschrieben. Dabei zeigen:
-
1 schematisch ein Blockschaltbild einer Ausführungsform einer Vorrichtung zum Prüfen eines Hauptspeichers, und
-
2 schematisch ein Ablaufdiagramm eines Speichertests für den Hauptspeicher.
-
Einander entsprechende Teile sind in allen Figuren mit den gleichen Bezugszeichen versehen.
-
1 zeigt schematisch ein Blockschaltbild einer Ausführungsform einer Vorrichtung zum Prüfen eines Hauptspeichers 3 eines Prozessors 1. Bei dem Prozessor 1 kann es sich um einen Mikroprozessor handeln, dessen Komponenten auf einem Mikrochip angeordnet sind (nicht näher dargestellt).
-
Zwischen dem Prozessor 1 und dem Hauptspeicher 3 ist ein Cache-Speicher 2 als Zwischenspeicher oder Pufferspeicher angeordnet. Der Prozessor 1 ist in herkömmlicher Art und Weise über Daten-, Adress-, Fehler- und Steuerleitungen 4 mit dem Cache-Speicher 2 und dieser mit dem Hauptspeicher 3 verbunden.
-
Dabei greift der Prozessor 1 zum Prüfen des Hauptspeichers 3 unter Zwischenschaltung des Cache-Speichers 2 auf den Hauptspeicher 3 zu. Der Zugriff auf den Hauptspeicher 3 über den Cache-Speicher 2 erfolgt nur während des Speichertests, anderenfalls ist der Cache-Speicher 2 vom Hauptspeicher 3 getrennt (angedeutet durch die gestrichelte Linie 4).
-
Der Hauptspeicher 3 ist ein herkömmlicher großer Arbeitsspeicher des Prozessors 1. Der Zugriff auf den Hauptspeicher 3 erfolgt beispielsweise über 8-Bit- und/oder 16-Bit-Adresskanäle oder -leitungen. Der Hauptspeicher 3 umfasst dabei Gruppen von Speicherelementen, die zu einer Speicherzelle 3.1 bis 3.z (= kleinste adressierbare Einheit) zusammengefasst sind. Jede Speicherzelle 3.1 bis 3.z umfasst 8 Bit (= 1 Byte). Mehrere Speicherzellen 3.1 bis 3.z, z. B. 4 oder 8 Speicherzellen 3.1 bis 3.z können zu einem 32-Bit- bzw. 64-Bit-Speicherwort, einem Speicherblock, einer Speicherseite und/oder einer Speicherbank zusammengefasst werden. Hierdurch ist eine einfache Adressierung von insbesondere aufeinander folgenden, gleichgroßen und voneinander unabhängigen Bereichen des Hauptspeichers 3 möglich.
-
Der Cache-Speicher 2 ist ein schneller Zwischen- oder Pufferspeicher, der zwischen Registerspeichern R des Prozessors 1 und dem Hauptspeicher 3 angeordnet ist. Im dargestellten Ausführungsbeispiel ist der Cache-Speicher 2 außerhalb des Prozessors 1 und somit nicht auf dem Prozessorchip angeordnet. Alternativ kann der Cache-Speicher 2 auch auf dem Prozessorchip angeordnet sein (nicht dargestellt).
-
Der Cache-Speicher 2 weist eine gegenüber dem Hauptspeicher 3 kleinere Speicherkapazität beispielsweise im Kilo- oder Megabyte-Bereich, z. B. 1 MByte, mit kürzesten Zugriffszeiten im Nanosekundenbereich auf, wohingegen die Speicherkapazität des Hauptspeichers 3 im Mega-, Giga- oder Tetrabyte-Bereich, z. B. 512 MByte, mit niedrigen Zugriffszeiten im Millisekundenbereich liegt.
-
Der Cache-Speicher 2 weist analog zum Hauptspeicher 3 mehrere Speicherzellen 2.1 bis 2.n auf, die nach Vorgaben entsprechend in Worten, Gruppen und/oder Blöcken zusammengefasst oder segmentiert werden, die voneinander unabhängige Adressbereiche darstellen. Der Cache-Speicher 2 dient der Speicherung von aktuell verwendeten Daten und/oder Variablen, insbesondere von dynamischen Programmvariablen, wie Adressdaten.
-
Darüber hinaus weist die Vorrichtung mindestens einen weiteren Cache-Speicher 5 mit einer Anzahl von Speicherzellen 5.1 bis 5.m auf. Der weitere Cache-Speicher 5 dient der Speicherung des Programmcodes. Dabei ist dem Cache-Speicher 5 ein Lesespeicher 7, z. B. ein ROM-Speicher (ROM = read-only-memory), nachgeschaltet, in welchem der Programmcode gespeichert ist.
-
2 zeigt schematisch ein Ablaufdiagramm eines Speichertests T für den Hauptspeicher 3.
-
Im Allgemeinen wird der Hauptspeicher 3 regelmäßig geprüft. Vorzugsweise wird ein Speichertest T vor dem Start des Betriebssystems ausgeführt.
-
Gegenüber herkömmlichen Testverfahren wird beim erfindungsgemäßen Verfahren vom Prozessor 1 nicht direkt auf den Hauptspeicher 3 zugegriffen, sondern über den Cache-Speicher 2. Dabei wird der Zugriff vom Prozessor 1 derart ausgeführt, dass zumindest ein Bitmuster BM in den Cache-Speicher 2 und über diesen in den Hauptspeicher 3 geschrieben und aus diesem wieder ausgelesen wird. Anschließend wird das aus dem Hauptspeicher 3 wieder ausgelesene Bitmuster BM mit erzeugten Soll-Bitmuster verglichen. Bei Ungleichheit der beiden Bitmuster wird auf einen Fehler des Hauptspeichers 3 oder einen Übertragungsfehler geschlossen.
-
Zweckmäßigerweise wird als Bitmuster BM ein Muster mit Nullen und/oder Einsen in einer vorgegebenen Länge, z. B. 8-Bit-, 16-Bit-, 32-Bit-Länge, erzeugt. Beispielsweise werden als Bitmuster BM Adressdaten verwendet.
-
Beim Prüfverfahren werden ein oder mehrere der Speicherzellen 3.1 bis 3.z des Hauptspeichers 3 mehrfach, insbesondere zyklisch getestet.
-
Im Detail kann bei Aktivieren des Speichertests T und vor Durchführung des Speichertests T in einem ersten Schritt S1 optional ein Test von Adressleitungen und/oder Datenleitungen in herkömmlicher Art und Weise über einen Direktzugriff und somit ohne Zwischenspeicher durchgeführt werden (gestrichelt dargestellt). Beim optionalen Test der Adress- und/oder Datenleitungen werden bestimmte Adressen anhand von erzeugten Bitmustern getestet, um Fertigungsfehler, insbesondere Leitungsunterbrechungen und/oder -kurzschlüsse, zu identifizieren. Erst wenn der zuvor ausgeführte Test der Adress- und/oder Datenleitungen fehlerfrei ausgeführt worden ist, wird der eigentliche Speichertest T gestartet und ausgeführt.
-
Im Schritt S2 wird der Programmcode für den Speichertest T, beispielsweise ein Programmtest mit Prüfen von Schreib- und/oder Leseoperationen, aufgerufen. Der Aufruf des Programmcodes erfolgt bevorzugt im Hauptprogramm.
-
Vor dem Zugriff des Prozessors 1 auf den Cache-Speicher 2 zum Testen des Hauptspeichers 3 wird eine momentan ablaufende Hochlaufsequenz unterbrochen.
-
Optional oder zusätzlich werden in einem Schritt S2.1 temporäre und nicht zutestende, aber für den Speichertest T erforderliche Daten, wie z. B. temporäre Programmvariablen, -daten, in einem der Register 6 und/oder Registerspeichern R zwischengespeichert. Die Registerspeicher R sind beispielsweise momentan unbenutzte Register des Prozessors 1. Alternativ können die Registerspeicher R und/oder weitere Register 6 auch außerhalb des Prozessors 1 angeordnet sein.
-
In einem dritten Schritt S3 wird dann der Zugriff auf den Cache-Speicher 2 zum Testen des Hauptspeichers 3 aktiviert. Dabei kann es zu ungültigen Daten, insbesondere von temporären Programmdaten, kommen.
-
Im Detail wird die im Prozessor 1 implementierte Testroutine aktiviert, mittels welcher zu testende Schreib- und/oder Leseoperationen, wie Befehle, Abfragen, nicht direkt auf den Hauptspeicher 3, sondern auf den Cache-Speicher 2 ausgeführt werden. Dabei ist die Testroutine beispielsweise in einer Maschinensprache (assembly language) oder einer höheren Programmiersprache unter Verwendung eines optimierenden Compilers geschrieben, um temporäre Daten in Registern anstelle des Stacks im Cache-Speicher 2 oder im Hauptspeicher 3 zu halten und zu speichern.
-
Im Schritt S4 wird dann der Speichertest T entsprechend der implementierten Testroutine ausgeführt. Mittels des Speichertests T werden Zugriffe auf die Speicherzellen 2.1 bis 2.n des betreffenden Cache-Speichers 2 hinsichtlich Art, Häufigkeit und/oder Umfang definiert und gesteuert. Als Art des Zugriffs werden beispielsweise Lese- oder Schreiboperationen definiert und gesteuert. Als Umfang wird beispielsweise die Anzahl von zu testenden Speicherzellen 3.1 bis 3.m und/oder Speicherblöcken des Hauptspeichers 3 vorgegeben.
-
Im Detail werden in einer ersten Schleife eine der Größe des zu testenden Bereichs des Hauptspeichers 3 entsprechende Anzahl von Bitmuster BM in den Cache-Speicher 2 geschrieben. Dabei ist der Cache-Speicher 2 kleiner als der zu testende Bereich des Hauptspeichers 3, so dass der Cache-Speicher 2 beim Ausführen des Speichertests T mit Bitmustern BM überschrieben und Bitmuster BM in den zu testenden Bereich des Hauptspeichers 3 geschrieben werden. In einer zweiten Schleife werden dann die Bitmuster BM des zu testenden Bereichs des Hauptspeichers 3 über den Cache-Speicher 2 wieder ausgelesen und mit Soll-Bitmustern verglichen.
-
Beispielsweise werden block-, wort- und/oder zellenweise Bitmuster BM in vorgegebene Speicherzellen 2.1 bis 2.n des Cache-Speichers 2 und von diesen in korrespondierende Speicherzellen 3.1 bis 3.z des Hauptspeichers 3 geschrieben und aus diesem über den Cache-Speicher 2 wieder ausgelesen und mit Soll-Bitmustern verglichen. Das Ergebnis des Vergleichs wird zwischengespeichert, beispielsweise in einem vorgegebenen weiteren Register 6 und/oder Registerspeichern R des Prozessors 1.
-
Im Schritt S5 wird nach Beendigung der Testroutine für den Speichertest T dann optional der Zugriff auf den Hauptspeicher 3 über den Cache-Speicher 2 deaktiviert.
-
Im Schritt S6 wird das gespeicherte Ergebnis des Vergleichs der aus dem Hauptspeicher 3 ausgelesenen Bitmuster BM mit den Soll-Bitmustern geprüft. Das Ergebnis des Vergleichs ist dazu in das Register 6 und/oder einen der Registerspeicher R des Prozessors 1 geschrieben worden, so dass dieses von einer im Prozessor 1 implementieren Analyseroutine ausgewertet werden können.
-
Im Schritt S7 werden dann die im Schritt S3 und optional im Schritt S2.1 zwischengespeicherten temporären Daten wieder ausgelesen und die ursprüngliche Hochlaufsequenz des Prozessors 1 wieder gestartet bzw. initialisiert, d. h. die vor dem Ausführen des Speichertests T unterbrochene Hochlaufsequenz wird erneut gestartet oder optional fortgesetzt.
-
Der Speichertest T kann mehrfach, beispielsweise zyklisch wiederholt oder ereignisgesteuert gestartet werden. Insbesondere wird der Speichertest T vor dem Start des Betriebssystems ausgeführt. Auch können weitere Schritte implementiert werden.
-
Der Speichertest T ist insbesondere als Programmcode oder Testroutine im Hauptprogramm des Prozessors 1 implementiert. Alternativ kann der Programmcode des Speichertests T als Unterprogramm implementiert sein. In diesem Fall werden nachfolgende Programme ausschließlich als Unterprogramm aufgerufen, da infolge des Speichertests T mittels des Cache-Speichers 2 temporäre Daten, insbesondere Adressdaten im Cache-Speicher 2 verlorengegangen sein können. Um einen sicheren Programmablauf zu ermöglichen, werden daher alle weiteren Programme als Unterprogramm aufgerufen.
-
Mittels des erfindungsgemäßen Verfahrens zum Prüfen des Hauptspeichers 3 über den Zugriff auf den Cache-Speicher 2 können alle Speicherzellen 3.1 bis 3.z des Hauptspeichers individuell getestet werden. Durch die Verwendung von Cache-Speichern 2 ist der Speichertest T signifikant beschleunigt.