ORIGINAL FRAGE: (Sie können dieses Durcheinander einer Frage lesen, aber ich schlage vor, zu der neu geschriebenen Frage zu springen)
Ich sehe, dass es viele Stellen gibt, an denen die Beschränkung auf 16 EB RAM erwähnt wird ... Ist ein modernes Register jedoch nicht 64-Bit? In diesem Fall sollte 2 ^ 64 auf die Anzahl der möglichen Register verweisen. Da es sich um jeweils 8 Byte handelt, sollte die tatsächliche Grenze 128 EB ((2 ^ 64) * 8 Byte) betragen. Beispiel: 32 Bits gehen zu einem 32X (2 ^ 32) Decoder und die anderen 32 Bits gehen zu dem anderen 32X (2 ^ 32) Decoder, um die richtigen Drähte in jedem Decoder einzuschalten und somit auf ein bestimmtes Register des zuzugreifen (2 ^ 32) ^ 2 Register mit jeweils 64 Datenbits (für den zu speichernden 64-Bit-Bus).
Klar, ich vermisse entweder etwas oder es gibt eine seltsame Chance, dass ich Recht habe und 16 EB ist nicht wirklich die Grenze ...
BEARBEITEN:
Dies wurde vor langer Zeit geschrieben, als ich mir selbst etwas über RAM beibrachte. Ich bin über mehrere Quellen gestolpert, die mir widersprachen (zumindest in meinen Gedanken, aber ich kann mich nicht genau erinnern, warum ich so verwirrt war, eine Frage darüber zu schreiben ) und muss verwirrt worden sein.
Ich möchte meine ursprüngliche Frage lieber noch einmal klären, als sie zu löschen, damit sie für zukünftige Leser nützlicher ist (aber ich brauche keine Antwort, das habe ich mir vor einigen Jahren selbst beigebracht und habe seitdem sogar einen Abschluss in Informatik dann).
DIE FRAGE: (geschrieben in einer Weise, die für andere Menschen nützlicher ist)
Als ich diese Frage stellte, verwendete ich den Begriff "Register" sehr locker, um auf einen Speicherort Bezug zu nehmen, und nahm an, dass der RAM wortadressierbar ist (daher die Verwendung von 8 Bytes für eine 64-Bit-Architektur). Wenn der RAM wortadressierbar wäre, würde jeder Speicherplatz 8 Bytes enthalten und daher 16E · 8 Bytes = 128EB.
Da die meisten modernen Computer die Byteadressierung verwenden, beträgt die tatsächliche Größe jedes Speicherplatzes 1 Byte (8 Bit) und daher 16E * 1 Byte = 16EB.
NÜTZLICHER HINWEIS:
Ein byteadressierbarer RAM erleichtert die Verwaltung, sodass der Unterschied zwischen 32 Bit und 64 Bit nicht so groß ist. Bei einem RAM-Aufruf wird jedoch immer noch das gesamte 64-Bit-Wort abgerufen (indem die letzten 3 Bits der Adresse für ignoriert werden Wenn nur 1 Byte benötigt wird, können die anderen 7 Byte ignoriert werden.
Ein weiterer nützlicher Hinweis: Bei der 64-Bit-Adressierung werden normalerweise nur 40-52 Bit verwendet. Dadurch verbleibt eine ausreichende Menge an maximalem RAM (zwischen 1 TB und 4 PB).
quelle
A 64-bit register can store 2^64 different values. Hence, a processor with 64-bit memory addresses can directly access 2^64 bytes (=16 exbibytes) of byte-addressable memory.
Warum multiplizieren Sie mit anderen 8?Antworten:
In einer 32-Bit-Architektur enthalten Zeiger 32 (verwendbare) Bits und können 2 ^ 32 (= 4294967296) verschiedene Adressen adressieren. Jede Adresse verweist auf ein Byte, sodass Ihr Adressraum 4294967296 Byte oder 4 GiB beträgt.
In einer 64-Bit-Architektur gilt dasselbe Argument: Sie können 2 ^ 64 verschiedene Adressen adressieren, und jede Adresse verweist auf ein Byte, sodass Ihr Adressraum 2 ^ 64 Byte groß ist, was genau 16 EiB entspricht.
Beachten Sie jedoch, dass Zeiger auf (aktuellen) x86_64 nur 48 verwendbare Adressbits haben, um etwas Silizium zu sparen. Der Versuch, auf ungültige Adressen zuzugreifen, führt zu einer CPU-Ausnahme, da die anderen Bits nicht implementiert werden. Die Architektur wird jedoch erweitert, wenn der zusätzliche Speicher praktisch wird.
quelle