Sen okumalısınız dmesgolarak "Hafıza Akb / BKB müsait" değerleri:
Şu anda kullanım için A var ve sistemin en yüksek sayfa çerçeve sayısı ile sayfa boyutunun çarpımı B'dir.
Bu 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()şu anda kullanılmayan çekirdek tarafından yönetilen fiziksel bellek miktarını döndürür. max_pfnen yüksek sayfa kare sayısıdır ( PAGE_SHIFTshift bunu kb'ye dönüştürür). En yüksek sayfa çerçeve sayısı beklediğinizden (çok) daha yüksek olabilir - BIOS tarafından yapılan bellek eşlemesinde delikler olabilir.
Bu deliklerin ne kadar yer aldığı absent_pagesdeğişken olarak izlenir kB absent. Bu, "mevcut" çıkıştaki ikinci sayı ile gerçek, kurulu RAM'iniz arasındaki farkın çoğunu açıklamalıdır.
Sen yakalamak için yazılması edebilirsiniz BIOS-e820içinde dmesg"görmek" bu deliklere. Bellek haritası burada görüntülenir ( dmesgönyüklemeden sonra çıktının hemen üstünde ). Hangi fiziksel adreslerin gerçek, kullanılabilir RAM'iniz olduğunu görebilmelisiniz.
(Diğer x86 tuhaflıkları ve ayrılmış bellek alanları muhtemelen geri kalanını açıklıyor - orada detayları bilmiyorum.)
MemTotalin /proc/meminfo, kullanılabilir RAM'i gösterir. Önyükleme sırasının hemen sonunda, çekirdek initartık gerek duymadığı verileri serbest bırakır , bu nedenle bildirilen değer /proc/meminfo, önyükleme sırasının ilk bölümleri sırasında çekirdeğin yazdırdığı değerden biraz daha yüksek olabilir.
( meminfoDolaylı kullanımları totalram_pagesbu görüntü için. X86_64, bu hesaplanan arch/x86/mm/init_64.cile çok free_all_bootmem()kendisi olan mm/bootmem.colmayan numa çekirdekler için.)