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?
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).
quelle
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.
quelle
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.
quelle
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?)
quelle