Speichergrenzen in 16-, 32- und 64-Bit-Systemen

67871
series0ne

Die theoretischen Speichergrenzen bei 16-, 32- und 64-Bit-Computern lauten wie folgt:

  • 16 Bit = 65, 536 Bytes (64 Kilobytes)

  • 32 Bit = 4, 294, 967, 295 Bytes (4 Gigabytes)

  • 64 Bit = 18, 446, 744, 073, 709, 551, 616 (16 Exabytes)

Ich erinnere mich an DOS / Windows 3.11-Tage, dass 16-Bit-Speicher in Segmente aufgeteilt werden konnte, sodass ein 16-Bit-Computer auf eine größere Menge an Speicher als 64 Kilobytes zugreifen konnte.

Ich habe eine Maschine mit 16 GB Arbeitsspeicher und bin ein 32-Bit-Betriebssystem und ein 64-Bit-Betriebssystem. Ich kann auf alle 16 GB von 64 Bit zugreifen, aber nur 3,21 GB in 32 Bit.

Meine Frage ist also: Wenn 16-Bit-Betriebssysteme aufgrund der Segmentierung des Speichers mehr als 64 KB Speicherzugriff zulassen, warum folgen 32-Bit-Maschinen nicht demselben Prinzip?

10

5 Antworten auf die Frage

11
0xC0000022L

Anstatt es mir selbst zu erklären, lasse ich jemanden, der einen Kernel mit PAE-Unterstützung unterhalten muss, auf seine charmante Art sprechen, Linus Torvalds

Beachten Sie auch, dass die PAE-Unterstützung in Windows 32-Bit-Versionen für viel Geld sorgt. XP kann normalerweise nicht einmal die vollen 4 GB RAM nutzen, da MS die PAE-Funktionen nicht aktiviert hat. Ein Kernel, der eng verwandt ist, Windows 2003 Server, unterstützt PAE. Aber auch dort unterstützt Ihre "Standard Edition" nur bis zu 4 GiB (aber um die BIOS-Speicherlücke herum), während die teureren Editionen dann bis zu 64 GiB RAM erlauben. Gleiches gilt für 32-Bit-Vista .

Diese Einschränkung wird jedoch nicht in allen Fällen von Windows auferlegt. Wenn Sie einen PAE-fähigen Linux-Kernel starten, können Sie dennoch die vollen 4 GiB (oder mehr) verwenden. Nicht so, einige Hardwarehersteller entschieden sich für diese Einschränkung auf BIOS-Ebene, obwohl die CPU und der Chipsatz PAE beherrschen könnten.


Nur eine Randbemerkung: Keiner der aktuellen x86-basierten 64-Bit-Prozessoren kann sogar den gesamten Bereich des 64-Bit-Adressraums physisch adressieren (Referenz siehe diese Frage und Antworten).

Sehr cool in dem Link lesen, danke dafür! Scott Chamberlain vor 11 Jahren 0
Hmm, warum habe ich den Eindruck, dass Linus HIGHMEM.SYS und PAE wirklich hasst? : P Karan vor 11 Jahren 0
Ich verstehe, dass PAE ein Ärgernis für jeden Code sein würde, der mehr als ein paar Gigs des Arbeitssatzes benötigte, und für Code auf Systemebene, der mehrere Tasks von jeweils 2 Gigs verwalten muss, es sei denn, eine einzelne Anwendung benötigt mehr als 2 Gigs würde ich erwarten, dass PAE transparent ist. Ich denke, PAE wäre auch besser als der weltweite Einsatz von 64-Bit-Zeigern in Fällen, in denen 3 GB allgemeiner Arbeitsspeicher sowie ein großer Festplatten-Cache oder ein temporäres Speicherlaufwerk erforderlich waren. supercat vor 9 Jahren 2
Linus 'Kommentare sind seltsam. Es gibt keine Beziehung zwischen der Funktionsweise von himem.sys und der Funktionsweise von PAE. Es ist sehr amüsant zu sehen, wie sich Leute für x64 und gegen die PAE-Adressierung streiten ... Wenn der x64-Langmodus einfach das PAE-Schema übernimmt, wird eine weitere Seitentabelle hinzugefügt! Jamie Hanrahan vor 9 Jahren 0
@JamieHanrahan: ... mindestens zwei auf neueren Systemen (aufgrund von Virtualisierung), was einige aufregende Möglichkeiten eröffnet. Seine (Linus ') Vergleiche sind nicht ganz richtig, aber wenn es sich um ein fremdes Konzept handelt, können Metaphern helfen :) ... Ich glaube, deshalb hat er es gewählt, um seine Meinung zu sagen. 0xC0000022L vor 9 Jahren 0
10
Scott Chamberlain

Das System wird als Physical Address Extension (PAE) bezeichnet . Im Folgenden finden Sie eine Liste der Windows-Betriebssysteme und ihres maximalen Speichers. Jedes 32-Bit-System, das mehr als 4 GB RAM ermöglicht, verwendet PAE, um auf den Speicher zuzugreifen (z. B. erlaubt Windows 2003 R2 Datacenter 32 Bit 128 GB RAM).


Tatsächlich erfordert Windows 8 eine PAE-fähige CPU in den Mindestanforderungen .


Zur Beantwortung Ihrer "unbeantworteten" Frage, warum Ihr 32-Bit-Betriebssystem nicht auf den RAM zugreifen kann, falls vorhanden: Lizenzierung. Sie entscheiden sich dafür, dass RAM für ihre 32-Bit-Betriebssysteme nicht über 4 GB liegen darf, es sei denn, Sie zahlen für eine Rechenzentrumsversion (deshalb verkaufen sie eine Rechenzentrumsversion. Wenn Sie so viel RAM benötigen, können Sie sich wahrscheinlich mehr ausgeben.) Geld auf einem Betriebssystem).

Ah, ich habe schon von PAE gehört, aber nie nachgeforscht. Es scheint in der Serverarchitektur weitgehend verwendet worden zu sein, scheint also nicht für eine 32-Bit-Installation von Windows 7 zu gelten, da in der Liste angegeben ist, dass W7x86 nur bis zu 4 GB erlaubt series0ne vor 11 Jahren 0
@ series0ne: Dies ist ein Lizenzproblem. Scott erwähnt dies sogar in seiner Antwort. 0xC0000022L vor 11 Jahren 0
@ 0xC0000022L Um fair zu sein, habe ich den Lizenzteil nach seinem Kommentar als Edit hinzugefügt, aber aufgrund des 4-minütigen Editierfensters sieht es so aus, als hätte ich ihn gepostet, bevor er den Kommentar gepostet hat. Scott Chamberlain vor 11 Jahren 1
@ series0ne PEA gilt auch für Windows XP 32 Bit, also nicht nur für Server-Betriebssysteme. Es wurde in Windows 7 (und möglicherweise bereits in Vista) entfernt, da es nicht mehr benötigt wird. 64-Bit-CPUs sind seit ~ 1979 im Einsatz, und sie sind jetzt so üblich, dass davon ausgegangen werden kann, dass jeder neu installierte Computer einen besitzt, und daher kann die X64-Version mit weniger Aufwand verwendet werden. Hennes vor 11 Jahren 0
Für PAE ist ein Seitentabellen-Switcheroo erforderlich, was in Bezug auf die Leistung kostspielig ist. vonbrand vor 11 Jahren 1
search for 32-bit vs PAE performance benchmarks and you'll see that PAE is not a good solution. http://www.phoronix.com/scan.php?page=article&item=ubuntu_32_pae&num=1 phuclv vor 10 Jahren 0
Das ist ein Mythos. Der Aufwand aufgrund von PAE ist winzig. Und wenn Sie PAE nicht mögen, sollten Sie x64 wirklich hassen, da die Seitentabellenstruktur auf x64 genau wie PAE aussieht, nur mit einer weiteren Tabellenebene oben und mit mehr Bits für PFNs in den PxE. Jamie Hanrahan vor 9 Jahren 3
PAE wurde "nicht in Windows 7 entfernt, da es nicht mehr benötigt wird", es ist immer noch in Windows 7 x86 vorhanden - es ist lediglich standardmäßig vorhanden und muss nicht aktiviert werden. Jamie Hanrahan vor 9 Jahren 1
Was ist mit Linux? SaidbakR vor 8 Jahren 0
1
OCDtech

Weil es dafür keinen praktischen Grund gibt. Physikalische Adresserweiterungen bieten weitgehend die gleiche Funktionalität, und ihre Verwendung ist unter den Benutzern immer noch sehr begrenzt. In den Windows 3.1-Tagen gab es Einschränkungen, die heute einfach nicht vorhanden sind.

This really does not have enough information to backup your statements. Windows 3.1 is a 16-bit operating system. One must remember that in 1992 **2MB** of memory was over $300. Ramhound vor 11 Jahren 1
You're Feb 22 comment, and Scott Chamberlin's explanation pretty much cover what I was driving at. They do leave out descriptions of why extensible segmented pagination was used in DOS/Win16, but not in later Windows. I didn't include that, because it would not contribute directly to answering the OP's question. OCDtech vor 11 Jahren 0
Its my view that answers should stand alone. Your comment adds enough information to resolve my problems with your answer. Ramhound vor 11 Jahren 0
@OCDtech: Das segmentierte 8086-Modell würde es einer objektorientierten Sprache ermöglichen, 2-Byte-Objektreferenzen zu verwenden, um Objekte zu identifizieren, die an 16-Byte-Grenzen ausgerichtet sind. Die Sprachen waren jedoch nicht für die effektive Verwendung von Segmenten geeignet. Das 80286-Modell hat für solche Programme einen ungeheuren Mehraufwand zur Folge, und die Erweiterung auf 80386 würde ein Segment-pro-Objekt-Schema völlig nutzlos machen. supercat vor 9 Jahren 1
1
William

8-Bit-CPUs hatten normalerweise einen 16-Bit-Adressbus. (Motorola hatte einen einheitlichen Adressbus, RAM und Peripherie-E / A hatten denselben Adressraum gemeinsam. Intel entschied sich für die Aufteilung der beiden. Bei Intel hatten die IO-Adressgrenzen der 8088 und 8086 die Grenzen der 8080 & 8085 CPUs.)

Intels 8088 und 8086 hatten einen 20-Bit-Speicheradressbus (1 MB), während der 68000 von Motorola einen 24-Bit-Adressbus (16 MB) hatte. IIRC sprang der [80] 286 auf einen 24-Bit-Adressbus. Beide wurden später mit [80] 386 und 68020 auf einen 32-Bit-Adressbus erweitert.) Bei den Pentium-Chips wurde der Adressbus auf 64 Bit erweitert. (Ich denke, die PowerPC-Chips von Motorola / IBM gingen auch mit einem 64-Bit-Adressbus.)

Der unterhalb und bis zu dem Maximum verfügbare Speicher, auf den die CPU direkt zugreifen kann, wurde nur durch die unterstützenden Hardware-Chips (Chipset) und das Betriebssystem begrenzt. Bill Gates war in der Vergangenheit dafür bekannt, dass niemand mehr als 640 KB RAM benötigt. Daher hat sich DOS nie weiterentwickelt, um direkt auf mehr RAM zuzugreifen. Mit HiMem.sys und EMM386 wurde DOS erweitert, um auf mehr "oberen" Speicher zuzugreifen, wobei EMM386 für den direkten Zugriff auf den gesamten verfügbaren RAM verwendet wurde. HiMem.sys war weniger flexibel und konnte den zusätzlichen Arbeitsspeicher grundsätzlich für die Speicherung verwenden.

Bei einem Speicher, der diese Grenze überschreitet, musste eine MMU (Memory Management Unit) den Speicher in Segmente aufteilen und in den adressierbaren Speicherplatz der CPU abbilden. So können CoCo 3, Commodore 128 und andere 8-Bit-Computer auf mehr als 64 KB RAM zugreifen.

Günstiger ist es jetzt, den virtuellen Speicher zu verwenden, um die physischen Speichergrenzen zu überschreiten, allerdings mit den vom Betriebssystem vorgegebenen Grenzen.

0
Jamie Hanrahan

Die theoretischen Speichergrenzen bei 16-, 32- und 64-Bit-Computern lauten wie folgt:

Der grundlegende Fehler hier ist der Gedanke, dass die "Bitbreite" des Prozessors, die normalerweise die Größe der Universalregister der Maschine ist, notwendigerweise dieselbe ist wie die Breite der RAM-Adressen.

In x86 mit aktiviertem Paging, aber ohne PAE, werden die von Programm und Betriebssystemcode verwendeten Adressen von Intel als "lineare Adressen" bezeichnet - wir nennen sie normalerweise "virtuelle Adressen". Sie sind 32 Bit breit. Dies ermöglicht einen virtuellen Adressraum von 4 GiB.

Es ist jedoch mehr oder weniger Zufall, lediglich ein Artefakt des Formats von Seitentabelleneinträgen, dass die Größe einer physikalischen Adresse (RAM) ebenfalls 32 Bit beträgt.

Bei PAE sind letztere 36 Bits (in späteren Implementierungen zuerst ... breiter). Nur weil es sich beispielsweise um eine "32-Bit-Maschine" handelt, bedeutet dies nicht, dass physikalische Speicheradressen auf 32 Bit begrenzt sind.

Die Industrie hat eine lange Geschichte von Maschinen, deren "Bitbreite" nicht mit ihrer maximalen physikalischen Adressgröße übereinstimmt. Beispielsweise definiert die VAX-Architektur eine 32-Bit-Maschine, und virtuelle Adressen (dh die Adressen, die vom Code verwendet werden, wenn die Adressumsetzung aktiviert ist) sind zwar 32 Bit breit ... aber die physischen Adressen der VAX sind nur 30 Bit breit. Die Hälfte des physischen Adressraums ist für E / A-Vorrichtungsregister reserviert, so dass der maximale Arbeitsspeicher nur 512 MB betrug.

Selbst ohne Hardware für die Adressübersetzung ist es nicht notwendigerweise der Fall, dass die "Bitbreite" der Maschine die maximale RAM-Adresse definiert. Beispiel: Die CDC-Serie "Upper 3000" war eine 36-Bit-Maschine. Glaubst du, sie könnten 64 GB RAM ansprechen? Nicht schwer Diese Maschinen kamen Mitte der 60er Jahre heraus! Damals hatten wir nicht einmal 64 GB Speicherplatz . (Die CDC 6000-Serie war eine 60-Bit-Maschine. Muss ich weitermachen?)

Und vergessen Sie nicht Systeme, die keine 8-Bit pro RAM-Zelle verwenden. (EG: 16/16 = 128 K max, 32/32 = 16 G max, 32/64 = 32 G Max) SkyCharger vor 7 Jahren 0