Was sind CPU-Register?


27

Diese Frage beschäftigt mich schon seit einiger Zeit und heute habe ich mir gedacht, ich würde sie googeln. Ich habe einiges darüber gelesen und es schien sehr ähnlich zu dem, was ich immer als Prozessor- Cache bezeichnet habe .

Gibt es einen Unterschied zwischen den beiden oder habe ich recht, wenn ich denke, dass sie gleich sind? Muss sich ein Register tatsächlich in einer CPU befinden, damit es funktioniert?

Ein Register ist laut Wikipedia ein Ort in der CPU, an dem schnell auf den Speicher zugegriffen und dieser geändert werden kann, bevor er wieder in den Arbeitsspeicher zurückgeschickt wird. Habe ich das falsch verstanden oder sind Cache und Register tatsächlich gleich?


13
Ein CPU-Register ist eine Organisation, die Ihre CPU für Sie verwaltet. Der NSA ist ein Beispiel für ein CPU-Register.
Jimmy Hoffa

3
CPU-Level-1-Cache besteht häufig aus der gleichen Art von Siliziummaterial wie Register. Dies ist nicht ganz so schnell, da zusätzliche Suchvorgänge erforderlich sind, um zwischengespeicherte Adressen Cache-Speicherorten zuzuordnen. Aber Register und Cache sind definitiv verschiedene Stellen auf den Chips.
Zan Lynx

3
@ JimmyHoffa: Ich befürchte, dass Ihr Kommentar für OP sehr verwirrend sein wird, zum Nachteil der Informatikkenntnisse.
Rwong

3
@rwong Nein, ich habe es verstanden, ich fand es ziemlich lustig. : P
Jeroen

1
Ein weiterer Unterschied ist die Größe: Eine Registerdatei ist selten größer als ein paar Hundert Wörter, während der L1-Cache leicht bis zu 64 KB groß sein kann.
SK-logic

Antworten:


61

Sie sind nicht ganz dasselbe. Die Register sind die Stellen, an denen sich die Werte befinden, an denen die CPU tatsächlich arbeitet. Das CPU-Design ist so ausgelegt, dass es einen Wert nur dann tatsächlich ändern oder anderweitig bearbeiten kann, wenn er sich in einem Register befindet. Register können also logisch arbeiten, während der Speicher (einschließlich Cache) nur Werte enthalten kann, aus denen die CPU liest und in die sie schreibt.

Stellen Sie sich einen Tischler bei der Arbeit vor. Er hat ein paar Gegenstände in den Händen (Register) und dann ganz in der Nähe auf seiner Werkbank (Cache) Dinge, an denen er häufig arbeitet, die er aber gerade nicht nutzt, und dann in der Werkstatt (Hauptspeicher) Dinge, die sich beziehen das Projekt zur Hand, aber das sind nicht sofort wichtig genug, um auf der Werkbank zu sein.

EDIT: Hier ist eine einfache Erklärung, wie die Registerlogik funktioniert.

Stellen wir uns vor, wir haben vier Register mit dem Namen R1..R4. Wenn Sie eine Anweisung kompilieren, die so aussieht:

x = y + z * 3;

Der Compiler würde Maschinencode ausgeben, der (im zerlegten Zustand) ungefähr so ​​aussieht:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Da die meisten modernen CPUs Register mit einer Breite von 32 oder 64 Bit haben, können sie mit jedem Wert bis zu der Größe rechnen, die sie aufnehmen können. Sie benötigen keine speziellen Register für kleinere Werte. Sie verwenden lediglich spezielle ASM-Anweisungen, die festlegen, dass nur ein Teil des Registers verwendet werden soll. Und genau wie beim Tischler mit nur zwei Händen können Register nur eine kleine Datenmenge auf einmal speichern, aber sie können wiederverwendet werden, indem aktive Daten ein- und ausgelesen werden, was bedeutet, dass "viele Register" dies nicht tun am Ende gebraucht werden. (Wenn eine Menge verfügbar ist, können Compiler natürlich schnelleren Code generieren, dies ist jedoch nicht unbedingt erforderlich.)


26
Und noch mehr Sachen im Lagerhaus in der ganzen Stadt (Festplatte) und andere Sachen, in denen er Fedex haben kann (Netzwerk) :-)
Dan Pichelman

2
Hängt sehr stark von der jeweiligen Systemarchitektur ab.
Weltingenieur

5
@Binero In einem 16-Bit-x86-Prozessor haben Sie die Register Axe, Bx usw. Wenn sie auf 32-Bit-Prozessoren umsteigen, erweitern sie die Register auf 32-Bit-EAx, EBx. Wenn Sie auf Ax zugreifen, erhalten Sie die niedrigen 16-Bit-EAx. Im 64-Bit-Modus nannten sie die Register RAx, wobei die unteren 32 Bits EAx und die unteren 16 Bits immer noch Ax sind. In diesen Diagrammen sehen Sie, wie Sie zu anderen Teilen von Bytes wie AH gelangen, um das High-Byte des 16-Bit-Ax-Registers zu erhalten: en.wikipedia.org/wiki/X86#Structure
stonemetal

2
Und in modernen CPUs bricht dies ebenfalls zusammen, da die Register lediglich temporäre Zuordnungen zu einer Kernbank von Really Fast Memory sind, die sich abhängig vom Befehlsstrom und davon, wie stark er dem vorhergesagten Befehlsstrom folgt, ändern.
Vatine

2
@ MasonWheeler Eine gute Wahl für Sie.
Vatine

3

Tatsächlich ist ein Register in der CPU-Terminologie klein. Benannter Speicherblock Innerhalb eines Mikroprozessors (CPU) sind Register mit bestimmten Namen, Größen und Funktionen verfügbar, die von Prozessor zu Prozessor variieren. Beispiel: Der 8085-Mikroprozessor ist ein 8-Bit-Prozessor mit 8 Bit -Bit-Register (A: Akkumulator-, B-, C-, D-, E-, H- und L-Register und ein Flag-Register sind alle 8-Bit). Zwei 16-Bit-Register PC und SP haben alle eine spezielle Funktion, und Funktionen werden bei der Montageprogrammierung angezeigt. Nur wenige Register können vom Programmierer gesteuert werden.

Wenn Sie einen anderen Prozessor verwenden, variieren die Register. Nehmen wir an, 8086 ist ein 16-Bit-Prozessor und hat AX, BX, CX und DX, alle sind 16-Bit-, PC-, SP- und Flag-Register.

Wie Sie in der Frage zitiert haben, sollen sie die Programmausführung beschleunigen und als Prozessor-Cache fungieren, aber jetzt hat sich die Prozessorarchitektur geändert und sie (Intel) fügen viel Speicher hinzu, der den Prozessor-Cache aufruft

Es gibt jedoch einen kleinen Unterschied zwischen Prozessor- (CPU) -Cache- und Prozessor- (CPU) -Registern, die tatsächlich für einige spezielle Aktivitäten wie Speicherzeiger, Programmstatus usw. benötigt werden. Beispiel: PC: Programmzähler, der einen Speicherzeiger im Programmspeicher darstellt. SP: Stapelzeiger, der einen Speicherzeiger im Stapelspeicher darstellt. und Akku ist Puffer und Hauptregister für den Zugriff auf ALU für Arithmetic Ops ...

Sie können Mason Wheeler Erklärung für Exaples sehen


1

Ich denke, es hilft zu denken, dass Register kein Gedächtnis sind und nicht als solches gedacht werden sollten.

Denken Sie eher an OO - Register ist eine Klasse, die nicht aus dem Speicher stammt, und Memory ist eine Klasse, die nicht aus dem Register stammt, aber die Register-Klasse verfügt über Methoden (Maschinen-Operationscodes), um ihre Daten in und aus dem Speicher zu konvertieren. Der Speicher hingegen weiß nichts über Register und kann keine Aktionen für diese aufrufen. Infolgedessen werden alle CPU-Operationen von Registern ausgeführt, die häufig auf den Speicher zugreifen.

Es ist nicht ungewöhnlich, dass nur Register geschrieben werden - kaum ein Attribut des Speichers. Es ist auch möglich, dass sich ein Registerwert ändert, ohne dass in ihn geschrieben wird - wiederum nicht das Verhalten, das Sie von Speicher erwarten.


In der speicherabgebildeten E / A sind schreibgeschützte Bereiche des "Speichers" nicht so ungewöhnlich.
SK-logic

@ SK-logic - Richtig - aber im Kontext der gestellten Frage sieht das OP das Gedächtnis als etwas, aus dem Sie lesen und in das Sie schreiben. Keine Notwendigkeit, ihn mehr zu verwirren :)
Mattnz

0

Die Antwort von @Mason Wheeler war korrekt, aber ich denke, es ist möglich, Ihre Frage aus einer anderen Perspektive zu betrachten. Ihrer Frage nach zu urteilen, scheint es mir das Konzept zu sein, das Sie benötigen, um den Unterschied zwischen einem Cache und einem Register im Datenpfad perfekt zu verstehen . Wie Mason richtig ausgeführt hat, ist die Logik der CPU (dh ihr Datenpfad) so ausgelegt, dass die Speicherinformationen nicht direkt von der CPU verarbeitet werden können, weshalb die Register vorhanden sind. Tatsächlich ist die CPU nicht einmal in der Lage, den aktuellen Befehl des Programms, das sie ausführt, zu decodieren, wenn dieser Befehl nicht zuerst in das richtige Register geladen wurde (normalerweise das mit IR bezeichnete "Befehlsregister").

Dies hängt mit der Verdrahtung der CPU zusammen. Es gibt keinen physischen Pfad zwischen dem Speicher und der ALU. Alle an die ALU gelieferten Daten müssen irgendwie in einem Register zwischengespeichert werden. Es könnte anders sein, aber die Schaltung, die erforderlich ist, um den Speicher direkt mit der ALU zu verbinden, wäre zu komplex: Es ist einfacher und effizienter, die gesamte Kommunikation zwischen dem Speicher und der ALU über die Registerdatei zu vermitteln , wie durch den oben genannten Datenpfad bestimmt . Selbst wenn ein gegebener Befehl eine Speicherposition als einen Operanden spezifiziert (ein Adressierungsmodus, der als direkte Adressierung bekannt ist ), wird die entsprechende Dateneinheit in ein Register geladen, das als MBR (Memory Buffer Register, manchmal als MDR, Memory Data Buffer bezeichnet) bekannt ist ).

Beachten Sie, dass es aus Sicht der CPU nicht wirklich wichtig ist, ob die Informationen (Daten oder Code) aus dem Hauptspeicher oder dem Cache stammen, letzterer ist jedoch viel schneller. Caches existieren aus Performancegründen, Register existieren aufgrund des CPU-Designs (dh aufgrund des Datenpfads). Clevere Programmierer (eigentlich clevere Compiler) versuchen, die Verwendung von Registern zu maximieren, um Speicherzugriffe zu minimieren (Register sind schneller als Cache oder Speicher). Dies ist gerechtfertigt, da in Registern gespeicherte Informationen in der Regel mehrfach verwendet werden und dies in der Tat eines der Prinzipien der RISC-Philosophie ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.