GNU/Linux >> Belajar Linux >  >> Linux

Mengapa sistem saya hanya menampilkan RAM 3,2 GiB padahal saya pasti memiliki 4,0 GiB

Ruang alamat 32-bit berarti Anda memiliki ruang untuk alamat 4GB. Idealnya kernel ingin dapat memetakan semua memori fisik, semua memori dari tugas saat ini, dan semua memorinya sendiri. Jika memori fisik saja menggunakan 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 128 MB dikhususkan untuk kode kernel dan struktur data, dan 896 MB dikhususkan untuk memetakan memori fisik (untuk total 1 GB).

Pembacaan latar belakang tentang kompleksitas manajemen memori saat ruang alamat Anda tidak lebih besar dari total memori Anda:

  • Memori tinggi di wiki pengelola memori Linux
  • Memori tinggi di kernel Linux pada Kernel Trap
  • Bab pemetaan memori di LDD3

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 teoretis 896MB dikurangi beberapa MB buffer DMA (zona memori yang digunakan untuk berkomunikasi dengan 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 dikurangi 768MB tidak dapat diakses dikurangi 9MB buffer DMA dikurangi 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 poin data, saya memposting ini dari PC dengan RAM 4GB yang juga memiliki RAM yang dipetakan pada 0x100000000–0x130000000.

Memetakan memori fisik di atas 4 GB memerlukan penggunaan PAE. PAE menimbulkan sedikit overhead kinerja (khususnya, memerlukan struktur data yang lebih besar di pengelola memori), sehingga tidak diaktifkan secara sistematis. Kernel default Ubuntu dikompilasi tanpa dukungan PAE. Dapatkan -generic-pae inti untuk dapat mengakses hingga 64GB RAM.

TL, DR:Linux berfungsi seperti yang diharapkan. Firmware tidak begitu membantu. Dapatkan kernel yang mendukung PAE.


Linux
  1. Linux – Mengapa Linux Menampilkan Memori Lebih Banyak Dan Lebih Sedikit Daripada Yang Saya Instal Secara Fisik?

  2. Dalam `sementara Ifs=Read..`, Mengapa Ifs Tidak Berpengaruh?

  3. Linux – Sistem Menggantung Saat Kehabisan Memori?

  1. Mengapa pipa shell ini keluar?

  2. Mengapa yum updateinfo tidak menampilkan semua pembaruan?

  3. Sistem hang saat kehabisan memori

  1. Apa itu POSIX? Mengapa Penting bagi Pengguna Linux/UNIX?

  2. Linux – Mengapa Linux Mengizinkan 'init=/bin/bash'?

  3. Berapa banyak RAM yang digunakan kernel?