Speicherbeschränkungen in 16-, 32- und 64-Bit-Systemen

17

Die theoretischen Speichergrenzen in 16-, 32- und 64-Bit-Maschinen lauten wie folgt:

  • 16 Bit = 65.536 Byte (64 Kilobyte)

  • 32 Bit = 4.294.967.296 Byte (4 Gigabyte)

  • 64 Bit = 18.446.744.073.709.551.616 (16 Exabytes)

Ich erinnere mich, dass seit DOS / Windows 3.11 Tagen 16-Bit-Speicher in Segmente unterteilt werden konnte, sodass ein 16-Bit-Computer auf mehr Speicher als 64 Kilobyte zugreifen konnte.

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

Meine Frage lautet also: Wenn 16-Bit-Betriebssysteme aufgrund der Speichersegmentierung einen Speicherzugriff von mehr als 64 KB zulassen, warum folgen 32-Bit-Computer dann nicht demselben Prinzip?

Matthew Layton
quelle

Antworten:

15

In diesem Fall wird das System als Physical Address Extension (PAE) bezeichnet . Hier ist eine Liste der Windows-Betriebssysteme und ihres maximalen Arbeitsspeichers. Jedes 32-Bit-System, das mehr als 4 GB RAM zulässt, verwendet PAE, um auf den Arbeitsspeicher zuzugreifen (Windows 2003 R2 Datacenter 32-Bit ermöglicht beispielsweise 128 GB RAM).


Tatsächlich erfordert Windows 8 eine PAE-fähige CPU als Mindestanforderung .


Um Ihre "nicht gestellte" Frage zu beantworten, warum Ihr 32-Bit-Betriebssystem nicht auf den RAM zugreifen kann, falls vorhanden: Lizenzierung. Sie lassen nicht zu, dass der Arbeitsspeicher für ihre 32-Bit-Betriebssysteme mehr als 4 GB beträgt, es sei denn, Sie zahlen für eine Rechenzentrums-Edition (aus diesem Grund verkaufen sie eine Rechenzentrums-Edition. Wenn Sie so viel RAM benötigen , können Sie es sich wahrscheinlich leisten, mehr Geld auszugeben Geld für ein Betriebssystem).

Scott Chamberlain
quelle
Ah, ich habe schon einmal von PAE gehört, es aber nie untersucht. Es scheint weitgehend in der Serverarchitektur verwendet zu werden, scheint also nicht für eine Windows 7 32-Bit-Installation zu gelten, da in der Liste angegeben ist, dass W7x86 nur bis zu 4 GB zulässt
Matthew Layton
1
@ 0xC0000022L Um fair zu sein, habe ich den Lizenzteil nach seinem Kommentar als Bearbeitung hinzugefügt, aber aufgrund des 4-minütigen Bearbeitungsfensters sieht es so aus, als hätte ich ihn gepostet, bevor er den Kommentar gepostet hat.
Scott Chamberlain
1
Für PAE ist es erforderlich, dass Page Table Switcheroo funktioniert, und das ist in Bezug auf die Leistung kostspielig.
Vonbrand
3
Das ist ein Mythos. Der durch PAE verursachte Overhead ist gering. Und wenn Sie PAE nicht mögen, sollten Sie x64 wirklich hassen, denn die Seitentabellenstruktur auf x64 sieht genauso aus wie PAE, nur mit einer zusätzlichen Tabellenebene und mehr Bits für PFNs in den PxEs.
Jamie Hanrahan
1
PAE wurde nicht "in Windows 7 entfernt, weil es nicht mehr benötigt wird", es ist in Windows 7 x86 immer noch vorhanden - es ist nur standardmäßig vorhanden, anstatt dass es aktiviert werden muss.
Jamie Hanrahan,
13

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

Denken Sie auch daran, dass die PAE-Unterstützung in Windows 32-Bit-Versionen eine Menge Geld kostet. XP kann normalerweise nicht einmal 4 GB RAM nutzen, da MS die PAE-Funktionen nicht aktiviert hat. Ein eng verwandter Kernel, Windows 2003 Server, unterstützt PAE. Selbst dort unterstützt Ihre "Standard Edition" jedoch nur bis zu 4 GiB (arbeitet jedoch um das BIOS-Speicherloch herum), während die teureren Editionen dann bis zu 64 GiB RAM zulassen. Gleiches gilt für 32-Bit Vista .

Diese Einschränkung wird jedoch nicht in allen Fällen von Windows auferlegt. Wenn dies der Fall ist, können Sie nach dem Booten eines PAE-fähigen Linux-Kernels immer noch die vollen 4 GiB (oder mehr) nutzen. Nicht so, einige Hardwarehersteller haben diese Einschränkung auf BIOS-Ebene eingeführt, obwohl die CPU und der Chipsatz PAE verarbeiten können.


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

0xC0000022L
quelle
Hmm, warum habe ich den Eindruck, dass Linus HIGHMEM.SYS und PAE wirklich hasst? : P
Karan
2
Ich verstehe, dass PAE ein Ärgernis für jeden Code ist, der mehr als ein paar Gigabyte Arbeitssatz benötigt, und für Code auf Systemebene, der mehrere Aufgaben von etwa zwei Gigabyten verwalten muss, es sei denn, eine einzelne Anwendung benötigt mehr als zwei gigs Ich würde davon ausgehen, dass PAE transparent ist. Darüber hinaus wäre PAE meiner Meinung nach auch besser als die weltweite Verwendung von 64-Bit-Zeigern in Fällen, in denen 3 GB RAM für allgemeine Zwecke sowie ein großer Festplatten-Cache oder ein temporäres Speicherlaufwerk erforderlich sind.
Supercat
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 aussprechen ... wenn der x64-Langmodus einfach das PAE-Schema annimmt und eine weitere Ebene der Seitentabelle hinzufügt!
Jamie Hanrahan
@JamieHanrahan: ... mindestens zwei auf neueren Systemen (aufgrund von Virtualisierung), was einige aufregende Möglichkeiten eröffnet. Seine (Linus ') Vergleiche stimmen nicht ganz, aber wenn es sich um ein Fremdwort handelt, können Metaphern helfen :) ... Ich denke, deshalb hat er es gewählt, um seine Aussage zu treffen.
0xC0000022L
2

8-Bit-CPUs hatten normalerweise einen 16-Bit-Adressbus. (Motorola hatte einen einheitlichen Adressbus, RAM und Peripherie-E / A teilten sich den gleichen Adressraum. Intel entschied sich, die beiden zu teilen. Im Fall von Intel wurden die Grenzwerte für die E / A-Adressen des 8088 und 8086 von den Grenzwerten des 8080 übernommen.) 8085 CPUs.)

Intel 8088 und 8086 verfügten über einen 20-Bit-Adressbus (1 MB), Motorola 68000 über einen 24-Bit-Adressbus (16 MB). IIRC sprang der [80] 286 auf einen 24-Bit-Adressbus. Beide wurden später mit dem [80] 386 bzw. dem 68020 auf einen 32-Bit-Adressbus erweitert.) Mit den Pentium-Chips wurde der Adressbus auf 64-Bit erweitert. (Ich denke, dass die Motorola / IBM Venture PowerPC-Chips auch 64-Bit-Adressbus sind.)

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

Ein Speicher, der diese Grenze überschreitet, erfordert, dass eine MMU (Speicherverwaltungseinheit) den Speicher in Segmente aufteilt und ihn dem adressierbaren Speicherbereich der CPU zuordnet. Auf diese Weise können der CoCo 3, der 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, obwohl dies durch das Betriebssystem vorgegeben ist.

Wilhelm
quelle
1

Weil es keinen praktischen Grund dafür gibt. Physische Adresserweiterungen ermöglichen weitgehend die gleiche Funktionalität, und ihre Verwendung ist bei den Benutzern immer noch sehr eingeschränkt. In den Windows 3.1-Tagen gab es Einschränkungen, die heute einfach nicht vorhanden sind.

OCDtech
quelle
1
Dies hat wirklich nicht genug Informationen, um Ihre Aussagen zu sichern. Windows 3.1 ist ein 16-Bit-Betriebssystem. Man muss bedenken, dass 1992 2 MB Speicher mehr als 300 US-Dollar waren.
Ramhound
Du bist ein Kommentar vom 22. Februar, und Scott Chamberlins Erklärung deckt ziemlich genau ab, was ich vorhatte. Sie lassen Beschreibungen darüber weg, warum die erweiterbare segmentierte Paginierung in DOS / Win16 verwendet wurde, aber nicht in späteren Windows. Das habe ich nicht aufgenommen, weil es nicht direkt zur Beantwortung der Frage des OP beitragen würde.
OCDtech
Ich bin der Meinung, dass Antworten für sich alleine stehen sollten. Ihr Kommentar fügt genügend Informationen hinzu, um meine Probleme mit Ihrer Antwort zu lösen.
Ramhound
1
@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, aber die Sprachen waren nicht gut gerüstet, um Segmente effektiv zu verwenden. Das 80286-Modell erlegt solchen Programmen einen ungeheuerlich höheren Overhead auf, und die Art und Weise, wie es beim 80386 erweitert wurde, würde ein Segment-pro-Objekt-Schema völlig unbrauchbar machen.
Supercat
0

Die theoretischen Speichergrenzen in 16-, 32- und 64-Bit-Maschinen sind wie folgt ...

Der fundamentale Fehler hierbei ist die Vorstellung, dass die "Bitbreite" des Prozessors, die normalerweise der Größe der Universalregister der Maschine entspricht, notwendigerweise der Breite der RAM-Adressen entspricht.

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

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

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

Die Branche hat eine lange Geschichte von Maschinen, deren "Bitbreite" nicht ihrer maximalen physikalischen Adressgröße entsprach. Die VAX-Architektur definiert beispielsweise eine 32-Bit-Maschine, und virtuelle Adressen (die Adressen, die nach dem Aktivieren der Adressumsetzung vom Code verwendet werden) sind in der Tat 32 Bit breit. Die physischen Adressen der VAX sind jedoch nur 30 Bit breit. und die Hälfte des physischen Adressraums ist für E / A-Geräteregister vorgesehen, sodass der maximale RAM nur 512 MiB betrug.

Auch ohne Adressumsetzungshardware ist es nicht unbedingt so, dass die "Bitbreite" der Maschine die maximale RAM-Adresse definiert. Beispiel: Die CDC-Serie "Upper 3000" bestand aus 36-Bit-Computern. Glauben Sie, sie könnten 64 GB RAM adressieren? Nicht schwer! Diese Maschinen kamen Mitte der 60er Jahre heraus! Wir konnten damals noch nicht einmal 64 GB Festplattenspeicher haben . (Die CDC 6000-Serie bestand aus 60-Bit-Computern. Muss ich fortfahren?)

Jamie Hanrahan
quelle
Und vergessen Sie nicht Systeme, die keine 8-Bit pro RAM-Zelle verwenden. (ZB: 16/16 = maximal 128 KB, 32/32 = maximal 16 GB, 32/64 = maximal 32 GB)
SkyCharger,