GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum zeigt mein System nur 3,2 GiB RAM an, wenn ich definitiv 4,0 GiB habe

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.


Linux
  1. Warum wird diese Shell-Pipeline beendet?

  2. Warum ruft popen() eine Shell auf, um einen Prozess auszuführen?

  3. Warum zeigt yum updateinfo nicht alle Updates an?

  4. Warum zeigen der Befehl free und dmidecode unterschiedliche Werte für RAM an?

  5. Warum gibt slabtop -o nur die ersten 23 Zeilen zurück, wenn der Befehl weitergeleitet wird?

Warum zeigt „ls -all“ für einige Dateien die Uhrzeit an, für andere jedoch nur das Jahr?

Warum hat Ifs in `while Ifs=Read..` keine Auswirkung?

Linux – System hängt, wenn der Speicher ausgeht?

Warum hat „/“ einen „..“-Eintrag?

Warum sind bei Shotwell die X- und Y-Positionen umgekehrt, wenn Crop verwendet wird?

Welche Prozesskiller hat Linux?