ข้อ จำกัด เหล่านั้นไม่ได้มาจาก Debian หรือ Linux แต่มาจากฮาร์ดแวร์ สถาปัตยกรรมที่แตกต่างกัน (โปรเซสเซอร์และบัสหน่วยความจำ) มีข้อ จำกัด ต่างกัน
โปรเซสเซอร์ PC x86-64 ปัจจุบัน MMU ช่วย48 บิตของพื้นที่ที่อยู่เสมือน นั่นหมายความว่าพื้นที่ที่อยู่ถูก จำกัด ไว้ที่ 256TB ด้วยหนึ่งบิตเพื่อแยกความแตกต่างของเคอร์เนลที่อยู่จากที่อยู่ของผู้ใช้นั้นจะเหลือ 128TB สำหรับพื้นที่ที่อยู่ของกระบวนการ
บนโปรเซสเซอร์ x86-64 ปัจจุบันฟิสิคัลแอดเดรสสามารถใช้สูงสุด 48 บิตซึ่งหมายความว่าคุณสามารถมีสูงสุด 256TB ขีด จำกัด เพิ่มขึ้นอย่างต่อเนื่องตั้งแต่เปิดตัวสถาปัตยกรรม amd64 (จาก 40 บิตหากฉันจำได้ถูกต้อง) พื้นที่ที่อยู่แต่ละบิตมีค่าใช้จ่ายในการเดินสายและถอดรหัสตรรกะ (ซึ่งทำให้โปรเซสเซอร์มีราคาแพงช้าลงและร้อนขึ้น) ดังนั้นผู้ผลิตฮาร์ดแวร์จึงมีแรงจูงใจที่จะลดขนาดลง
Linux อนุญาตให้ที่อยู่ทางกายภาพสูงถึง 2 ^ 46 เท่านั้น (ดังนั้นคุณสามารถมีได้มากถึง 64TB) เพราะจะทำให้หน่วยความจำทางกายภาพถูกแมปในพื้นที่เคอร์เนลทั้งหมด โปรดจำไว้ว่าพื้นที่ที่อยู่มี 48 บิต หนึ่งบิตสำหรับเคอร์เนล / ผู้ใช้มี 47 บิตสำหรับพื้นที่แอดเดรสเคอร์เนล ครึ่งหนึ่งของที่อยู่หน่วยความจำกายภาพส่วนใหญ่โดยตรงและอีกครึ่งหนึ่งช่วยให้เคอร์เนลแผนที่สิ่งที่มันต้องการ (Linux สามารถรับมือกับหน่วยความจำกายภาพที่ไม่สามารถแมปได้เต็มรูปแบบในเวลาเดียวกัน แต่มีความซับซ้อนเพิ่มขึ้นดังนั้นจึงทำเฉพาะในแพลตฟอร์มที่ต้องการเช่นx86-32 กับ PAEและ armv7 กับ LPAE)
มันมีประโยชน์สำหรับหน่วยความจำเสมือนที่จะใหญ่กว่าหน่วยความจำกายภาพด้วยเหตุผลหลายประการ:
- มันช่วยให้เคอร์เนลแมปหน่วยความจำกายภาพทั้งหมดและมีพื้นที่เหลือสำหรับการแม็พเสมือน
- นอกเหนือจากการแมปหน่วยความจำกายภาพแล้วยังมีการแมปสลับไฟล์และไดรเวอร์อุปกรณ์
- มีประโยชน์ที่จะมีหน่วยความจำที่ไม่ได้แมปอยู่ในสถานที่: ปกป้องเพจเพื่อดักจับบัฟเฟอร์โอเวอร์โฟลต์โซนที่ไม่ได้แมปขนาดใหญ่เนื่องจากASLRเป็นต้น