Wie groß ist die Wortgröße eines RAM in einer 32/64-Bit-Maschine (Prozessor)

Wie groß ist die Wortgröße eines RAM in einer 32/64-Bit-Maschine (Prozessor)

Wie groß ist die Wortgröße eines RAM in einer 32/64-Bit-Maschine (Prozessor)?

Diese Frage macht mich verrückt. Wie groß ist das Wort genau, das die Daten im RAM selbst auf 64-Bit-Maschinen wie Intel Core i5-Mikroprozessoren speichert?

Ändert sich außerdem die Wortgröße, die die Daten enthält, von 32 Bit auf 64 Bit?

Antwort1

Traditionell war ein „Wort“ in Computerarchitekturen im Allgemeinen die kleinste adressierbare Speichereinheit. Und traditionell entsprach dies der allgemeinen Registergröße der Maschine.

Seitdem die Byte-Adressierung jedoch populär wurde, wurde das Konzept verwässert. (Das ist wahrscheinlich dem IBM System/360 und dem PDP-11 auf der Minicomputer-Seite zu verdanken.)

In Bezug auf die Speicheradressierung, wie sie durch die CPU-Architektur definiert wird – also wie Programmierer die Maschine sehen – existiert das Konzept „Wort“ auf x86/x64 nicht, es sei denn, Sie betrachten es als Synonym zu Bytes. Jedes Speicherbyte hat seine eigene Adresse, und die Adresse eines Bytes ist auch die Adresse jedes größeren Bereichs, der bei diesem Byte beginnt (und sich bis zu Adressen mit höheren Nummern erstreckt). Wir können natürlich ein, zwei, vier oder (auf x64) acht Bytes gleichzeitig zwischen Register und RAM verschieben – oder mit den REP-Anweisungen sogar noch viel mehr von Speicher zu Speicher –, aber die Adresse, die wir behaupten, ist immer noch die eines Bytes. Wir können Arithmetik mit Wörtern all dieser Größen durchführen. (Und anderen.)

Wenn Sie in Registern denken, wird normalerweise angenommen, dass die „Wortgröße“ einer Maschine der ihrer Allzweckregister entspricht. Dies wären 32 Bit bei x86 und 64 Bit bei x64. Bei den meisten Architekturen ist die GPR-Größe die Größe der größten Ganzzahl, mit der die CPU einfache Arithmetik mit einem einzigen Befehl ausführen kann.

Jetzt lasst uns noch mehr Verwirrung stiften...!

Was die Plattform (Motherboard, RAM-Module und Chips usw.) betrifft, wird RAM auf allen Maschinen, die „Standard“-CPUs und -Chipsätze von Intel und AMD verwenden, in 64-Bit-Blöcken adressiert – man könnte sie wohl Wörter nennen. Das konnte man bei früheren Prozessoren, die separate Pins für Adresse und Daten hatten, sehr deutlich sehen: Der niederwertigste Adresspin heißt A3, nicht A0! Die physischen Adressbits A0, A1 und A2 verlassen den Prozessor nie. Aber Programmierer sehen solche Adressen nie.

Und schließlich gibt es das Konzept einer „Cache-Zeile“. Eine Cache-Zeile ist ein physisch zusammenhängender RAM-Block, der einen Eintrag im L1/L2/L3-Cache belegt. Cache-Zeilen in der Intel/AMD-Welt sind seit einiger Zeit 64 Byte breit. Wenn Sie also auf eine Speicheradresse zugreifen, die sich derzeit nicht in Ihrem Cache befindet, holt die CPUachtdieser 8-Byte-Blöcke RAM. Anders ausgedrückt: Die im Cache gespeicherten Adressen lassen die sechs niederwertigen Bits weg. Vielleicht ein Wortim Cachesind in Wirklichkeit 64 Bytes oder 512 Bits! (Aber Speicherzugriffe, die den Cache umgehen, können trotzdem nur 8 Bytes gleichzeitig lesen oder schreiben; in physischen Adressbereichen, die von speicherabgebildeten E/A-Geräten dekodiert werden, können einzelne Bytes adressierbar sein; das hängt vom Bus ab. Und natürlich können wir keine Arithmetik mit 512-Bit-Ganzzahlen durchführen.)

In von Microsoft C abgeleiteten Programmierumgebungen ist ein „Wort“ 16 Bit lang – das war schon lange vor Microsoft so, und der Name und die Definition des Datentyps wurden aus Kompatibilitätsgründen in die 32- und 64-Bit-Umgebungen übernommen. Ein „Doppelwort“ (oder DWORD oder LONG für „Langwort“, ein Begriff, der auf dem VAX üblich war) ist 32 Bit lang. 64-Bit-Ganzzahlen werden in der Architektur „Quadwörter“ genannt, haben in C jedoch normalerweise spezifischere Namen, wie UINT64 (64-Bit-Ganzzahl, vorzeichenlos).

Es hängt also davon ab, wo Sie sich im System befinden und was Sie sich ansehen. Heutzutage denken wir normalerweise überhaupt nicht an „Wortgröße“, sondern eher an „GPR-Größe“.

Antwort2

Ich bin nicht mit den grausamen Details vertraut, wie RAM heutzutage mit Intel-CPUs funktioniert, angesichts neuerer Dinge wie Cache-Kohärenz und NUMA, aber aus Sicht des RAM sind es meiner Meinung nach immer noch 8-Bit-Bytes, obwohl RAM jetzt üblicherweise in Kanälen angeordnet ist, in denen auf mehrere Steckplätze gleichzeitig zugegriffen werden kann. Das gleichzeitige Erfassen von 4 Bytes (bei angenommenen 4 Steckplätzen) dauert also genauso lange wie das Erfassen von 1 Byte auf einem solchen System. Trotzdem akzeptiert der RAM eine Adresse vom Speichercontroller als Eingabe und gibt sie meines Wissens nach als 8 Bits als Ausgabe zurück.

Die „Wort“-Größe kann verschiedene Dinge bedeuten. Ich erinnere mich, dass ich diesen Begriff zum ersten Mal beim Studium der Assemblersprache 68000 begegnet bin – in dem Text, den ich las, bedeutete „Byte“ 8 Bit und „Wort“ 16 Bit, und „wortausgerichtet“ bedeutete eine Adresse, die auf eine 16-Bit-Grenze fiel. Ich weiß, dass der Begriff „Wort“ vor der Einführung des 68000 (1980?) verwendet wurde und früher möglicherweise synonym zu „Byte“ war.

Die „nativen“ Daten, mit denen die CPU „bevorzugt“ umgeht, entsprechen der „Bitanzahl“ ihrer Architektur und dem Modus, in dem sie ausgeführt wird. Eine 32-Bit-CPU (oder eine 64-Bit-CPU, die sich nicht im „Long Mode“ befindet) hat 32-Bit-Register, eine Reihe von Anweisungen zum Laden von Werten aus dem RAM (4 Bytes) in diese Register und andere Dinge. Aber bei Intel kann ein 32-Bit-Register wie EAX auch als zwei Register AH (die oberen 16 Bits von EAX) und AL (die unteren 16 Bits) angesprochen werden, und es gibt unzählige MOV-Anweisungen, die Dinge aus dem RAM in EAX, AH, AL und von dort zurück in den RAM laden. Ich bin im Moment zu faul, mir das Referenzhandbuch für Intel-Programmierer anzusehen, aber ich glaube, es gibt Anweisungen zum Laden einzelner Bytes in die oberen oder unteren 8 Bits von AH oder AL. (Ich weiß, dass MIPS solche Anweisungen hat). Ich glaube jedoch, dass es mehr Anweisungen gibt, die mit allen 32 Bits funktionieren, und wenn Sie mit weniger Bits arbeiten möchten, geht die Effizienz auf Kosten, weil Sie Dinge zuerst in temporäre Register usw. verschieben müssen.

Bei Intel und den meisten anderen Allzweck-CPUs seit der 16-Bit-Ära sind Sie also sehr flexibel bei der Adressierung des Speichers. Anweisungen sind jedoch wahrscheinlich besser optimiert, um mit der „Bitanzahl“ der Architektur zu funktionieren.

verwandte Informationen