รูปต่อไปนี้แสดงวิธีแบ่งพื้นที่ที่อยู่เสมือนของกระบวนการ 32 บิต:
แต่พื้นที่ที่อยู่เสมือนของกระบวนการ 64 บิตนั้นถูกแบ่งออกอย่างไร
รูปต่อไปนี้แสดงวิธีแบ่งพื้นที่ที่อยู่เสมือนของกระบวนการ 32 บิต:
แต่พื้นที่ที่อยู่เสมือนของกระบวนการ 64 บิตนั้นถูกแบ่งออกอย่างไร
คำตอบ:
แม็พหน่วยความจำเสมือน 64 บิต x86 แบ่งพื้นที่ที่อยู่ออกเป็นสองส่วนล่าง (พร้อมบิตสูงสุดเป็น 0) คือพื้นที่ผู้ใช้ส่วนบน (ที่มีบิตสูงสุดตั้งเป็น 1) คือเคอร์เนลสเปซ (โปรดทราบว่า x86-64 กำหนดที่อยู่ "บัญญัติ" "ครึ่งล่าง" และ "ครึ่งสูงกว่า" โดยมีจำนวนบิต จำกัด ที่ 48 หรือ 56 ได้อย่างมีประสิทธิภาพดูวิกิพีเดียสำหรับรายละเอียด)
แผนที่ที่สมบูรณ์เป็นเอกสารในรายละเอียดใน kernel ; ขณะนี้ดูเหมือนว่า
========================================================================================
Start addr | Offset | End addr | Size | VM area description
========================================================================================
| | | |
0000000000000000 | 0 | 00007fffffffffff | 128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
| | | |
0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
| | | |
ffff800000000000 | -128 TB | ffffffffffffffff | 128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________
ด้วยที่อยู่เสมือน 48 บิต (ตัวแปร 56 บิตมีโครงสร้างเดียวกันกับ 64 PB ของที่อยู่ที่สามารถใช้งานได้ทั้งสองด้านของรู 16K PB)
แผนที่หน่วยความจำ“ 64- บิต” นั้นแตกต่างจากเคสแบบ 32 บิตซึ่งเป็นภาพสะท้อนโดยตรงของข้อ จำกัด ด้านฮาร์ดแวร์