In einem Buch habe ich folgendes gelesen:
32-Bit-Prozessoren haben 2 ^ 32 mögliche Adressen, während aktuelle 64-Bit-Prozessoren einen 48-Bit-Adressraum haben
Meine Erwartung war, dass der Adressraum bei einem 64-Bit-Prozessor ebenfalls 2 ^ 64 betragen sollte.
Also habe ich mich gefragt, was der Grund für diese Einschränkung ist.
The 32-bit processors have 2^32 possible addresses
nicht unbedingt der Fall ist, kann eine 32-Bit-CPU mit nur 24 "Pins" für die Adressierung des Speichers vorhanden sein. Beispielsweise ist 68EC020 (billigere 68020-Version) eine 32-Bit-CPU, jedoch mit 24 Bit zur Adressierung des Speichers.Antworten:
Weil das alles ist, was benötigt wird. 48 Bit geben Ihnen einen Adressraum von 256 Terabyte. Das ist viel. Sie werden in naher Zukunft kein System sehen, das mehr benötigt.
Also haben die CPU-Hersteller eine Abkürzung genommen. Sie verwenden einen Befehlssatz, der einen vollständigen 64-Bit-Adressraum zulässt, aber aktuelle CPUs verwenden nur die unteren 48 Bit. Die Alternative bestand darin, Transistoren für die Handhabung eines größeren Adressraums zu verschwenden, der für viele Jahre nicht benötigt werden würde.
Sobald wir uns dem 48-Bit-Limit nähern, müssen nur noch CPUs freigegeben werden, die den gesamten Adressraum verwalten. Es sind jedoch keine Änderungen am Befehlssatz erforderlich, und die Kompatibilität wird nicht beeinträchtigt.
quelle
Jede Antwort, die sich auf die Busgröße und den physischen Speicher bezieht, ist leicht falsch, da die Frage von OP den virtuellen Adressraum und nicht den physischen Adressraum betraf . Zum Beispiel war die angeblich analoge Grenze für einige 386 eine Grenze für den physischen Speicher, den sie verwenden konnten, nicht für den virtuellen Adressraum, der immer volle 32 Bit betrug. Im Prinzip können Sie sogar mit nur wenigen MB physischem Speicher volle 64 Bit virtuellen Adressraum verwenden. Natürlich können Sie dies durch Austauschen oder für spezielle Aufgaben tun, bei denen Sie dieselbe Seite an den meisten Adressen zuordnen möchten (z. B. bestimmte Operationen mit geringen Datenmengen).
Ich denke, die wirkliche Antwort ist, dass AMD nur billig war und hoffte, dass sich jetzt niemand darum kümmern würde, aber ich habe keine Referenzen zum Zitieren.
quelle
__far
(oder noch schlimmer,FAR
/far
!) Zeiger verwendet ...Lesen Sie den Abschnitt mit den Einschränkungen des Wikipedia-Artikels :
Das heißt, es macht derzeit keinen Sinn, eine vollständige 64-Bit-Adressierung zu implementieren, da wir kein System erstellen können, das einen solchen Adressraum vollständig nutzen kann. Daher wählen wir etwas aus, das für die Systeme von heute (und morgen) praktisch ist.
quelle
Die interne native Register- / Operationsbreite muss nicht in der externen Adressbusbreite berücksichtigt werden.
Angenommen, Sie haben einen 64-Bit-Prozessor, der nur auf 1 Megabyte RAM zugreifen muss. Ein 20-Bit-Adressbus ist alles, was benötigt wird. Warum sollten Sie sich mit den Kosten und der Hardwarekomplexität aller zusätzlichen Pins befassen, die Sie nicht verwenden?
Das Motorola 68000 war so; 32 Bit intern, jedoch mit einem 23-Bit-Adressbus (und einem 16-Bit-Datenbus). Die CPU konnte auf 16 Megabyte RAM zugreifen, und zum Laden des nativen Datentyps (32 Bit) waren zwei Speicherzugriffe erforderlich (jeder mit 16 Bit Daten).
quelle
Es gibt einen schwerwiegenderen Grund als nur das Speichern von Transistoren im CPU-Adresspfad: Wenn Sie den Adressraum vergrößern, müssen Sie die Seitengröße erhöhen, die Seitentabellen vergrößern oder eine tiefere Seitentabellenstruktur haben (das heißt ist mehr Ebenen von Übersetzungstabellen). All diese Dinge erhöhen die Kosten eines TLB-Fehlers, was die Leistung beeinträchtigt.
quelle
Aus meiner Sicht ergibt sich dies aus der Seitengröße. Jede Seite enthält höchstens 4096/8 = 512 Einträge der Seitentabelle. Und 2 ^ 9 = 512. Also 9 * 4 + 12 = 48.
quelle
Um die ursprüngliche Frage zu beantworten: Es war nicht erforderlich, mehr als 48 Bit PA hinzuzufügen.
Server benötigen die maximale Speicherkapazität. Versuchen wir also, tiefer zu graben.
1) Die größte (häufig verwendete) Serverkonfiguration ist ein 8-Socket-System. Ein 8S-System ist nichts anderes als eine 8-Server-CPU, die über eine kohärente Hochgeschwindigkeitsverbindung (oder einfach einen Hochgeschwindigkeitsbus) zu einem einzigen Knoten verbunden ist. Es gibt größere Cluster, aber es gibt nur wenige, wir sprechen hier von häufig verwendeten Konfigurationen. Beachten Sie, dass das 2-Socket-System in der realen Welt einer der am häufigsten verwendeten Server ist und 8S normalerweise als sehr hochwertig angesehen wird.
2) Die wichtigsten Speichertypen, die von Servern verwendet werden, sind byteadressierbarer regulärer DRAM-Speicher (z. B. DDR3 / DDR4-Speicher), Memory Mapped IO - MMIO (z. B. Speicher, der von einer Zusatzkarte verwendet wird) sowie Konfigurationsbereich, der zum Konfigurieren verwendet wird die Geräte, die im System vorhanden sind. Der erste Speichertyp ist derjenige, der normalerweise der größte ist (und daher die größte Anzahl von Adressbits benötigt). Einige High-End-Server verwenden je nach tatsächlicher Konfiguration des Systems auch eine große Menge an MMIO.
3) Angenommen, jede Server-CPU kann 16 DDR4-DIMMs in jedem Steckplatz aufnehmen. Mit einer maximalen DDR4-Größe von 256 GB. (Abhängig von der Serverversion beträgt diese Anzahl möglicher DIMMs pro Socket weniger als 16 DIMMs. Lesen Sie jedoch weiter, um das Beispiel zu verdeutlichen.)
Jeder Socket kann also theoretisch 16 * 256 GB = 4096 GB = 4 TB haben. In unserem Beispiel-8S-System kann die DRAM-Größe maximal 4 * 8 = 32 TB betragen. Dies bedeutet, dass die maximale Anzahl von Bits, die zur Adressierung dieses DRAM-Raums benötigt werden, 45 beträgt (= log2 32 TB / log2 2).
Wir werden nicht auf die Details der anderen Speichertypen (MMIO, MMCFG usw.) eingehen, aber der Punkt hier ist, dass der "anspruchsvollste" Speichertyp für ein 8-Socket-System mit den größten heute verfügbaren DDR4-DIMM-Typen (256 GB) DIMMs) verwenden nur 45 Bit.
Für ein Betriebssystem, das 48 Bit unterstützt (z. B. WS16), verbleiben (48-45 =) 3 Bit. Das heißt, wenn wir die unteren 45 Bits ausschließlich für 32 TB DRAM verwenden, haben wir immer noch 2 ^ 3-mal adressierbaren Speicher, der für MMIO / MMCFG für insgesamt 256 TB adressierbaren Speicherplatz verwendet werden kann.
Zusammenfassend lässt sich sagen: 1) 48 Bit physische Adresse sind viele Bits, um die größten Systeme von heute zu unterstützen, die mit reichlich DDR4 und vielen anderen E / A-Geräten, die MMIO-Speicherplatz benötigen, "voll geladen" sind. 256 TB um genau zu sein.
Beachten Sie, dass dieser 256-TB-Adressraum (= 48 Bit physische Adresse) KEINE Festplattenlaufwerke wie SATA-Laufwerke enthält, da diese NICHT Teil der Adresszuordnung sind, sondern nur den Speicher, der byteadressierbar ist und dem Betriebssystem ausgesetzt ist.
2) Die CPU-Hardware kann je nach Generation des Servers 46, 48 oder> 48 Bit implementieren. Ein weiterer wichtiger Faktor ist jedoch, wie viele Bits das Betriebssystem erkennt. Heute unterstützt WS16 physikalische 48-Bit-Adressen (= 256 TB).
Für den Benutzer bedeutet dies, dass Sie, obwohl Sie eine große, hochmoderne Server-CPU haben, die> 48 Bit Adressierung unterstützt, wenn Sie ein Betriebssystem ausführen, das nur 48 Bit PA unterstützt, nur 256 TB nutzen können .
3) Insgesamt gibt es zwei Hauptfaktoren, um die höhere Anzahl von Adressbits zu nutzen (= mehr Speicherkapazität).
a) Wie viele Bits unterstützt Ihre CPU HW? (Dies kann durch CPUID-Anweisung in Intel-CPUs bestimmt werden).
b) Welche Betriebssystemversion verwenden Sie und wie viele PA-Bits werden erkannt / unterstützt?
Das Minimum von (a, b) bestimmt letztendlich die Menge an adressierbarem Speicherplatz, den Ihr System nutzen kann.
Ich habe diese Antwort geschrieben, ohne die anderen Antworten im Detail zu untersuchen. Außerdem habe ich mich nicht im Detail mit den Nuancen von MMIO, MMCFG und der Gesamtheit der Adresskartenkonstruktion befasst. Aber ich hoffe das hilft.
Vielen Dank, Anand K Enamandram, Server Platform Architect der Intel Corporation
quelle
Viele Menschen haben dieses Missverständnis. Aber ich verspreche Ihnen, wenn Sie dies sorgfältig lesen, nachdem Sie dies gelesen haben, werden alle Ihre Missverständnisse klar sein.
Zu sagen, dass ein 32-Bit- oder 64-Bit-Prozessor nicht bedeutet, dass er einen 32-Bit-Adressbus oder einen 64-Bit-Adressbus haben sollte! ... Ich wiederhole es NICHT !!
32-Bit-Prozessor bedeutet, dass er über eine 32-Bit-ALU (Arithmetic and Logic Unit) verfügt. Dies bedeutet, dass er mit einem 32-Bit-Binäroperanden (oder einfach einer Binärzahl mit 32 Ziffern) und einem 64-Bit-Prozessor mit 64-Bit-Binär arbeiten kann Operand. Wenn Sie also einen 32-Bit- oder 64-Bit-Prozessor verwenden, bedeutet dies NICHT, dass maximal Speicher installiert werden kann. Sie zeigen nur, wie groß der Operand sein kann ... (analog kann man sich vorstellen, dass ein 10-stelliger Rechner Ergebnisse mit bis zu 10 Stellen berechnen kann ... er kann uns keine 11 Stellen oder andere größere Ergebnisse liefern ... obwohl dies der Fall ist in Dezimalzahl, aber ich erzähle diese Analogie der Einfachheit halber) ... aber was Sie sagen, ist der Adressraum, der die maximale direkt interfaceable Größe des Speichers (RAM) darstellt. Der RAM ' Die maximal mögliche Größe wird durch die Größe des Adressbusses bestimmt und ist nicht die Größe des Datenbusses oder sogar der ALU, auf der die Größe des Prozessors definiert ist (32/64 Bit). Ja, wenn ein Prozessor einen 32-Bit- "Adressbus" hat, kann er 2 ^ 32 Byte = 4 GB RAM adressieren (oder für 64 Bit sind es 2 ^ 64) ... aber ein Prozessor hat 32 Bit oder 64 Bit Keine Relevanz für diesen Adressraum (Adressraum = wie weit er auf den Speicher zugreifen kann oder die maximale Größe des RAM) und er hängt nur von der Größe seiner ALU ab. Natürlich können Datenbus und Adressbus gleich groß sein, und dann scheint es, dass ein 32-Bit-Prozessor bedeutet, dass er auf 2 ^ 32 Byte oder 4 GB Speicher zugreift ... aber es ist nur ein Zufall und es wird nicht der gleiche sein für alle.... Zum Beispiel ist Intel 8086 ein 16-Bit-Prozessor (da er eine 16-Bit-ALU hat). Wie Sie sagen, sollte er auf 2 ^ 16 Byte = 64 KB Speicher zugreifen, aber das ist nicht wahr. Es kann auf bis zu 1 MB Speicher für 20-Bit-Adressbus zugreifen .... Sie können googeln, wenn Sie irgendwelche Zweifel haben :)
Ich glaube, ich habe meinen Standpunkt klargestellt. Kommen wir nun zu Ihrer Frage ... da ein 64-Bit-Prozessor nicht bedeutet, dass er einen 64-Bit-Adressbus haben muss, ist es nichts Falsches, einen 48-Bit-Adressbus in einem 64-Bit-Prozessor zu haben ... sie haben den Adressraum kleiner gehalten, um das Design und die Herstellung billig zu machen ... da niemand einen so großen Speicher (2 ^ 64 Byte) verwenden wird ... wo 2 ^ 48 Byte heutzutage mehr als genug sind.
quelle
Es ist nicht wahr, dass nur die niederwertigen 48 Bit einer 64-Bit-VA verwendet werden, zumindest bei Intel 64. Die oberen 16 Bit werden irgendwie verwendet.
In Abschnitt 3.3.7.1 Kanonische Adressierung im Softwareentwicklerhandbuch für Intel® 64- und IA-32-Architekturen heißt es:
Die Bits 47 bis 63 bilden also ein Super-Bit, entweder alle 1 oder alle 0. Wenn eine Adresse nicht in kanonischer Form vorliegt, sollte die Implementierung fehlerhaft sein.
Bei AArch64 ist dies anders. Laut ARMv8 Instruction Set Overview handelt es sich um eine 49-Bit-VA.
quelle
[vsyscall]
Seite in den Benutzerbereich exportiert . (Das mag Sachen wie aktuelle PID werden exportieren , so dassgetpid()
rein User-Space ist. Auchgettimeofday()
nur RDTSC in User-Space + Skalierungen exportiert vom Kernel verwenden können. Obwohl einige das ist denke ich in[vdso]
, die in der Nähe der Spitze der ist untere Hälfte.)__VMALLOC_BASE
macht. Vermutlich wird es nicht direkt verwendet.Eine CPU wird hauptsächlich aufgrund ihrer Datenbusgröße und eines großen Teils ihrer Entitäten (interne Architektur) als "N-Bits" betrachtet : Register, Akkumulatoren, Arithmetik-Logikeinheit (ALU), Befehlssatz usw. Zum Beispiel: Die gute alte Motorola 6800 (oder Intel 8050) CPU ist eine 8-Bit-CPU. Es verfügt über einen 8-Bit-Datenbus, eine interne 8-Bit-Architektur und einen 16-Bit-Adressbus.
quelle