Anda harus membaca dmesgnilai "Memory Akb / Bkb available" sebagai:
Ada A yang tersedia untuk digunakan sekarang, dan nomor bingkai halaman sistem tertinggi dikalikan dengan ukuran halaman adalah B.
Ini dari arch/x86/mm/init_64.c:
printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
"%ldk absent, %ldk reserved, %ldk data, %ldk init)\n",
nr_free_pages() << (PAGE_SHIFT-10),
max_pfn << (PAGE_SHIFT-10),
codesize >> 10,
absent_pages << (PAGE_SHIFT-10),
reservedpages << (PAGE_SHIFT-10),
datasize >> 10,
initsize >> 10);
nr_free_pages()mengembalikan jumlah memori fisik, yang dikelola oleh kernel, yang saat ini tidak digunakan. max_pfnadalah nomor bingkai halaman tertinggi ( PAGE_SHIFTpergeseran mengubahnya menjadi kb). Nomor bingkai halaman tertinggi dapat (jauh) lebih tinggi dari yang Anda harapkan - pemetaan memori yang dilakukan oleh BIOS dapat berisi lubang.
Berapa banyak lubang ini diambil dilacak oleh absent_pagesvariabel, ditampilkan sebagai kB absent. Ini seharusnya menjelaskan sebagian besar perbedaan antara angka kedua dalam output "tersedia" dan RAM Anda yang sebenarnya terpasang.
Anda dapat BIOS-e820masuk dmesguntuk "melihat" lubang ini. Peta memori ditampilkan di sana (tepat di atas dmesgoutput setelah boot). Anda harus dapat melihat pada alamat fisik apa Anda memiliki RAM yang nyata dan dapat digunakan.
(Keanehan x86 lainnya dan area memori yang dicadangkan mungkin merupakan penyebab sisanya - saya tidak tahu detailnya di sana.)
MemTotaldalam /proc/meminfomenunjukkan RAM tersedia untuk digunakan. Tepat di akhir urutan boot, kernel membebaskan initdata yang tidak diperlukan lagi, sehingga nilai yang dilaporkan /proc/meminfobisa sedikit lebih tinggi daripada apa yang dicetak oleh kernel selama bagian awal dari urutan boot.
( meminfoMenggunakan secara tidak langsung totalram_pagesuntuk tampilan itu. Untuk x86_64, ini dihitung arch/x86/mm/init_64.cjuga melalui free_all_bootmem()yang digunakan mm/bootmem.cuntuk kernel non-NUMA.)