ชิป MMU (หน่วยจัดการหน่วยความจำ) จำเป็นสำหรับหน่วยประมวลผลเพื่อรองรับหน่วยความจำเสมือนหรือไม่?
เป็นไปได้หรือไม่ที่จะจำลองฟังก์ชันการทำงานของ MMU ในซอฟต์แวร์ (ฉันทราบว่าอาจมีผลกระทบอย่างมากต่อประสิทธิภาพ)
ชิป MMU (หน่วยจัดการหน่วยความจำ) จำเป็นสำหรับหน่วยประมวลผลเพื่อรองรับหน่วยความจำเสมือนหรือไม่?
เป็นไปได้หรือไม่ที่จะจำลองฟังก์ชันการทำงานของ MMU ในซอฟต์แวร์ (ฉันทราบว่าอาจมีผลกระทบอย่างมากต่อประสิทธิภาพ)
คำตอบ:
ระบบจำลองใด ๆ ที่จำลองระบบที่มี MMU เลียนแบบ MMU ในซอฟต์แวร์อย่างมีประสิทธิภาพดังนั้นคำตอบสำหรับคำถามของคุณตามที่ระบุไว้คือ“ ใช่” อย่างไรก็ตามหน่วยความจำเสมือนต้องการวิธีบังคับใช้การควบคุมการเข้าถึงหน่วยความจำหรือการแปลที่อยู่อย่างน้อยที่สุดดังนั้นจึงจำเป็นต้องมีการจำลองซอฟต์แวร์เต็มรูปแบบของ CPU ที่ใช้ซอฟต์แวร์ที่ถูกควบคุมหรือต้องการความช่วยเหลือด้านฮาร์ดแวร์
ดังนั้นคุณสามารถสร้างระบบที่ไม่มี MMU, พอร์ตQEMUลงไปได้, เพิ่มส่วนที่ขาดหายไปเพื่อให้หน่วยความจำเสมือนมีประโยชน์จริง ๆ ( เช่นเพิ่มการสนับสนุนสำหรับการแลกเปลี่ยนบนระบบโฮสต์) และเรียกใช้ระบบปฏิบัติการที่ต้องการ MMU ใน QEMU ด้วยการป้องกันทั้งหมดที่คุณคาดหวังในระบบปฏิบัติการแขก (ยกเว้นข้อบกพร่อง QEMU)
ตัวอย่างจริงและเก่าหนึ่งของการจำลองแบบ "MMU-less" ที่ใช้ในการจัดหาหน่วยความจำเสมือนคือZ-machineซึ่งมีความสามารถในการสลับหน้าและแลกเปลี่ยนรหัสและข้อมูลของระบบ 8 บิตในช่วงปลายยุคเจ็ดสิบและแปด . สิ่งนี้ทำงานโดยเลียนแบบโปรเซสเซอร์เสมือนจริงบนโปรเซสเซอร์จริง ด้วยวิธีนี้ล่ามจะคอยควบคุมเลย์เอาต์ของหน่วยความจำอย่างเต็มที่ซึ่งโปรแกรมที่รันอยู่“ เห็น”
ในทางปฏิบัติโดยทั่วไปถือว่าเป็น MMU ที่จำเป็นสำหรับการสนับสนุนหน่วยความจำเสมือนอย่างน้อยในระดับระบบปฏิบัติการ ตามที่ระบุเคอร์เนล MMU น้อย? มีความเป็นไปได้ที่จะสร้างเคอร์เนล Linux เพื่อให้สามารถทำงานบนระบบที่ไม่มี MMU แต่การกำหนดค่าผลลัพธ์นั้นผิดปกติมากและเหมาะสมสำหรับกรณีการใช้งานเฉพาะอย่างมากเท่านั้น (โดยไม่มีซอฟต์แวร์ที่เป็นศัตรูโดยเฉพาะ) อาจไม่รองรับหลายสถานการณ์ที่ต้องใช้หน่วยความจำเสมือน (การสลับ, mmap
... )
ขึ้นอยู่กับสิ่งที่คุณเรียกหน่วยความจำเสมือน รูปแบบที่น่าสนใจคือ Win16 รุ่นเก่า (รู้จักกันดีที่สุดจาก Windows 3.x เก่าไม่ใช่ Windows NT) ในรูปแบบที่คุณมีGlobalLock
และGlobalUnlock
, LocalLock
และLocalUnlock
ฟังก์ชั่น เหล่านี้เป็นรูปแบบของความร่วมมือการจัดการหน่วยความจำเสมือนด้วยตนเอง เนื่องจากสิ่งนี้ทำในซอฟต์แวร์ (แอปพลิเคชัน) จึงไม่จำเป็นต้องมี MMU และหน่วยความจำนั้นเสมือนจริงในแง่ที่ว่าหน่วยความจำที่ถูกปลดล็อกนั้นสามารถเปลี่ยนเป็นดิสก์ได้
อย่างไรก็ตามในรุ่น Win16 ไม่มีการป้องกันระหว่างกระบวนการที่แตกต่างกัน หากกระบวนการอื่นทิ้งข้อมูลไว้ในหน่วยความจำคุณสามารถเขียนทับได้ นี่ไม่ใช่ข้อ จำกัด พื้นฐาน ด้วย SSD ที่รวดเร็วในทุกวันนี้คุณสามารถลบกระบวนการที่ไม่ทำงานออกจากหน่วยความจำทั้งหมดและทำได้ในเวลาที่เหมาะสม
ไม่จำเป็นต้องมีฮาร์ดแวร์ MMU หากคุณมีซอฟต์แวร์ที่สามารถสลับกระบวนการไปและกลับจากหน่วยความจำกายภาพ
นี่เป็นโหมดการทำงานของระบบปฏิบัติการแบบมัลติทาสกิ้งต้น มีเพียงกระบวนการเดียวเท่านั้นที่มีอยู่ในหน่วยความจำในเวลาที่กำหนดกระบวนการจะถูกสลับให้ครบถ้วนเมื่อการแบ่งเวลาหมดอายุ (คุณจะเห็นว่านี่เป็นปัญหากับกระบวนการขนาดใหญ่) เนื้อหาหน่วยความจำที่เห็นโดยกระบวนการที่รันอยู่ในปัจจุบันนั้นไม่เหมือนกันกับกระบวนการอื่นที่มองเห็นและแต่ละหน่วยมีมุมมองของพื้นที่ที่อยู่ของตัวเอง
การสนับสนุนฮาร์ดแวร์บางอย่างมีประโยชน์ - แนวคิดเกี่ยวกับพื้นที่หน่วยความจำ "ที่ได้รับการป้องกัน" สำหรับการใช้งานระบบปฏิบัติการของตัวเอง (เช่นที่อยู่ทั้งหมดที่มีชุด MSB สามารถเข้าถึงได้เฉพาะในโหมดหัวหน้างาน) และค่า "หยุดพัก" ระบุที่อยู่สูงสุดในการใช้งาน ฮาร์ดแวร์ไม่ใช่ข้อกำหนดที่แน่นอนสำหรับหน่วยความจำเสมือน มันเป็นวิธีที่มีประสิทธิภาพเป็นพิเศษในการบรรลุเป้าหมาย
เครื่องเชิงพาณิชย์ดั้งเดิมที่ใช้ทำ VM ไม่มี MMU - มี VM ติดตั้งอยู่ภายในโปรเซสเซอร์ ความคิดปัจจุบันของฉันคือ MMU เป็นเพียงความคิดที่จะวาง VM ไว้บนโปรเซสเซอร์ที่ไม่ใช่ VM VM ได้รับการพัฒนาที่มหาวิทยาลัยแมนเชสเตอร์และนักออกแบบ Burroughs ก็เชื่อมั่นว่าพวกเขาควรจะรวมมันไว้แม้ว่าจะเป็นนวัตกรรมในเวลานั้นก็ตาม
Burroughs B5000 (ตอนนี้เครื่อง Unisys MCP) ใช้ตัวบอกหน่วยความจำซึ่งบังคับใช้ขอบเขตหน่วยความจำ - ออกไปนอกขอบเขตและโปรแกรมของคุณถูกทิ้ง (การเคารพขอบเขตเป็นพื้นฐานของสังคมที่ดี แต่มีการละเมิดสิทธิพิเศษ
ตัวอธิบายมีที่อยู่หน่วยความจำความยาวของบล็อกและชนิดข้อมูล แต่ยังรวมถึง P-bit ที่สำคัญทั้งหมดหรือบิตการแสดงตน p-bit ระบุว่าบล็อกอยู่ในหน่วยความจำ p-bit เป็นศูนย์หมายความว่าบล็อกอยู่ในที่เก็บข้อมูลขนาดใหญ่และที่อยู่เป็นที่อยู่หน่วยเก็บข้อมูลทั้งในโปรแกรมต้นฉบับ (รหัสหรือข้อมูล) หรือใน VM (ข้อมูลรีดออก)
เครื่องเหล่านี้ใช้โมเดลหน่วยความจำแบบลำดับชั้น ดูเหมือนว่า MMU จะชดเชยความบกพร่องของหน่วยความจำแบบแบนโดยจำเป็นต้องจับคู่วัตถุผู้ใช้กับหน่วยความจำแบบแบน JK Iliffe ยังออกแบบเครื่องจักร ICL ด้วยรุ่นนี้:
http://www.computerconservationsociety.org/resurrection/res74.htm#f
https://en.wikipedia.org/wiki/Burroughs_large_systems
ความแตกต่างระหว่างเครื่องเหล่านี้และเครื่องส่วนใหญ่ในปัจจุบันคือการระบุถึงสถาปัตยกรรมระบบที่สมบูรณ์ไม่ใช่แค่สถาปัตยกรรม CPU
ดังนั้นจึงดูเหมือนว่าไม่เพียง แต่ MMUs ไม่จำเป็นเท่านั้น แต่ยังมีระบบที่ดีกว่าหากไม่มีพวกเขา
ส่วนใหญ่ของสก์ท็อปแล็ปท็อปและการประมวลผลรวมเซิร์ฟเวอร์หนึ่งหรือมากกว่า TLBs ในฮาร์ดแวร์จัดการหน่วยความจำและมันเกือบจะเป็นปัจจุบันอยู่เสมอในการประมวลผลใด ๆที่ใช้เพจหรือแบ่งหน่วยความจำเสมือน
จากนั้นอ่านเกี่ยวกับหน่วยความจำเสมือนและสิ่งที่มันมีไว้สำหรับ พื้นที่ที่อยู่เสมือนขนาดใหญ่ไม่ใช่แนวคิดหลัก แนวคิดหลักคือการแคช / บัฟเฟอร์ในหลายระดับ
มันไกลจากง่าย ๆ แต่แคชหน่วยความจำ TLB นี้เป็นชิ้นส่วนสำคัญของฮาร์ดแวร์ที่ระบบย่อยของเคอร์เนลสร้างขึ้นมา (มิฉะนั้น VM จะเป็นค่าใช้จ่ายส่วนใหญ่)
VM =
หน่วยความจำเสมือนหรือเครื่องเสมือน แตกต่างกันมากเชื่อมต่อกันมาก
ดังนั้นคำตอบคือไม่จำเป็นต้องมีชิป MMU (หน่วยแยกต่างหากภายนอก CPU บนเมนบอร์ด) จึงไม่จำเป็น
ใช่ฮาร์ดแวร์ MMU (ใน CPU) จำเป็นต้องคำนึงถึง VM ที่มีประโยชน์เลย (เริ่มต้นด้วยการแบ่งส่วน 8086 นี้สำหรับแพลตฟอร์ม x86)