การเพจเพจทำงานอย่างไรในระบบยูนิกซ์?

ฉันกำลังพยายามศึกษาหนังสือ "การทำความเข้าใจเคอร์เนล Linux" แต่ฉันหยุดไปที่ส่วน "เพจปกติ" ตอนนี้ ฉันเข้าใจแล้วว่าทำไมเพจถึงจำเป็นต้องมี แนวคิดภายใต้เพจคืออะไร แต่... ฉันไม่สามารถเข้าใจอะไรได้มากมาย เหตุใดการเพจของหน้าตารางจึงจำเป็น และมันทำงานอย่างไร ฉันหมายถึง ใช่ ขนาดของหน้าตารางหนึ่งหน้าจะใหญ่เกินไป แต่ถ้าในการแปลงระหว่างที่อยู่เชิงเส้นและที่อยู่จริง เคอร์เนลจะเลือกหน้าตารางบางหน้าตามส่วนแรกของ lin บวกกับมันต้องหาหน้าตารางทั้งชุดที่ไหนสักแห่งใน ram ดังนั้น... ทำไมไม่สร้างหน้าตารางขนาดยักษ์ขึ้นมาหน้าเดียวล่ะ ถ้าพื้นที่นั้นเปลืองไปแล้ว? จากนั้น หนังสือบอกว่าขนาดของแต่ละรายการในหน้าตารางเป็น 32 บิต แต่... ถ้าหน้ามีขนาด 4kb ทำไมไม่ใช้ข้อเท็จจริงนี้ล่ะ เรารู้ว่า 12 บิตสุดท้ายเป็น 0 แล้วทำไมไม่ปล่อยมันไว้โดยปริยายล่ะ? ฉันรู้ว่าสิ่งที่ฉันพูดทั้งหมดนั้นผิด ฉันพูดไปเพื่ออธิบายข้อสงสัยของฉันให้ดีขึ้น (ขออภัยที่ภาษาอังกฤษห่วย)


person umbesco    schedule 11.05.2020    source แหล่งที่มา
comment
ทำไมไม่ใช้ข้อเท็จจริงนี้? เรารู้ว่า 12 บิตสุดท้ายเป็น 0 แล้วทำไมไม่ปล่อยมันไว้โดยปริยายล่ะ? - จริง ๆ แล้ว 12 บิตสุดท้ายใช้สำหรับสิ่งที่ไม่ใช่ที่อยู่ ดูเช่น osdev   -  person Tsyvarev    schedule 11.05.2020


คำตอบ (1)


การแบ่งตัวอธิบายหน้าออกเป็นหลายตารางมีประโยชน์เหล่านี้:

  1. รายละเอียด หากโปรแกรมของคุณใช้เพียงสามเพจ (ข้อความ ข้อมูล สแต็ก) ตัวอธิบายเพจทั้งหมดเหล่านั้นอาจอยู่ในตารางหน้าเดียว และโอเวอร์เฮดของหน่วยความจำจะต่ำมาก - ตารางลีฟเพจหนึ่งตารางบวกโหนดภายในสองสามโหนด

  2. ความเบาบาง. เช่นเดียวกับประสิทธิภาพ ตารางรูท (ไดเร็กทอรี) ต้องการเพียงรายการสำหรับส่วนของพื้นที่ที่อยู่ที่ถูกต้องเท่านั้น ตัวชี้ตารางที่เหลือสามารถตั้งค่าเป็นหน้าที่ไม่ถูกต้องได้ ดังนั้นจึงไม่จำเป็นต้องเติมข้อมูลเหล่านั้น

  3. การแบ่งปัน มีความเป็นไปได้อย่างมากว่าไม่เพียงแต่หน่วยความจำเท่านั้น แต่ยังสามารถแชร์ตารางเพจระหว่างกระบวนการสำหรับอ็อบเจ็กต์หน่วยความจำแบบแบ่งใช้ขนาดใหญ่ได้ IIRC Solaris เรียกสิ่งนี้ว่า 'หน่วยความจำร่วมที่ใกล้ชิด' (ISM) ในทำนองเดียวกัน สิ่งต่างๆ เช่น การแมปเคอร์เนลอาจใช้ร่วมกันโดยสิ้นเชิงระหว่างหลายกระบวนการ

  4. ผลงาน. สถาปัตยกรรม 64 บิตทั่วไปใช้พื้นที่ที่อยู่ 47 บิต ด้วยความละเอียดของหน้า 4k แผนที่เชิงเส้นจะต้องมีตัวอธิบายหน้า 2^35 ตัวแต่ละขนาด 8 ไบต์ แค่การทำให้ RAM เป็นศูนย์จะใช้เวลา 48 วินาทีกับ mac pro ที่ดังลั่น นั่นจะเป็นค่าใช้จ่ายในการเริ่มต้นกระบวนการ

person mevets    schedule 13.05.2020