Was ist der Unterschied zwischen Anweisungscache und Datencache? Erklären Sie mit einem einfachen Beispiel.


Antwort 1:

Es ist sehr einfach.

Nachdem alle Decodierungen durchgeführt wurden, alle Übersetzungen vorgenommen wurden, wurde dann jede andere Verarbeitung von Anweisungen durchgeführt

Die CPU empfängt Bitfolgen.

Jede bestimmte Zeichenfolge enthält die Informationen von,

  • Welche Operation muss ausgeführt werden und welche Daten müssen ausgeführt werden?

Angenommen, Sie möchten zwei Zahlen x und y hinzufügen. Sie haben eine Anweisung als x + = y geschrieben.

Nach all den Konvertierungen von der hohen zur niedrigsten Ebene erhalten wir eine Zeichenfolge wie xxxxyyyyzzzzzzzz (wobei x, y, z Binärbits sind).

Diese Zeichenfolge enthält x, einen Code für die auszuführende Operation. Wir haben auch y und z, sie sind die Werte, die addiert werden müssen.

So erhalten wir eine Bedienungsanleitung und die erforderlichen Werte.

Beide werden aus dem mm erhalten. Wie Sie wissen, versuchen wir immer, die Suchzeit zu verkürzen, egal ob mm oder hdd. Somit pflegen wir den Cache.

Der Cache speichert die Dinge, die möglicherweise erneut benötigt werden.

Da wir auch die Betriebsanweisungen dekodieren mussten, behalten wir ihre dekodierten Versionen im Cache, um sie in Zukunft schnell nachschlagen zu können.

Wir haben einen separaten Cache für Anweisungen und Daten, um mögliche Verwechslungen zwischen ihnen darüber zu vermeiden, welche welche sind.

Angenommen, Sie führen eine Schleife aus.

{

für (i = 0; i <500; i ++)

cout <

}}

Wie Sie sehen können, iteriert die Schleife i. Daher ist es sinnvoll, den i ++ - Befehl im Cache zu speichern, um schneller darauf zugreifen und ihn somit schneller ausführen zu können.

Somit wird diese Anweisung, die zwei Teile enthält, in einem separaten Cache gespeichert. Der Teil, der die Anweisung der Iterationsoperation enthält, wird im Anweisungscache gespeichert. Die Variable i wird im Datencache gespeichert.


Antwort 2:

Ein Programm, das auf einem Prozessor ausgeführt wird, muss die Folge von Anweisungen (oder Code / Programm) aus dem Speicher abrufen. Gleichzeitig muss der Code / Befehl möglicherweise auf Daten von verschiedenen Speicherorten zugreifen.

Nehmen wir zum Beispiel an, ein Programm liest einen Speicherort und schreibt ihn an einen anderen Ort (ein Kopierprogramm wie unten).

Laden Sie reg0, memA

Speichern Sie reg0, memB

Es gibt zwei Befehle (Laden, Speichern), die aus dem Befehlsspeicher abgerufen werden müssen, und der Inhalt memA muss zuerst gelesen und dann in memB geschrieben werden

Der Anweisungscache ruft alle Anweisungen (in diesem Fall Laden, Speichern) vorab ab und speichert sie im Anweisungscache, während der Datencache die Speicherorte vorab abruft, auf die zugegriffen wird (wie memA).

Der Vorteil eines separaten Caches anstelle eines einzelnen Caches besteht darin, dass sowohl das Abrufen als auch das Dekodieren von Befehlen getrennt von der Ausführung zum Laden / Speichern erfolgen können.