สลับการจัดการพื้นที่ระหว่างการสลับหน้าตามความต้องการอย่างแท้จริง


12

ต่อไปนี้เป็นข้อสงสัยว่าฉันเจอเมื่อทำการมอบหมาย OS ภายในบ้าน - แต่ดูเหมือนว่าจะใช้แนวคิดมากกว่าคำถามการเข้ารหัสที่ตรงไปตรงมาดังนั้น IMHO ฉันจึงไม่คิดว่าแท็กการบ้านนั้นเหมาะสมกับเรื่องนี้

ในแบบแผนความต้องการการเพจที่บริสุทธิ์สำหรับกระบวนการหลาย ๆ กระบวนการที่ทำงานในเวลาเดียวกันกำหนดจำนวนหน่วยความจำ RAM และ Swap คงที่สิ่งที่เกิดขึ้นใน 2 กรณีต่อไปนี้คือการสลับพื้นที่ swap เมื่อ

  1. กระบวนการพบข้อบกพร่องของหน้าและไม่มีเฟรมว่างใน RAM ดังนั้นจึงต้องใช้หนึ่งในหน้าของกลุ่มของ Kernel Frames ของกระบวนการที่จะถูกเขียนออกมาเพื่อสลับ (สำหรับความเรียบง่ายฉันไม่ได้พิจารณาการคัดลอก กรณีที่เขียนบน) โดยชัดแจ้งว่าเฟรมนี้จะเขียนที่ใดในพื้นที่สเปซและโครงสร้างข้อมูลใดที่จำเป็นต้องได้รับการอัพเดต

  2. เมื่อกระบวนการจำเป็นต้อง page-in หน้าใดหน้าหนึ่งมันจะดูในหน่วยความจำ Swap และจะรู้ได้อย่างไรว่าหน้านั้นมีอยู่ใน Swap เลย?

อย่างที่คุณสามารถจินตนาการได้ว่าฉันมีปัญหาในการจัดการพื้นที่สว็อประหว่างวิธีการจัดการความต้องการที่บริสุทธิ์และโครงสร้างข้อมูลใดที่จำเป็น มันจะดีถ้าคุณสามารถอ้างถึงลิงก์ใด ๆ ในคำตอบของคุณ (ฉันค้นหาใน "แนวคิดระบบปฏิบัติการ - รุ่นที่ 8 โดย Silberschatz ฉันไม่พบคำตอบที่ชัดเจนสำหรับคำถามของฉัน)


3
เป็นคำถามเกี่ยวกับ CS แบบ hard-core ที่ดี!
Dave Clarke

คำตอบ:


8

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

ตัวประมวลผล x86 ใช้สิ่งที่เรียกว่าตารางหน้าเพื่อติดตามพื้นที่ที่อยู่เสมือนและการแมปหน้ารวมถึงบิตเกี่ยวกับสิทธิ์ในการเข้าถึงและที่เกี่ยวข้องมากขึ้นไม่ว่าหน้านั้นจะอยู่ในหน่วยความจำกายภาพก็ตาม การละเมิดความผิดพลาดของหน้าทริกเกอร์ซึ่งติดกับระบบปฏิบัติการ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับที่เห็นในบทความนี้

เพื่อที่จะตอบคำถามของการสลับหน้าเราต้องไปที่คำถามก่อนว่าระบบปฏิบัติการติดตามว่าหน้าใดที่ถูกใช้โดยกระบวนการใดและวิธีการจัดสรร มีโครงสร้างข้อมูลที่แตกต่างกันมากมายที่สามารถใช้ได้ อาเรย์บิตแบนทำเครื่องหมายว่าเฟรมถูกจัดสรรหรือไม่เป็นวิธีเดียว รายการที่เชื่อมโยงหรือกองซ้อนเป็นอีก ด้วยเพจจิ้งอุปสงค์บริสุทธิ์เพจที่ปันส่วนจะไม่ทำเครื่องหมายจริง ๆ ว่ามีอยู่เมื่อมีการปันส่วน นี่เป็นเอฟเฟ็กต์ที่ไม่ได้มีการตั้งค่าหน่วยความจำฟิสิคัลไว้สำหรับกระบวนการจนกว่ามันจะเขียนลงไป เมื่อทำเช่นนั้นแล้วฮาร์ดแวร์จะส่งข้อผิดพลาดที่กับดักระบบปฏิบัติการแล้วระบบปฏิบัติการจะใช้อัลกอริทึมการสลับหากไม่มีหน้าฟิสิคัลที่พร้อมใช้งานเพื่อกำหนดให้กับเพจเสมือนที่จัดสรรไว้แล้ว

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

เมื่ออัลกอริทึมที่เหมาะสมสำหรับการจัดสรรหน้าถูกนำมาใช้อีกวิธีหนึ่งสำหรับการจัดสรรพื้นที่ดิสก์สำหรับการแลกเปลี่ยนจะต้องเลือก ตัวอย่างเช่น Windows ได้ใช้ไฟล์แฟลตในอดีตในระบบไฟล์สำหรับการสลับหน้า ฉันจะจินตนาการว่าสำหรับแต่ละโหนดในโครงสร้างข้อมูลที่ติดตามหน้าการจัดสรรมีตัวชี้ assocated เพื่อชดเชยในไฟล์ระบุตำแหน่งของหน้าในดิสก์ ระบบปฏิบัติการที่เหมือน Unix นั้นใช้พาร์ติชั่นแยกต่างหากสำหรับการแลกเปลี่ยนเพจซึ่งเร็วกว่าเนื่องจากไม่มีเลเยอร์ระบบไฟล์

นอกจากนี้ยังเป็นไปได้ที่จะหย่าร้างอัลกอริทึมการแลกเปลี่ยนโครงสร้างข้อมูลจากอัลกอริทึมการจัดสรรอย่างไรก็ตามทั้งสองมีความเกี่ยวข้องดังนั้นนี่อาจจะไม่ได้ทำบ่อย

ฉันหวังว่าจะตอบคำถามของคุณแม้จะมีความกะทัดรัดที่ฉันปฏิบัติต่อมัน ฉันพบว่าวิธีที่ดีที่สุดในการเรียนรู้เกี่ยวกับระบบปฏิบัติการคือการดำลงไปในรายละเอียดทางสถาปัตยกรรมที่น่ารังเกียจบางครั้งซึ่งสามารถพบได้ในเว็บไซต์เช่น wiki.osdev.org และ www.osdever.net ซึ่งจัดการกับงานอดิเรก OS โดยเฉพาะและให้บทเรียนที่ยอดเยี่ยม ในรายละเอียดดังกล่าว


ใช่ตอนนี้ฉันเข้าใจแล้วว่ารายละเอียดของโครงสร้างข้อมูลและอื่น ๆ อาจแตกต่างกันอย่างมากระหว่าง OS - +1 สำหรับลิงก์ไปยัง osdev.org!
TCSGrad
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.