Frage

Gibt es eine Möglichkeit, den CPU -Cache -Inhalt zu lesen? Architektur ist für Arm.

Ich mache eine Reihe von Adressen ungültig und möchte dann sicherstellen, ob es ungültig ist oder nicht. Obwohl ich den Bereich der Adressen mit und ohne die Ungültigmachung lesen und schreiben kann, möchte ich wissen, ob es möglich ist, den Cache -Inhalt zu lesen

Vielen Dank!!

War es hilfreich?

Lösung

ARM9 bietet Cache -Manipulations- und Testregister, mit denen Sie den Zustand des Cache untersuchen können. Hier ist ein vernünftiger Ausgangspunkt:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0151c/chdcfejb.html

Der Icache und DCache werden unter Verwendung von MCR- und MRC -Anweisungen an CP15 -Register 7 und 9 beibehalten, definiert durch das Modell des ARM V4T -Programmierers. Zusätzliche Vorgänge sind mit MCR und MRC bis CP15 Register 15 verfügbar. Diese Vorgänge werden mit den Registern 7 und 9 kombiniert, um das Testen der Caches vollständig in der Software zu ermöglichen.

Dies sind privilegierte Anweisungen, sodass sie auf Ihrer Zielplattform möglicherweise nicht zugänglich sind.

Ich würde mit einem einfachen Programm beginnen, das den Status aller Cache -Zeilen entleert. So sollten Sie genügend Informationen geben, um die Daten im Cache zu lesen, indem Sie einfach die Speicherorte lesen, die die Cache -Tags bereitstellen.

Andere Tipps

Ich zögere zu schreiben, es ist unmöglich, also schreibe ich, es ist extrem schwer. Es gibt wahrscheinlich keine generische Antwort. Angesichts der Tatsache, dass CPU -Cache transparent funktioniert, ist es nicht möglich, seinen Inhalt von angehängten CPU zu lesen, ohne den Cache -Inhalt zu ändern. CPU -Caches werden normalerweise als CAM implementiert (inhaltsadressierbarer Speicher, assoziativer Speicher) Wenn CPU versucht, auf Daten zuzugreifen, wird der Cache nachgeschlagen. Wenn Daten nicht vorhanden sind, werden sie aus dem Speicher abgerufen, aber ich befürchte, dieser Prozess ist für die CPU transparent .

Die Option besteht darin, eine Art HW -Beobachtungsmodul und ein Schnupfen im Systembus zu verwenden, der Cache mit RAM verbindet. Wenn die Datenanforderung im Bus angezeigt würde, waren die angeforderten Daten nicht im Cache.

Ich hoffe, jemand mit tieferem HW -Wissen wird ein Licht werfen.

Es gibt einen Eintrag in Wikipedia über die CPU -Caching:http://en.wikipedia.org/wiki/cpu_cache

Per Definition müssen Sie nur einen Cache -Inhalt lesen, um den Speicherort zu laden, der vom Cache gespeichert wird. Wenn der Cache ordnungsgemäß funktioniert, würde er den Inhalt aus dem Cache extrahieren.

Wenn Sie jedoch versuchen, den Inhalt des I-Cache zu lesen, ist dies architektonisch abhängig. Außerdem müssen Sie Rennbedingungen berücksichtigen. Die Anweisung zum Lesen eines Cache-Inhalts kann versehentlich den Cache-Inhalt selbst überschreiben.

Wie angegeben in Dieser Thread, Wenn Sie die CPU einfach verwenden, kann sich der Cache -Inhalt ändern. Da (die meisten) Cache -Implementierungen absichtlich vollständig transparent für die CPU sind, können Sie den Inhalt des Cache nicht direkt aus der Software anzeigen, die auf herkömmlichen CPUs ausgeführt wird.

So etwas wie dieses zu tun, würde entweder eine CPU-bewusstes CPU erfordern (mit speziellen Anweisungen zur Steuerung des Cache; ich habe keine Ahnung, ob diese wirklich vorhanden sind), oder Sie müssten ein separates HW-Modul installieren, um den Cache anzuzeigen. Hier sind 2 Ideen, die ich dafür habe:

  1. Ersetzen Sie Ihren ursprünglichen Cache -Controller durch eine zusätzliche Steuerfunktionen und können mit dem Systembus angeschlossen werden, um Daten zu lesen. Dieser Controller sitzt "zwischen" der CPU und dem Cache ".

  2. Platzieren Sie ein sekundäres Modul parallel zum ursprünglichen Cache mit schreibgeschütztem Cache-Zugriff. Mit einer speziellen Interrupt -Linie (oder einem ähnlichen Hardware -NOT -Software -Signal) kann die CPU dann einen Dump des Cache in den Speicher dieses Moduls auslösen und später zurücklesen (über einen Bus). Dieser Controller würde den Betrieb Ihres Cache nicht beeinflussen. Es würde Ihnen einfach ermöglichen, zu jeder Zeit Schnappschüsse zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top