ชิป MMU (หน่วยจัดการหน่วยความจำ) จำเป็นสำหรับหน่วยประมวลผลเพื่อรองรับหน่วยความจำเสมือนหรือไม่?


14

ชิป MMU (หน่วยจัดการหน่วยความจำ) จำเป็นสำหรับหน่วยประมวลผลเพื่อรองรับหน่วยความจำเสมือนหรือไม่?

เป็นไปได้หรือไม่ที่จะจำลองฟังก์ชันการทำงานของ MMU ในซอฟต์แวร์ (ฉันทราบว่าอาจมีผลกระทบอย่างมากต่อประสิทธิภาพ)


คอมพิวเตอร์ที่มีคุณสมบัติครบถ้วนสามารถเลียนแบบคอมพิวเตอร์เครื่องอื่นที่มีประสิทธิภาพเพียงพอ หรือเลียนแบบฮาร์ดแวร์ใด ๆ คำถามเดียวคือขนาดของประสิทธิภาพการทำงาน
Vality

โปรเซสเซอร์ทุกตัวในปัจจุบันต้องการ TLB ดังนั้นจึงมีหน่วย MM ในตัว
rastafile

คำตอบ:


22

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

ดังนั้นคุณสามารถสร้างระบบที่ไม่มี MMU, พอร์ตQEMUลงไปได้, เพิ่มส่วนที่ขาดหายไปเพื่อให้หน่วยความจำเสมือนมีประโยชน์จริง ๆ ( เช่นเพิ่มการสนับสนุนสำหรับการแลกเปลี่ยนบนระบบโฮสต์) และเรียกใช้ระบบปฏิบัติการที่ต้องการ MMU ใน QEMU ด้วยการป้องกันทั้งหมดที่คุณคาดหวังในระบบปฏิบัติการแขก (ยกเว้นข้อบกพร่อง QEMU)

ตัวอย่างจริงและเก่าหนึ่งของการจำลองแบบ "MMU-less" ที่ใช้ในการจัดหาหน่วยความจำเสมือนคือZ-machineซึ่งมีความสามารถในการสลับหน้าและแลกเปลี่ยนรหัสและข้อมูลของระบบ 8 บิตในช่วงปลายยุคเจ็ดสิบและแปด . สิ่งนี้ทำงานโดยเลียนแบบโปรเซสเซอร์เสมือนจริงบนโปรเซสเซอร์จริง ด้วยวิธีนี้ล่ามจะคอยควบคุมเลย์เอาต์ของหน่วยความจำอย่างเต็มที่ซึ่งโปรแกรมที่รันอยู่“ เห็น”

ในทางปฏิบัติโดยทั่วไปถือว่าเป็น MMU ที่จำเป็นสำหรับการสนับสนุนหน่วยความจำเสมือนอย่างน้อยในระดับระบบปฏิบัติการ ตามที่ระบุเคอร์เนล MMU น้อย? มีความเป็นไปได้ที่จะสร้างเคอร์เนล Linux เพื่อให้สามารถทำงานบนระบบที่ไม่มี MMU แต่การกำหนดค่าผลลัพธ์นั้นผิดปกติมากและเหมาะสมสำหรับกรณีการใช้งานเฉพาะอย่างมากเท่านั้น (โดยไม่มีซอฟต์แวร์ที่เป็นศัตรูโดยเฉพาะ) อาจไม่รองรับหลายสถานการณ์ที่ต้องใช้หน่วยความจำเสมือน (การสลับ, mmap... )


ดังนั้นแอปพลิเคชันเครื่องเสมือนจึงมีส่วนประกอบของตัวจำลอง MMU
yoyo_fun

ใช่ - ไม่จำเป็นต้องเป็นองค์ประกอบแยกต่างหาก แต่มีการสนับสนุนที่จำเป็นในการจำลอง
Stephen Kitt

7
@JenniferAnderson: ซีพียูสมัยใหม่บางตัวมีคุณสมบัติที่อนุญาตให้อีมูเลเตอร์ (บางส่วน) ถ่ายโอนการจำลอง MMU ไปยัง MMU เอง เช่นโปรแกรมที่ทำงานภายในตัวจำลองจะใช้หน้าจำลองหลายหน่วยความจำหน้าหน่วยความจำเหล่านี้แน่นอน "ซ้อนกัน" ในหน้าหน่วยความจำที่ใช้โดยโปรแกรมจำลอง ทั้งซีพียูระดับสูงของ Intel และ AMD รุ่นใหม่มีการรองรับตารางเพจแบบซ้อนซึ่งอนุญาตให้อีมูเลเตอร์แสดงการทำรังนี้ภายใน MMU เองแทนที่จะต้องจำลอง (ราคาแพง)
Jörg W Mittag

@ Jörgแน่นอนขอบคุณสำหรับการชี้แจง ไฮเปอร์ไวเซอร์ส่วนใหญ่ยังคงมีการจำลองซอฟต์แวร์ในระดับหนึ่งเพื่อให้สามารถทำงานได้โดยไม่ต้องมีการสนับสนุนฮาร์ดแวร์เพิ่มเติม ฉันกระพริบตาด้วยแง่มุมของ "เป็นไปได้" ของคำถาม ;-)
Stephen Kitt

3
@JenniferAnderson: ใช่ฟังก์ชั่นนี้ได้รับการแนะนำโดยเฉพาะสำหรับการจำลองเสมือนจริง (โปรดทราบว่ามันไม่มีอะไรใหม่การช่วยเสมือนจริงของฮาร์ดแวร์ที่มีอยู่ในโลกเมนเฟรมมาตั้งแต่ต้นทศวรรษ 1960) อย่างไรก็ตามมันกลับกลายเป็นว่ามันสามารถใช้กับแอพพลิเคชั่นที่น่าสนใจอื่น ๆ เช่นเร่งการรวบรวมขยะ ตัวรวบรวม C4 ในตัวอย่าง Zing JVM ของ Azul) อย่างไรก็ตามโปรดทราบว่าทั้งหมดนี้ใช้งานได้ทั้งสองทิศทาง: ในลักษณะเดียวกับการขยาย MMU ด้วยการสนับสนุนการจำลองเสมือนไม่มีอะไรมากไปกว่าการเพิ่มประสิทธิภาพการทำงานและการจำลองเสมือน ...
Jörg W Mittag

7

ขึ้นอยู่กับสิ่งที่คุณเรียกหน่วยความจำเสมือน รูปแบบที่น่าสนใจคือ Win16 รุ่นเก่า (รู้จักกันดีที่สุดจาก Windows 3.x เก่าไม่ใช่ Windows NT) ในรูปแบบที่คุณมีGlobalLockและGlobalUnlock, LocalLockและLocalUnlockฟังก์ชั่น เหล่านี้เป็นรูปแบบของความร่วมมือการจัดการหน่วยความจำเสมือนด้วยตนเอง เนื่องจากสิ่งนี้ทำในซอฟต์แวร์ (แอปพลิเคชัน) จึงไม่จำเป็นต้องมี MMU และหน่วยความจำนั้นเสมือนจริงในแง่ที่ว่าหน่วยความจำที่ถูกปลดล็อกนั้นสามารถเปลี่ยนเป็นดิสก์ได้

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


7

ไม่จำเป็นต้องมีฮาร์ดแวร์ MMU หากคุณมีซอฟต์แวร์ที่สามารถสลับกระบวนการไปและกลับจากหน่วยความจำกายภาพ

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

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


2
นั่นไม่ใช่หน่วยความจำเสมือนจริง ๆ แต่เป็นเพียงกระบวนการแลกเปลี่ยน ... (เราต้องการนิยาม“ หน่วยความจำเสมือน” จริงๆเพื่อคำตอบที่เหมาะสมสำหรับคำถามนี้!)
Stephen Kitt

แต่ละกระบวนการมีมุมมองพื้นที่ที่อยู่ของตัวเอง - ฉันจะแก้ไขเพื่อให้คำจำกัดความที่ฉันใช้ชัดเจนขึ้น
Toby Speight

ถูกต้อง แต่เป็นการทำแผนที่แบบหนึ่งต่อหนึ่งสำหรับกระบวนการทั้งหมด (จากมุมมองของกระบวนการไม่มีความแตกต่างกันมากดังนั้นจึงไม่มีข้อโต้แย้งที่แท้จริงที่นั่น ... )
Stephen Kitt

0

เครื่องเชิงพาณิชย์ดั้งเดิมที่ใช้ทำ 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 ไม่จำเป็นเท่านั้น แต่ยังมีระบบที่ดีกว่าหากไม่มีพวกเขา


-1

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

Translation_lookaside_buffer

จากนั้นอ่านเกี่ยวกับหน่วยความจำเสมือนและสิ่งที่มันมีไว้สำหรับ พื้นที่ที่อยู่เสมือนขนาดใหญ่ไม่ใช่แนวคิดหลัก แนวคิดหลักคือการแคช / บัฟเฟอร์ในหลายระดับ

มันไกลจากง่าย ๆ แต่แคชหน่วยความจำ TLB นี้เป็นชิ้นส่วนสำคัญของฮาร์ดแวร์ที่ระบบย่อยของเคอร์เนลสร้างขึ้นมา (มิฉะนั้น VM จะเป็นค่าใช้จ่ายส่วนใหญ่)


VM =

หน่วยความจำเสมือนหรือเครื่องเสมือน แตกต่างกันมากเชื่อมต่อกันมาก


ดังนั้นคำตอบคือไม่จำเป็นต้องมีชิป MMU (หน่วยแยกต่างหากภายนอก CPU บนเมนบอร์ด) จึงไม่จำเป็น

ใช่ฮาร์ดแวร์ MMU (ใน CPU) จำเป็นต้องคำนึงถึง VM ที่มีประโยชน์เลย (เริ่มต้นด้วยการแบ่งส่วน 8086 นี้สำหรับแพลตฟอร์ม x86)

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