ฉันรู้ว่าเมื่อมีการแก้ไขหน้าแคชหน้ามันมีการทำเครื่องหมายสกปรกและต้องมีการเขียนกลับ แต่สิ่งที่เกิดขึ้นเมื่อ
สถานการณ์จำลอง: ไฟล์ / apps / EXE ซึ่งเป็นไฟล์ที่เรียกทำงานได้ถูกทำเพจไว้ในแคชของเพจอย่างสมบูรณ์ (เพจทั้งหมดอยู่ในแคช / หน่วยความจำ) และถูกดำเนินการโดยกระบวนการ P
ปล่อยอย่างต่อเนื่องแล้วแทนที่ / apps / EXE ด้วยปฏิบัติการใหม่ล่าสุด
ข้อสันนิษฐานที่ 1: ฉันถือว่ากระบวนการ P (และทุกคนที่มีตัวอธิบายไฟล์ที่อ้างอิงถึงไฟล์ปฏิบัติการเก่า) จะยังคงใช้ไฟล์เก่าต่อไปในหน่วยความจำ / แอป / EXE โดยไม่มีปัญหาและกระบวนการใหม่ที่พยายามเรียกใช้เส้นทางนั้น ปฏิบัติการใหม่
ข้อสันนิษฐานที่ 2: ฉันสมมติว่าหากไม่มีการแมปหน้าไฟล์ทั้งหมดในหน่วยความจำสิ่งต่าง ๆ ก็จะถูกต้องจนกว่าจะมีข้อผิดพลาดของหน้าซึ่งต้องใช้หน้าจากไฟล์ที่ถูกแทนที่และอาจเป็น segfault หรือไม่
คำถามที่ 1: ถ้าคุณ mlock ทุกหน้าของไฟล์ด้วย vmtouch สิ่งนั้นเปลี่ยนแปลงสถานการณ์ได้หรือไม่?
คำถามที่ 2: หาก / apps / EXE อยู่ใน NFS ระยะไกลนั่นจะสร้างความแตกต่างหรือไม่? (ฉันคิดว่าไม่ได้)
โปรดแก้ไขหรือตรวจสอบสมมติฐาน 2 ข้อของฉันและตอบคำถาม 2 ข้อของฉัน
สมมติว่านี่เป็นกล่อง CentOS 7.6 ที่มีเคอร์เนล 3.10.0-957.el7 บางชนิด
อัปเดต: เมื่อพิจารณาเพิ่มเติมฉันสงสัยว่าสถานการณ์นี้จะไม่แตกต่างจากสถานการณ์หน้าสกปรกอื่น ๆ ..
ฉันคิดว่ากระบวนการที่เขียนไบนารีใหม่จะทำการอ่านและรับหน้าแคชทั้งหมดเนื่องจากเพจทั้งหมดเข้าสู่ระบบจากนั้นเพจทั้งหมดเหล่านั้นจะถูกทำเครื่องหมายว่าสกปรก หากพวกเขาถูกแม็พพวกเขาจะเป็นหน้าไร้ประโยชน์ที่ครอบครองหน่วยความจำหลักหลังจากนับการอ้างอิงเป็นศูนย์
ฉันสงสัยว่าเมื่อโปรแกรมที่ดำเนินการในปัจจุบันสิ้นสุดลงสิ่งอื่นจะใช้ไบนารีใหม่ สมมติว่าถูกต้องทั้งหมดฉันคิดว่ามันน่าสนใจเมื่อมีไฟล์ในเพจบางไฟล์เท่านั้น