ฉันต้องการแสดงความคิดเห็นต่อความคิดเห็นของคำถามโดยเฉพาะความสับสนระหว่าง "ตารางหน้า" และ "ไฟล์หน้า" นี่ไม่ใช่คำตอบ แต่จะไม่พอดีกับพื้นที่ที่อนุญาตสำหรับความคิดเห็น
"ตารางหน้า" เป็นสิ่งที่แตกต่างจาก pagefile การมีRAM n MB ที่ใช้สำหรับหน้าตารางไม่ได้หมายความว่าคุณกำลังใช้พื้นที่เพจfile n MB และแม้ว่าบางรายการในตารางหน้า (PTEs ซึ่งเป็นสิ่งที่ตารางหน้าประกอบด้วย) จะอ้างถึงเนื้อหาของ pagefile ไม่ใช่ทั้งหมดที่ทำ
ตารางหน้าเป็นโครงสร้างในหน่วยความจำที่ใช้โดย MMU ของ CPU เพื่อดำเนินการแปลที่อยู่จากที่อยู่เสมือน (อีกครั้งไม่ใช่ที่หน้าไฟล์) ไปยังที่อยู่ทางกายภาพและโดยระบบปฏิบัติการเพื่อติดตามพื้นที่ที่อยู่เสมือนและช่วยแก้ไขข้อผิดพลาดของหน้า ตารางหน้าประกอบด้วยรายการตารางหน้า (PTE) PTE แต่ละตัวมีขนาด 8 ไบต์และกำหนด 4K ไบต์ของพื้นที่ที่อยู่เสมือน - นั่นคือหน้าเสมือนหนึ่งหน้า มีประมาณหนึ่ง PTE สำหรับแต่ละหน้าที่ไม่ว่างของพื้นที่ที่อยู่เสมือน
อย่างไรก็ตามถึงแม้ว่า pagefile สามารถประสบกับการแตกแฟรกเมนต์ทั้งภายนอกและภายใน (โดยปกติแล้วจะไม่ค่อยมีปัญหา แต่อย่างใดสามารถแก้ไขได้โดยการทำให้ไฟล์มีขนาดใหญ่ขึ้นสี่เท่าตามที่จำเป็น) ตารางหน้าไม่สามารถทำได้ พวกมันแยกส่วนอยู่แล้วและมันก็ไม่สำคัญอะไร
แต่ละ PTE มีบิต "ที่ถูกต้อง" สำหรับหน้า "ที่ถูกต้อง", aka "ที่อยู่อาศัย" PTE จะมีหมายเลขหน้าทางกายภาพที่สอดคล้องกับหมายเลขหน้าเสมือนที่เชื่อมโยงกับ PTE; สิ่งนี้ถูกใช้โดยตรงโดย MMU
สำหรับหน้า "ไม่ถูกต้อง" MMU จะยกข้อผิดพลาดของหน้าและ PTE นั้นจะมีรูปแบบและการตีความที่เป็นไปได้มากมาย
หมายเหตุ: ทั้งหมดข้างต้นใช้กับระบบปฏิบัติการใด ๆ ที่เปิดใช้งานการเพจใน x86 / x64 ต่อไปนี้เป็นส่วนใหญ่โดยเฉพาะกับ Windows แต่แนวคิดจำนวนมากนำไปใช้กับระบบปฏิบัติการอื่น ๆ ที่มีความแตกต่างในรายละเอียดของการใช้งาน
สำหรับหน้าในแคชหน้า PTE ยังคงมีหมายเลขหน้าจริง สำหรับเพจที่สูญหายจาก RAM และเขียนไปยัง pagefile PTE จะมีหมายเลข pagefile และอ็อฟเซ็ตภายใน pagefile ที่มีการเขียนเนื้อหาของหน้า เนื้อหา PTE ที่เป็นไปได้อื่น ๆ คือการอ้างอิงถึงตัวบอกที่อยู่เสมือนการอ้างอิงถึง "ต้นแบบ PTEs" อ้างอิงถึงความต้องการศูนย์หน้า ฯลฯ ซึ่งฉันจะไม่เข้าไป พอเพียงเพื่อบอกว่ามีเพียง PTE บางตัวเท่านั้นที่อ้างถึงที่ตั้งในหน้าไฟล์
ฉันพูดถึงทั้งหมดนี้ส่วนใหญ่เพื่อแสดงว่า pagefile และตารางหน้าในขณะที่เกี่ยวข้องไม่แน่นอนเหมือนกัน
ตารางหน้าถูกจัดระเบียบเป็นโครงสร้างแบบต้นไม้ มีทรีหรือคอลเลกชันของตารางหน้าแตกต่างกันสำหรับแต่ละกระบวนการ - นี่คือสิ่งที่อนุญาตให้แต่ละกระบวนการกำหนดอินสแตนซ์ของพื้นที่ที่อยู่เสมือนของตนเอง ตารางเพจที่รูทของทรีต้องอยู่ใน RAM ตลอดเวลา คนอื่น ๆ สามารถเพจได้; พวกเขายังไม่มีอยู่ที่พวกเขาจะสอดคล้องกับพื้นที่ขนาดใหญ่ (ขั้นต่ำ 2 MB) ของพื้นที่ที่ไม่ได้กำหนดหรือฟรีที่อยู่เสมือน
รายการตารางหน้าในตารางที่ "ใบไม้" ของต้นไม้ตรงกับหน้าของพื้นที่ที่อยู่เสมือน PTE ในตารางระดับสูงขึ้น - ใกล้กับรูท (และรูทนั้นเอง) - บอกตำแหน่งของตารางระดับล่างถัดไป (ถ้ามีอยู่)
หมายเลขที่แสดงโดย RAMmap คือหน่วยความจำกายภาพ (RAM) ที่ครอบครองโดยตารางหน้าของถิ่นที่อยู่ (ใน RAM) สำหรับกระบวนการทั้งหมดรวมถึงระบบปฏิบัติการ
สิ่งสำคัญคือระบบ OQ มี RAM 2.5 GB เชื่อมโยงกับหน้าตาราง นั่นหมายความว่าอย่างน้อยมีการกำหนดตารางเพจ 2.5 GB เนื่องจากหน้าตารางสามารถเพจได้เองขนาดเสมือนอาจใหญ่กว่าขนาดฟิสิคัลซึ่ง RAMmap ทั้งหมดสามารถแสดงให้เราเห็นได้ แต่ถือว่าเป็น "เท่านั้น" 2.5 GB ที่แปดไบต์ต่อ PTE นั่นคือประมาณ 320 ล้าน PTE เนื่องจากแต่ละ PTE กำหนดหนึ่งหน้า - 4K ไบต์ - ของพื้นที่ที่อยู่เสมือนนั่นหมายความว่ามากกว่า 1.2 เทราไบต์ของพื้นที่ที่อยู่เสมือนถูกกำหนดโดยตารางหน้าในหน่วยความจำ
นั่นเป็นไปไม่ได้ แต่มันค่อนข้างมาก
สำหรับการอ้างอิงในระบบของฉัน ATM ฉันมี RAM ประมาณ 125 MB ในตารางหน้า สิ่งนี้จะบ่งบอกถึงพื้นที่ที่อยู่เสมือนเพียง 65 GB เท่านั้น การใช้งานเสมือนจริงของฉันนั้นสูงขึ้นมาก (125 TB สำหรับกระบวนการ) แต่นั่นเป็นเพราะตารางหน้าส่วนใหญ่ไม่ได้อยู่ใน RAM "หน้าใหญ่" อีกอย่างหนึ่งที่ฉันไม่ควรเข้าไปที่นี่สามารถช่วยคิดอัตราส่วนต่าง ๆ ระหว่างขนาดของตารางหน้าเทียบกับขนาดของพื้นที่ที่อยู่เสมือนที่ใช้งานอยู่
ดังนั้น: เพื่อค้นหาผู้กระทำผิดก่อนอื่นฉันจะไปดูในการตรวจสอบประสิทธิภาพภายใต้หมวดหมู่กระบวนการสำหรับกระบวนการที่มีค่าตัวนับ "ไบต์เสมือน" สูง