Sen okumalısınız dmesg
olarak "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_pfn
en yüksek sayfa kare sayısıdır ( PAGE_SHIFT
shift 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_pages
değ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-e820
iç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.)
MemTotal
in /proc/meminfo
, kullanılabilir RAM'i gösterir. Önyükleme sırasının hemen sonunda, çekirdek init
artı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.
( meminfo
Dolaylı kullanımları totalram_pages
bu görüntü için. X86_64, bu hesaplanan arch/x86/mm/init_64.c
ile çok free_all_bootmem()
kendisi olan mm/bootmem.c
olmayan numa çekirdekler için.)