Ruang alamat 32-bit berarti Anda memiliki ruang untuk 4GB alamat. Idealnya kernel suka bisa memetakan semua memori fisik, semua memori dari tugas saat ini, dan semua memori sendiri. Jika memori fisik saja mengambil semua 4GB yang tersedia, itu tidak akan berfungsi. Jadi memori fisik dibagi menjadi memori rendah, yang dipetakan sepanjang waktu, dan memori tinggi, yang harus dipetakan saat digunakan. Kecuali Anda menjalankan kernel yang ditambal, pada arsitektur ix86, ruang alamat 128MB dikhususkan untuk kode kernel dan struktur data, dan 896MB dikhususkan untuk memetakan memori fisik (untuk total 1GB).
Bacaan latar belakang tentang kompleksitas manajemen memori ketika ruang alamat Anda tidak lebih nyaman dari total memori Anda:
Kutipan dari log kernel Anda:
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
Di sini Anda memiliki memori rendah 887MB: maksimum teoritis 896MB dikurangi beberapa MB buffer DMA (zona memori yang digunakan untuk berkomunikasi dengan perangkat perangkat keras).
Dari memori fisik Anda, 3328MB dipetakan pada alamat di bawah 4GB dan 768MB dipetakan pada alamat di atas 4GB (kisaran 0x100000000–0x130000000). Anda tidak mendapatkan akses ke 768MB ini, yang menjelaskan mengapa Anda hanya memiliki 3242MB yang tersedia (4096MB RAM minus 768MB tidak dapat diakses dikurangi 9MB buffer DMA minus 75MB yang digunakan oleh kernel itu sendiri untuk kode dan data). Saya tidak tahu mengapa BIOS memetakan beberapa RAM di atas tanda 4GB, tetapi sebagai titik data, saya memposting ini dari PC dengan 4GB RAM yang juga memiliki RAM yang dipetakan pada 0x100000000–0x130000000.
Memetakan memori fisik di atas 4GB membutuhkan penggunaan PAE . PAE mengeluarkan overhead kinerja kecil (khususnya, ini membutuhkan struktur data yang lebih besar di manajer memori), sehingga tidak diaktifkan secara sistematis. Kernel Ubuntu default dikompilasi tanpa dukungan PAE. Dapatkan -generic-pae
kernel untuk dapat mengakses hingga 64GB RAM.
TL, DR: Linux berfungsi seperti yang diharapkan. Firmware tidak begitu membantu. Dapatkan kernel yang mendukung PAE.