พื้นที่ที่อยู่แบบ 32 บิตหมายความว่าคุณมีที่ว่างสำหรับที่อยู่ 4GB ในอุดมคติเคอร์เนลชอบที่จะสามารถแมปหน่วยความจำกายภาพทั้งหมดหน่วยความจำทั้งหมดของงานปัจจุบันและหน่วยความจำของตัวเองทั้งหมด หากหน่วยความจำกายภาพใช้หน่วยความจำ 4GB เพียงอย่างเดียวนั่นจะไม่ทำงาน ดังนั้นหน่วยความจำกายภาพจะถูกแบ่งออกเป็นหน่วยความจำต่ำซึ่งถูกแมปตลอดเวลาและหน่วยความจำสูงซึ่งจะต้องถูกแมปเมื่อใช้งาน ยกเว้นว่าคุณกำลังใช้เคอร์เนลที่มีการแพตช์บนสถาปัตยกรรม ix86 พื้นที่แอดเดรส 128MB นั้นใช้สำหรับเคอร์เนลโค้ดและโครงสร้างข้อมูลและ 896MB ใช้สำหรับการแมปหน่วยความจำกายภาพ (รวม 1GB)
การอ่านพื้นหลังเกี่ยวกับความซับซ้อนของการจัดการหน่วยความจำเมื่อพื้นที่ที่อยู่ของคุณไม่ใหญ่กว่าหน่วยความจำทั้งหมด:
ข้อความที่ตัดตอนมาจากบันทึกเคอร์เนลของคุณ:
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
ที่นี่คุณมีหน่วยความจำต่ำ 887MB: สูงสุดทางทฤษฎี 896MB ลบบัฟเฟอร์ DMA ไม่กี่ MB (โซนหน่วยความจำที่ใช้ในการสื่อสารกับอุปกรณ์ฮาร์ดแวร์)
หน่วยความจำกายภาพของคุณ 3328MB ถูกแมปที่ที่อยู่ด้านล่าง 4GB และ 768MB ถูกแมปที่ที่อยู่เหนือ 4GB (ช่วง 0x100000000–0x130000000) คุณไม่ได้รับการเข้าถึง 768MB เหล่านี้ซึ่งอธิบายว่าทำไมคุณมี 3242MB เท่านั้น (RAM 4096MB ลบ 768MB ไม่สามารถเข้าถึงได้ลบด้วยบัฟเฟอร์ DMA 9MB 9MB ลบโดยเคอร์เนลใช้สำหรับรหัสและข้อมูล) ฉันไม่รู้ว่าทำไม BIOS แมป RAM บางตัวเหนือเครื่องหมาย 4GB แต่เป็นจุดข้อมูลฉันโพสต์สิ่งนี้จากพีซีที่มี RAM 4GB ที่คล้ายกับมีการแมป RAM ที่ 0x100000000–0x130000000
การทำแผนที่หน่วยความจำกายภาพเหนือ 4GB ต้องใช้PAE PAE มีค่าใช้จ่ายเล็ก ๆ น้อย ๆ (โดยเฉพาะมันต้องการโครงสร้างข้อมูลที่ใหญ่กว่าในตัวจัดการหน่วยความจำ) ดังนั้นจึงไม่ได้เปิดใช้งานอย่างเป็นระบบ เคอร์เนล Ubuntu เริ่มต้นถูกคอมไพล์โดยไม่มีการสนับสนุน PAE รับ-generic-pae
เคอร์เนล เพื่อให้สามารถเข้าถึง RAM ได้สูงสุด 64GB
TL, DR: Linux ทำงานได้ตามที่คาดไว้ เฟิร์มแวร์ไม่เป็นประโยชน์ รับเคอร์เนลที่เปิดใช้งาน PAE