ฉันกำลังพยายามศึกษาหนังสือ "การทำความเข้าใจเคอร์เนล Linux" แต่ฉันหยุดไปที่ส่วน "เพจปกติ" ตอนนี้ ฉันเข้าใจแล้วว่าทำไมเพจถึงจำเป็นต้องมี แนวคิดภายใต้เพจคืออะไร แต่... ฉันไม่สามารถเข้าใจอะไรได้มากมาย เหตุใดการเพจของหน้าตารางจึงจำเป็น และมันทำงานอย่างไร ฉันหมายถึง ใช่ ขนาดของหน้าตารางหนึ่งหน้าจะใหญ่เกินไป แต่ถ้าในการแปลงระหว่างที่อยู่เชิงเส้นและที่อยู่จริง เคอร์เนลจะเลือกหน้าตารางบางหน้าตามส่วนแรกของ lin บวกกับมันต้องหาหน้าตารางทั้งชุดที่ไหนสักแห่งใน ram ดังนั้น... ทำไมไม่สร้างหน้าตารางขนาดยักษ์ขึ้นมาหน้าเดียวล่ะ ถ้าพื้นที่นั้นเปลืองไปแล้ว? จากนั้น หนังสือบอกว่าขนาดของแต่ละรายการในหน้าตารางเป็น 32 บิต แต่... ถ้าหน้ามีขนาด 4kb ทำไมไม่ใช้ข้อเท็จจริงนี้ล่ะ เรารู้ว่า 12 บิตสุดท้ายเป็น 0 แล้วทำไมไม่ปล่อยมันไว้โดยปริยายล่ะ? ฉันรู้ว่าสิ่งที่ฉันพูดทั้งหมดนั้นผิด ฉันพูดไปเพื่ออธิบายข้อสงสัยของฉันให้ดีขึ้น (ขออภัยที่ภาษาอังกฤษห่วย)
การเพจเพจทำงานอย่างไรในระบบยูนิกซ์?
คำตอบ (1)
การแบ่งตัวอธิบายหน้าออกเป็นหลายตารางมีประโยชน์เหล่านี้:
รายละเอียด หากโปรแกรมของคุณใช้เพียงสามเพจ (ข้อความ ข้อมูล สแต็ก) ตัวอธิบายเพจทั้งหมดเหล่านั้นอาจอยู่ในตารางหน้าเดียว และโอเวอร์เฮดของหน่วยความจำจะต่ำมาก - ตารางลีฟเพจหนึ่งตารางบวกโหนดภายในสองสามโหนด
ความเบาบาง. เช่นเดียวกับประสิทธิภาพ ตารางรูท (ไดเร็กทอรี) ต้องการเพียงรายการสำหรับส่วนของพื้นที่ที่อยู่ที่ถูกต้องเท่านั้น ตัวชี้ตารางที่เหลือสามารถตั้งค่าเป็นหน้าที่ไม่ถูกต้องได้ ดังนั้นจึงไม่จำเป็นต้องเติมข้อมูลเหล่านั้น
การแบ่งปัน มีความเป็นไปได้อย่างมากว่าไม่เพียงแต่หน่วยความจำเท่านั้น แต่ยังสามารถแชร์ตารางเพจระหว่างกระบวนการสำหรับอ็อบเจ็กต์หน่วยความจำแบบแบ่งใช้ขนาดใหญ่ได้ IIRC Solaris เรียกสิ่งนี้ว่า 'หน่วยความจำร่วมที่ใกล้ชิด' (ISM) ในทำนองเดียวกัน สิ่งต่างๆ เช่น การแมปเคอร์เนลอาจใช้ร่วมกันโดยสิ้นเชิงระหว่างหลายกระบวนการ
ผลงาน. สถาปัตยกรรม 64 บิตทั่วไปใช้พื้นที่ที่อยู่ 47 บิต ด้วยความละเอียดของหน้า 4k แผนที่เชิงเส้นจะต้องมีตัวอธิบายหน้า 2^35 ตัวแต่ละขนาด 8 ไบต์ แค่การทำให้ RAM เป็นศูนย์จะใช้เวลา 48 วินาทีกับ mac pro ที่ดังลั่น นั่นจะเป็นค่าใช้จ่ายในการเริ่มต้นกระบวนการ