Warum x86-64-Systeme haben nur eine 48-bit virtueller Adressraum?
In einem Buch Las ich Folgendes:
32-bit-Prozessoren haben 2^32 möglichen Adressen, die aktuellen 64-bit-Prozessoren mit 48-bit-Adressraum
Meine Erwartung war, dass, wenn es eine 64-bit-Prozessor, die Adresse, Raum, sollten auch 2^64.
Also ich Frage mich, was ist der Grund für diese Einschränkung?
- Das Buch gewesen sein muss zu sprechen, speziell über die aktuelle Implementierung der AMD64-Architektur (x86-64). Nur die low-um 48 bits verwendet werden. Dies ist nicht eine hardware-Einschränkung, aber--alle 64 bit sind verfügbar.
- Immer eine gute Idee zu identifizieren, das Buch.
- Ich vermute, dass die physische Adresse, die Linien sind nicht kostenlos (Sie müssen 16 extra-pins der cpu zumindest). Und ich bin mir nicht bewusst, irgendwelche hardware, die füllen kann ist eine 48-bit-Raum mit den physikalischen RAM-chips auf dem gleichen Prozessor noch. Wenn dies durchführbar, ich bin sicher, AMD wird fügen Sie die fehlenden 16 pins 🙂
- Ich weiß, was du meinst, aber ist es nicht genau eine hardware-Einschränkung, wenn Sie spezifisch für die aktuelle Implementierung von AMD64? 😉
- sogar
The 32-bit processors have 2^32 possible addresses
ist nicht unbedingt wahr, es kann existieren, 32bit cpu, mit nur 24 "pins" für die Adressierung von Speicher. E. g. 68EC020 (billiger 68020-version) ist eine 32bit-cpu, aber mit 24 bit für die Adressierung der Speicher. - Es ist ein sehr reales problem mit 64-bit-physische Adressierung die Seite im virtuellen Speicher zu klein ist. Das sorgt für enorme Verzeichnisse und extrem teuer TLB-cache flushes auf jedem context-switch. Umzug von 4-KB-4 MB-Seiten ist eine option, aber sehr inkompatibel mit der aktuellen Betriebssysteme.
- Darüber hinaus
The 32-bit processors have 2^32 possible addresses
ist eher vage; zum Beispiel, eine Reihe von 32-bit-x86-CPUs (typischerweise server/workstation), Unterstützung für PAE, das es ermöglicht, eine 36-bit-Adressraum. Eine Reihe von modernen x86_64 CPUs unterstützt 48-bit-Adressraum und einen 52-bit-virtuellen Adressraum. - Können Sie das näher? Ich bin mir nicht ganz sicher, was du meinst. Wie wird die Größe eines Betriebssystems einzelnen Seite, die Größe beziehen sich auf den Adressraum? Wie funktioniert das ändern der Größe der Seite helfen, mit zunehmenden physischen Adressraum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil das ist alles, was benötigt wird. 48 bits geben Sie einen Adressraum von 256 terabyte. Das ist eine Menge. Sind Sie nicht zu sehen, ein system, das mehr benötigt, als dass zu jeder Zeit bald.
Also CPU-Hersteller nahm eine Abkürzung. Sie verwenden eine Anleitung, die ermöglicht eine vollständige 64-bit-Adressraum, aber die aktuellen CPUs gerade verwenden nur die unteren 48 bits. Die alternative wäre eine Verschwendung von transistoren auf den Umgang mit einem größeren Adressraum, die nicht benötigt werden, für viele Jahre.
Kommen wir also mal in der Nähe des 48-bit limit, es ist nur eine Frage von loslassen CPUs, Griff den vollen Adressraum, aber es wird nicht verlangen, änderungen an der Anleitung, und es wird nicht brechen Kompatibilität.
int
; unabhängig davon, ob sich Windows tatsächlich verwendet vorzeichenbehaftete Werte oder nicht, es gibt keinen Grund, die 32-bit-Programme, die nicht explizit erkennen, mehr als die regulären 2-GB-Speicherplatz kann nicht. Dies kann (und hat) kommt zurück zu beißen die Leute in den hinteren, während Sie versuchen, zu aktualisieren, Programme von 32-bit auf 64-bit-Adressen, damit die Leute haben hoffentlich aus Erfahrung gelernt und es wird nicht sein ein Problem in der Zukunft. Wenn ja, dann Programme sollten in Ordnung sein mit mehr als 128 TB.Jede Antwort, bezugnehmend auf den bus, der Größe und der physische Speicher ist etwas falsch, da OP ' s Frage war über virtuellen Adressraum nicht physikalischen Adressraum. Zum Beispiel die angeblich Analog-limit auf einige 386 war eine Begrenzung auf den physikalischen Speicher, den Sie nutzen könnten, nicht die virtuelle Adresse Speicherplatz, das war immer eine vollständige 32 bit. Im Prinzip könnte man eine volle 64-bit virtueller Adressraum auch mit nur ein paar MB Arbeitsspeicher; natürlich könnten Sie tun, damit durch den Austausch oder für spezielle Aufgaben, wo Sie wollen, die Karte der gleichen Seite an die meisten Adressen (z.B. bestimmte sparse-data-Operationen).
Ich denke, die wirkliche Antwort ist, dass AMD war nur Billig und hoffte, niemand würde es interessieren, für jetzt, aber ich habe keine Referenzen zu zitieren.
__far
(oder-noch schlimmer -FAR
/far
!) Zeiger...out NUM, reg
), wobei jede bank ist die max erlaubt durch die "pins"? (z.B. 2^48), Dann könnten wir sagen, das kann die cpu-Adresse N*2^48 physische RAM? Ich würde noch sagen, dass die max Adressraum der CPU ermöglicht, für "nur" 2^48 Byte RAM.Lesen Sie den Abschnitt Grenzen der wikipedia-Artikel:
Ist, gibt es keinen Punkt der Umsetzung die volle 64-bit-Adressierung an diesem Punkt, da können wir nicht ein system bauen, das könnte von der Nutzung dieser Adressraum in voll - und wir nehmen etwas, das praktisch für die heutigen (und morgigen) Systeme.
Den internen nativen register/Breite Betrieb nicht müssen zu werden, spiegelt sich in den externen Adressbus Breite.
Sagen, Sie haben ein 64-bit-Prozessor, die nur Zugriff auf 1 megabyte RAM. Ein 20-bit-Adressbus ist alles, was erforderlich ist. Warum die Mühe mit der Kosten-und hardware-Komplexität, die alle zusätzlichen pins, die Sie nicht verwenden?
Den Motorola 68000 war wie diese; 32 bit intern, aber mit einer 23-bit-Adress-bus (und ein 16-bit-Daten-bus). Die CPU könnte auf 16 Megabyte RAM, und zum laden der native Datentyp (32 bit) nahm zwei Speicherzugriffe (jeder mit 16-bit-Daten).
Es ist ein schwerwiegender Grund, als nur die Einsparung von transistoren in der CPU-Adresse-Pfad: wenn Sie erhöhen Sie die Größe des Adressraums, die Sie brauchen, um erhöhen Sie die Größe der Seite, erhöhen Sie die Größe der page tables, oder haben Sie eine tiefere page table Struktur (das ist mehr Ebenen der übersetzung Tabellen). All diese Dinge erhöhen die Kosten eines TLB miss, das beeinträchtigt die Leistung.
Aus meiner Sicht ist dies Ergebnis von der Größe der Seite.Jede Seite enthält 4096/8 =512 Einträge in der page table. Und 2^9 =512. So 9 * 4 + 12=48.
Antwort auf die ursprüngliche Frage: Es gab keine Notwendigkeit zum hinzufügen von mehr als 48 Bits von PA.
Server, müssen Sie die maximale Menge an Speicher, also lasst uns versuchen, tiefer zu Graben.
1) Die größte (Häufig verwendet) - server-Konfiguration ist ein 8-Socket-system. Ein 8S system ist nichts anderes als 8 Server-CPU ' s, verbunden mit einem high-speed-coherent interconnect (oder einfach ein high speed "bus") zu einem einzigen Knoten. Es sind größere Cluster heraus dort, aber Sie sind wenige und weit zwischen, wir reden Häufig verwendete Konfigurationen hier. Beachten Sie, dass in der realen Welt Verwendungen, 2-Socket-system ist eines der am häufigsten verwendeten Server und 8S ist in der Regel als sehr high-end.
2) Die wichtigsten Arten von Speicher von Servern verwendet werden, die byte-adressierbar regelmäßige DRAM-Speicher (z.B. DDR3/DDR4 memory), Memory-Mapped IO - MMIO (wie der Speicher von add-in-Karte), sowie Konfigurations-Raum verwendet, um die Konfiguration der Geräte, die im system vorhanden sind. Die erste Art von Speicher ist der, der in der Regel den größten (und somit die Notwendigkeit, die größte Anzahl der Adress-bits). Einige high-end-Servern verwenden, eine große Menge von MMIO-als auch abhängig von dem, was die eigentliche Konfiguration des Systems ist.
3) davon Ausgehen, dass jedes server-CPU kann Haus 16 DDR4-DIMMs in jedem Steckplatz. Mit einer maximalen Größe von DDR4-DIMM von 256 GB. (Abhängig von der version des Servers, ist diese Anzahl der möglichen DIMMs pro socket ist eigentlich weniger als 16 DIMMs, aber Lesen Sie weiter für den sake des Beispiels).
Also jeder socket kann theoretisch 16*256=4096GB = 4 TB.
Für unser Beispiel 8S system, die DRAM-Größe können Sie ein maximum von 4*8= 32 TB. Dies bedeutet, dass
die maximale Anzahl von bits nötig, um das DRAM-Raum 45 (=log2 32 TB/log2 2).
Wir nicht gehen in die details der anderen Arten von Speicher (MMIO, MMCFG etc), aber der Punkt hier ist, dass die meisten "anspruchsvollen" Art von Speicher für einen 8-Sockel-system mit den meisten Arten von DDR4-DIMMs, die heute verfügbar (256-GB-DIMMs) verwenden Sie nur 45-bits.
Für ein Betriebssystem, das Unterstützung für 48-bit (WS16 zum Beispiel), es gibt (48-45=) 3 verbleibenden bits.
Was bedeutet, dass, wenn wir den unteren 45 bits, die ausschließlich für 32 TB DRAM, wir haben noch 2^3 mal der adressierbare Speicher, die verwendet werden können für MMIO/MMCFG für eine Gesamtmenge von 256 TB adressierbaren Speicher.
Also, um zusammenzufassen:
1) 48 bits der Physikalischen Adresse ist die Menge der bits, die zur Unterstützung der größten Systeme von heute, die sind "fully loaded" mit reichlich DDR4 und auch viele andere IO Geräte, die die Nachfrage der MMIO-Speicher. 256TB um genau zu sein.
Beachten Sie, dass diese 256TB-Adressraum (=48bits der physikalischen Adresse) enthält KEINE Festplatten wie SATA-Laufwerke, weil Sie NICHT Teil der Adresse anzeigen, Sie umfassen nur den Speicher byte-adressierbar ist, und ausgesetzt ist das OS.
2) CPU-hardware wählen kann, zu implementieren, 46, 48 > 48 bit je nach generation der server. Aber ein weiterer wichtiger Faktor ist, wie viele bits der OS erkennen.
Heute, WS16 unterstützt 48-bit Physikalische Adressen (=256 TB).
Was bedeutet dies für den Nutzer ist, auch wenn man eine große, ultra-moderne server-CPU mit Unterstützung für >48 bit Adressierung, wenn Sie laufen ein Betriebssystem, das unterstützt nur 48 bits von PA, dann können Sie nur die Vorteile von 256 TB.
3) Alles in allem gibt es zwei wesentliche Faktoren, um zu nehmen Vorteil der höheren Anzahl der Adress-bits (= mehr Speicherkapazität).
a) Wie viele bits sind in Ihrer CPU-HW-Unterstützung? (Dies kann bestimmt werden durch die CPUID-Anweisung, die in Intel-CPUs).
b) Welche OS version Sie laufen und wie viele bits von PA gilt es zu erkennen/unterstützen.
Min (a,b) bestimmen letztendlich die Menge des adressierbaren Speichers Ihres Systems nutzen können.
Ich geschrieben habe, ist diese Antwort ohne Blick in die anderen Antworten im detail. Ich habe auch ein nicht sich im detail, in Nuancen von MMIO, MMCFG und die Gesamtheit der Adresse map-Bau. Aber ich hoffe, das hilft.
Dank,
Anand K Enamandram,
Server-Plattform-Architekt
Intel Corporation
Viele Menschen haben dieses Missverständnis. Aber ich verspreche Ihnen, wenn Sie sorgfältig Lesen, nach der Lektüre dieses alle Ihre Missverständnisse werden cleart.
Sagen, ein Prozessor mit 32 bit oder 64 bit nicht bedeuten, es sollten 32-bit-Adress-bus-oder 64-bit-Adress-bus jeweils!...Ich wiederhole es NICHT!!
32-bit-Prozessor bedeutet, dass es 32-bit-ALU (Arithmetisch-logische Einheit)...das bedeutet, es kann funktionieren auf 32-bit-Binär-operand (oder einfach zu sagen, eine Binärzahl mit 32 stellen) und ebenso 64-bit-Prozessor arbeitet mit 64-bit-Binär-operand. So Wetter ist ein Prozessor mit 32 bit oder 64 bit NICHT bedeuten, die die maximale Menge an Speicher installiert werden kann. Sie zeigen, wie groß der operand kann...(für die Analogie stellen Sie sich eine 10-stellige Rechner kann berechnen, die Ergebnisse bis zu 10 stellen...kann es nicht geben uns 11 Ziffern oder andere größere Ergebnisse... obwohl es in dezimal, aber ich sage, diese Analogie für die Einfachheit)...aber was du sagst, ist der Adressraum, der die maximale direkt elementkonfigurationen Größe des Arbeitsspeichers (RAM). Der RAM auf das maximal mögliche Größe wird bestimmt durch die Größe des Adressbus und es ist nicht die Größe der Daten-bus oder auch ALU auf den der Prozessor in der Größe definiert ist (32/64 bit). Ja, wenn ein Prozessor mit 32 bit "bus-Adresse", dann ist es in der Lage, 2^32 byte=4 GB RAM (oder, bei 64 bit sind 2^64)...aber zu sagen, ein Prozessor mit 32 bit oder 64 bit hat das nichts, die Relevanz dieser Adressraum (address space=wie weit kann der Zugriff auf den Speicher oder die maximale RAM-Größe) und ist nur abhängig von der Größe der ALU. Natürlich Datenbus und Adressbus kann von der gleichen Größe und dann mag es scheinen, dass 32-bit-Prozessor bedeutet, dass es Zugriff auf 2^32 byte oder 4 GB Speicher...aber es ist ein Zufall nur, und es wird nicht das gleiche für alle....zum Beispiel intel 8086 ist ein 16-bit-Prozessor (wie 16-bit-ALU) also wie Ihr es sagen soll Zugriff auf 2^16 byte=64 KB Speicher, aber es ist nicht wahr. Es kann den Zugriff bis zu 1 MB Speicher für die 20-bit-Adressbus....Sie können google, wenn Sie irgendwelche Zweifel haben:)
Ich glaube, ich habe meinen Punkt klar.Nun zu deiner Frage...als 64-bit-Prozessor bedeutet nicht, dass es muss 64-bit-Adress-bus, also es ist nohing falsch, dass eine 48-bit-Adress-bus, eine 64-bit-Prozessor...Sie hielten den Adressraum kleiner zu machen, das design und die Herstellung Billig....denn niemand werde mit einer so großen Speicher (2^64 byte)...wo 2^48 byte ist mehr als genug heutzutage.
Es ist nicht wahr, dass nur die low-um 48 bits einer 64-bit-VA verwendet werden, die mindestens mit Intel 64. Die oberen 16 bit werden verwendet, eine Art, Art von.
Abschnitt 3.3.7.1 Kanonische Adressierung im die Intel® 64 und IA-32 Architectures Software Developer ' s Manual sagt:
Also bits 47 thru 63 bilden eine super-bit, entweder alle 1 oder alle 0. Wenn eine Adresse nicht in der kanonischen form, die Umsetzung sollte Schuld.
Auf AArch64, ist dies anders. Nach der ARMv8-Befehlssatz-Übersicht, es ist eine 49-bit-VA.
[vsyscall]
Seite. (Das kann exportiert werden, Sachen wie aktuelle PID, so dassgetpid()
ist rein user-space. Auchgettimeofday()
verwenden kann rdtsc, die im user-space + Maßstab exportiert der kernel. Obwohl einige, die ich denke, in[vdso]
befindet sich in der Nähe der Oberseite der unteren Hälfte.)__VMALLOC_BASE
tut. Vermutlich ist es nicht direkt.Einer CPU wird als "N-bit", vor allem auf seine Daten-bus-Größe, und nach den großen Teil der Unternehmen (interne Architektur): Register, Speicher, Arithmetik-Logik-Einheit (ALU), Instruction Set, etc. Zum Beispiel: Das gute alte Motorola 6800 (oder Intel 8050) CPU ist ein 8-bit-CPU. Es hat einen 8-bit-Daten-bus, 8-bit interne Architektur & a 16-bit address-bus.