Ein 32-Bit-Adressraum bedeutet, dass Sie Platz für 4 GB an Adressen haben. Im Idealfall möchte der Kernel in der Lage sein, den gesamten physischen Speicher, den gesamten Speicher der aktuellen Aufgabe und den gesamten eigenen Speicher abzubilden. Wenn der physische Speicher allein alle verfügbaren 4 GB belegt, funktioniert das nicht. Der physische Speicher wird also in Low-Memory, der ständig gemappt wird, und High-Memory, der bei Verwendung gemappt werden muss, unterteilt. Sofern Sie keinen gepatchten Kernel ausführen, sind auf der ix86-Architektur 128 MB Adressraum für Kernel-Code und Datenstrukturen und 896 MB für die Abbildung des physischen Speichers (insgesamt 1 GB) reserviert.
Hintergrundinformationen zur Komplexität der Speicherverwaltung, wenn Ihr Adressraum nicht bequem größer ist als Ihr Gesamtspeicher:
- Hoher Arbeitsspeicher im Linux-Memory-Manager-Wiki
- Hoher Arbeitsspeicher im Linux-Kernel auf Kernel Trap
- Memory-Mapping-Kapitel in LDD3
Auszüge aus Ihren Kernel-Protokollen:
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA 0x00000000 -> 0x00001000
Normal 0x00001000 -> 0x000377fe
HighMem 0x000377fe -> 0x000cdce0
Hier haben Sie 887 MB wenig Speicher:das theoretische Maximum von 896 MB abzüglich einiger MB DMA-Puffer (Speicherzonen, die für die Kommunikation mit Hardwaregeräten verwendet werden).
Von Ihrem physischen Speicher werden 3328 MB auf Adressen unter 4 GB und 768 MB auf Adressen über 4 GB abgebildet (Bereich 0x100000000–0x130000000). Sie erhalten keinen Zugriff auf diese 768 MB, was erklärt, warum Ihnen nur 3242 MB zur Verfügung stehen (4096 MB RAM minus 768 MB unzugänglich minus 9 MB DMA-Puffer minus 75 MB, die vom Kernel selbst für Code und Daten verwendet werden). Ich weiß nicht, warum das BIOS etwas RAM über der 4-GB-Marke zuordnet, aber als Datenpunkt poste ich dies von einem PC mit 4 GB RAM, der ebenfalls RAM bei 0x100000000–0x130000000 zugeordnet hat.
Das Zuordnen von physischem Speicher über 4 GB erfordert die Verwendung von PAE. PAE führt zu einem geringen Leistungsmehraufwand (insbesondere erfordert es größere Datenstrukturen im Speichermanager), sodass es nicht systematisch aktiviert wird. Der standardmäßige Ubuntu-Kernel wird ohne PAE-Unterstützung kompiliert. Holen Sie sich den -generic-pae
Kernel um auf bis zu 64 GB RAM zugreifen zu können.
TL,DR:Linux funktioniert wie erwartet. Die Firmware ist nicht so hilfreich. Holen Sie sich einen PAE-fähigen Kernel.