หากพื้นที่ที่อยู่เสมือนสามารถมีขนาดใหญ่กว่าพื้นที่ที่อยู่ทางกายภาพการแมปที่อยู่จะถูกเก็บไว้ในหน่วยความจำอย่างไร


14

สมมติว่าเรากำลังทำงานกับระบบที่มี 40 บิตที่อยู่ทางกายภาพ พื้นที่แอดเดรสฟิสิคัลทั้งหมด (สมมติว่าหน่วยความจำไบต์สามารถกำหนดแอดเดรสได้) คือไบต์หรือ 1 TiB และถ้าที่อยู่เสมือนมีความยาว 48 บิตนั่นหมายความว่ามีที่อยู่เพิ่มเติมให้กับหน่วยความจำเสมือนมากกว่าที่อยู่ในหน่วยความจำกายภาพ240

สิ่งนี้สมเหตุสมผลสำหรับฉันเพราะที่อยู่ "เกิน" สามารถอ้างถึงตำแหน่งที่ตั้งของฮาร์ดดิสก์ได้เช่นกัน อย่างไรก็ตามสิ่งที่ฉันไม่เข้าใจคือการแปลระหว่างที่อยู่เสมือนและที่อยู่จริงเกิดขึ้นได้อย่างไร ฉันคิดว่ามีการทำแผนที่จัดเก็บไว้ที่ไหนสักแห่งที่เชื่อมโยงสถานที่ VAS กับสถานที่ทางกายภาพ หากมีที่อยู่เสมือนมากกว่าที่ตั้งทางกายภาพการแมปเหล่านี้ทั้งหมดอาจถูกเก็บไว้ในหน่วยความจำได้อย่างไร อย่างน้อยคุณจะต้องมี 48 บิตในการจัดเก็บที่อยู่เสมือนแต่ละแห่งจากนั้นอีก 40 แห่งเพื่อจัดเก็บตำแหน่งทางกายภาพที่จะจับคู่ เห็นได้ชัดว่าคุณไม่สามารถจัดเก็บการแมป 1: 1 ของแต่ละที่อยู่เสมือนกับการจับคู่ทางกายภาพได้เนื่องจากการแมปทุกตำแหน่งจะใช้หน่วยความจำมากกว่าหน่วยความจำกายภาพ

ฉันหายไปตรงนี้อะไรนะ?


คุณไม่สามารถทำได้แม้จะมีหน่วยความจำและพื้นที่ที่อยู่จำนวนเล็กน้อย หากคุณมีที่อยู่ทางกายภาพ 16 บิตและที่อยู่เสมือน 16 บิตคุณยังคงไม่สามารถจัดเก็บการแมป 1: 1 ทั้งหมดได้!
user253751

2
ปัญหาซับซ้อนกว่าที่คุณคิด คอมพิวเตอร์ไม่ค่อยมีหน่วยความจำ TB ดังนั้นหน่วยความจำกายภาพจึงเป็นวิธีที่น้อยกว่าพื้นที่ที่อยู่เสมือน แย่ลงอีกครั้ง: แต่ละกระบวนการมีพื้นที่ที่อยู่เสมือนแยกกันโดยสิ้นเชิง!
Mooing Duck

นอกเหนือจากที่ตั้งของฮาร์ดดิสก์คุณมีบิต / พื้นที่ว่างเหลือทิ้ง ตัวอย่างเช่นคุณสามารถมีพื้นที่ขนาดใหญ่ด้านล่างสแตกที่ไม่ได้แมปเพื่อป้องกันไม่ให้มีการล้นเกิน คุณสามารถสุ่มสิ่งที่คุณโหลดที่ป้องกันไม่ให้ระดับของการโจมตีอีก ต้องการแสดงด้วยบิตถ้าที่อยู่เป็นของเคอร์เนลหรือผู้ใช้ - ไปข้างหน้าแม้ว่าคุณจะเสียพื้นที่ครึ่งหนึ่ง ในขณะที่หนังสือเรียนส่วนใหญ่มุ่งเน้นที่การแยกแยะแง่มุมของหน่วยความจำเสมือน แต่ยังมีอีกมาก
Maciej Piechotka

(โปรดทราบว่าที่อยู่อาจเป็นชื่อแทนซึ่งบางครั้งก็มีประโยชน์ดังนั้น VA A และที่อยู่ B อ้างถึง PA P เหมือนกันแม้ว่า A! = B. )
Maciej Piechotka

คำตอบ:


26

เคล็ดลับในการทำงานนี้คือ "การเพจ" เมื่อนำข้อมูลจากฮาร์ดดิสก์ไปสู่หน่วยความจำกายภาพคุณไม่เพียงแค่นำไบต์มาสองสามตัว คุณนำมาทั้งหน้า ขนาด 4k ไบต์เป็นขนาดหน้ากระดาษทั่วไปมาก

หากคุณเพียงแค่ต้องติดตามหน้าเว็บไม่ใช่แต่ละไบต์การทำแผนที่จะถูกกว่ามาก หากคุณมีพื้นที่ที่อยู่ 48 บิตและ 4096 ไบต์คุณจะต้องติดตามว่าหน้า 2 ^ 36 ใด (ประมาณ 69 พันล้านหน้า) นั่นง่ายกว่ามาก! บันทึกตำแหน่งที่พบหน้าทั้งหมดเรียกว่า "ตารางหน้า"

หากคุณต้องการหน่วยความจำ 1-256 TiB จริง ๆ ให้เพิ่มสักสองสามกิกะไบต์เพื่อเก็บตารางหน้านี้ไม่ใช่เรื่องใหญ่ อย่างไรก็ตามในทางปฏิบัติเราจะทำสิ่งต่าง ๆ เช่นใช้ตารางหน้าหลายระดับซึ่งช่วยให้เรามีประสิทธิภาพมากขึ้นโดยเก็บหน้าไว้เฉพาะสำหรับพื้นที่ที่อยู่ที่เราใช้งานอยู่


6
ไฟล์หน้าเป็นคำ Windows สำหรับไฟล์ทางกายภาพบนดิสก์ที่มีเนื้อหาของเฟรมหน้าทางกายภาพที่ถูกเรียกคืนเนื่องจากหน่วยความจำไม่เพียงพอซึ่งมีเนื้อหาที่ต้องเก็บไว้ ถ้าฉันไม่ผิด, โครงสร้างข้อมูลการทำแผนที่ที่อยู่หน้าเสมือนไปยังที่อยู่หน้าทางกายภาพควรจะเรียกว่าหน้าตาราง
Reinstate Monica - ζ--

@hexafraction ฉันคิดว่าคุณพูดถูก ฉันได้ทำการเปลี่ยนแปลง
Cort Ammon

2
เมื่อหน่วยความจำจริงมีขนาดใหญ่อีกวิธีหนึ่งในการลดหน่วยความจำที่จำเป็นสำหรับตารางหน้าคือการอนุญาตสำหรับหน้าขนาดใหญ่ x86 มีตัวเลือกในการผสม 4 หน้า KiB กับหน้า 2/4 MiB
Nate Eldredge
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.