Byte adressierbar vs Wort adressierbar

Ich versuche, den Unterschied zwischen Byteadressierung und Wortadressierung zu verstehen.

Eine 4-Wege-satzassoziative Cache-Speichereinheit mit einer Kapazität von 16 KB wird mit einer Blockgröße von 8 Wörtern erstellt. Die Wortlänge beträgt 32 Bit. Die Größe des physischen Adressraums beträgt 4 GB.

Anzahl der Sätze im Cache $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $

Wenn die Wortadressierung verwendet wird:

Blockversatz $ = 3 \ bits $

Da PAS $ 4 \ GB $ ist, ist die Gesamtzahl der Adressen = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $

Also, Gesamtadressbits $ = 30 \ bits $

Adressstruktur:

Tag-Bits: $ 20 \ bits $
Setze Bits: $ 7 \ bits $
Blockversatzbits: $ 3 \ bits $

Angenommen, die CPU möchte auf die zugreifen 3. Byte eines bestimmten Wortes.

  1. Der Cache-Controller verwendet das $ 7 \ bits $ -Satzfeld, um in eine Menge und zu indizieren Vergleichen Sie dann das höhere $ 20 \ bits $ -Tag-Feld mit allen $ 4 $ Blöcke in der Menge. Wenn eine Übereinstimmung gefunden wird, tritt ein Cache-Treffer auf und der untere $ 3 \ bits $ -Block-Offset, um eines der Wörter aus dem $ 8 $ Wörter in einem der Universalregister. Die CPU extrahiert dann das 3. Byte aus dem Wort und führt die Operation aus.
  2. Wenn Tags nicht übereinstimmen, tritt ein Cache-Fehler auf, ein Speicherlesesignal wird gesendet und aufgrund der räumlichen Referenzlokalität ein Block, der das enthält Das Wort wird in den Cache übertragen.

Wenn die CPU byteadressierbar ist:

Gesamtadressbits $ = 32 $

Adressstruktur: Tag-Bits: $ 20 \ bits $
Setze Bits: $ 7 \ bits $
Blockversatzbits: $ 5 \ bits $

Wenn die CPU auf das 3. Byte von a zugreifen möchte Wort:

  1. Wie in Schritt 1 des adressierbaren Wortes, aber die CPU kann jetzt das 3. Byte des Wortes direkt mit dem unteren $ 2 \ adressieren Bits $ Byte-Offset. Ich bin jedoch verwirrt, wie das passieren würde. Da die CPU-Registergröße eine Breite von 1 Wort hat, ähnlich wie bei der Wortadressierung, wird ein Wort von den 8 Wörtern im Block in das Register übertragen. Aber wie würde das geschehen Der Schritt „Byteextraktion“ ist hier einfacher. Und warum nennen wir ihn Byteadressierung, wenn wir noch ein Wort adressieren?
  2. Wie in Schritt 2 der Wortadressierung. Datenblock wird übertragen vom Speicher zum Cache im Falle eines Cache-Fehlers.

Auch diese Antwort besagt, dass der physische Speicher immer ein Byte ist Was ist nun der Unterschied zwischen der Adressierbarkeit des Speichers und der Adressierbarkeit der CPU-Architektur?

Antwort

Wortadressierung bedeutet, dass die Anzahl der Zeilen im Adressbus im Prozessor geringer ist als die Anzahl der Bits im Wort selbst.

Nehmen wir an, wir haben ein 4-Byte-Wort. (32-Bit-Adressraum)

Wenn dieses Gerät eine Byteadresse hat le, dann hat der Adressbus der CPU 32 Zeilen, wodurch er auf jedes Byte im Speicher zugreifen kann.

Wenn diese Maschine wortadressierbar ist, hat der Adressbus der CPU 30 Zeilen ( $ 32 – log_ {2} 4 = 30 $ ), wodurch auf den Speicher zugegriffen werden kann NUR in Wörtern / Blöcken von 4 Bytes und das auch von Adressen, die ein Vielfaches der Wortgröße sind.

Wenn Sie nun die CPU auffordern, ein Byte von einer bestimmten Adresse abzurufen, werden zuerst die 2 niedrigstwertigen Bits (mit drop meine ich, sie mit 0 „s überschreiben) der Adresse gelöscht und ein Wort abgerufen von der resultierenden Adresse und geben Sie ein Byte zurück, indem Sie die 2 niedrigstwertigen Bits als Offset innerhalb des abgerufenen Wortes verwenden.

Dies führt zu einer Erhöhung der Speicherzugriffszeit, da die CPU mehr Zeit für das Ändern der Adresse und die Verarbeitung aufwenden muss das abgerufene Wort. Es hilft aber auch, die Hardwarekosten zu senken, da die Komplexität der Schaltungen aufgrund der Verringerung der Adressbusleitungen verringert wird.

Dieser Overhead tritt jedoch niemals in einer byteadressierbaren Maschine auf, daher „Byte“ „extrahieren ist einfacher.

Kommentare

  • Ich verstehe, was Sie ‚ sagen. Aber was ‚ tritt bei Byteadressierung auf? Angenommen, die CPU benötigt das 3. Byte des Wortes. Sie sendet die 32-Bit-Adresse mit den mindestens 2 signifikanten Bits auf 10, rechts t?Aber wie wird es dann das Byte speichern, wenn es ein Register mit einer Wortbreite verwendet? ‚ hat die CPU in diesem Fall auch das Wort aus dem Cache abgerufen und im Register ‚ gespeichert?
  • Für Sie 1. Frage: Byte-Adressierungs-CPUs haben separate Schreibanweisungen, die auf der Größe der zu schreibenden Daten basieren. Eine für ein Byte, eine für ein Doppelbyte, eine für ein Quad-Byte, eine für ein Wort usw. (Tatsächlich hat jede CPU separate Schreibanweisungen für verschiedene unterstützte Datengrößen, die geschrieben werden sollen.) Das zu schreibende Byte wird normalerweise in den 8 LSBs des Registers gespeichert, dann wird der Schreibbefehl für ein Byte ausgeführt. Dies bewirkt, dass NUR die 8 LSB-Bits des Registers auf den Datenbus geladen werden und nur ein Byte an der Adresse im Speicher geändert wird.
  • Ich habe nicht ‚ verstehe deine 2. Frage nicht. Könnten Sie das näher erläutern?
  • Ich nehme an, dass dasselbe beim Lesen eines Bytes in einem byteadressierbaren Computer passiert, oder? Angenommen, ‚ gibt an, dass ‚ ein Zeichenarray char arr[10] und die CPU ist möchte das 3. Zeichen lesen, dh arr[2]. Nach dem Zugriff auf das Byte mit einer 32-Bit-Adresse wird es in den 8 LSBs des Registers gespeichert. Im Fall eines wortadressierbaren Wortes berechnet die CPU jedoch zuerst die Adresse des Wortes, zu dem das 3. Byte gehört (dh überschreibt die 2 LSBs mit 0) und ruft das Wort darin ab ‚ s registrieren. Danach wird der Byte-Offset verwendet, um das erforderliche Byte zu erhalten. Ist das richtig?
  • Vielen Dank. Ich möchte Sie bitten, all dies in der ursprünglichen Antwort zusammenzufassen, damit es jedem zukünftigen Leser helfen kann.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.