ให้ฉันพูดถึงส่วน "ทำไม"
หนึ่งในเหตุผลสำหรับระบบปฏิบัติการที่ทันสมัยคือการอนุญาตให้หลายโปรแกรม (กระบวนการ) ให้ทำงานในเวลาเดียวกันในระบบ หากคุณต้องการทำสิ่งนี้อย่างปลอดภัยความต้องการต่อไปนี้จะเกิดขึ้น:
คุณอาจ (ยกเว้นกรณีที่คุณมีความต้องการพิเศษ) ไม่ต้องการแบ่ง RAM ในระบบแบบตายตัว - เช่น 256MB คงที่ต่อกระบวนการ - จำกัด คุณไว้ที่ 8 กระบวนการในระบบ 2GB คุณต้องการให้แต่ละกระบวนการสามารถ "ขอ" หน่วยความจำและส่งคืนเมื่อดำเนินการเสร็จ
นอกจากนี้คุณยังไม่ต้องการแบ่งอุปกรณ์ I / O แบบคงที่ระหว่างอุปกรณ์ โดยทั่วไปคุณต้องการฮาร์ดแวร์บางส่วนหรือทั้งหมดเช่นหน่วยความจำให้เป็นทรัพยากรที่ใช้ร่วมกันหรืออย่างน้อยก็เป็นการชั่วคราวเฉพาะกับกระบวนการเฉพาะในบางช่วงเวลา สิ่งนี้ต้องการให้กระบวนการทั้งหมดไม่พยายามทำ I / O ด้วยตัวเอง แต่ "ผ่าน" บางสิ่งบางอย่างเพื่อกำหนดเวลาและประสานงาน I / O การกำหนดเวลามีความสำคัญเนื่องจาก I / O ส่วนใหญ่ช้ากว่า CPU มากดังนั้นคุณสามารถให้ CPU ทำงานได้สำหรับกระบวนการอื่น ๆ ในขณะที่กำลังรอ I / O แม้ในระบบแกนเดียว
ในการทำสิ่งที่ถูกต้องข้างต้นจำเป็นต้องใช้ประโยชน์จากคุณสมบัติฮาร์ดแวร์ CPU หลายอย่าง หนึ่งในนั้นคือ MMU ส่วนอีกโหมดได้รับการป้องกัน ระบบปฏิบัติการสองระบบสามารถแบ่งปันคุณสมบัติฮาร์ดแวร์เหล่านี้ร่วมกันเพื่อใช้งานระบบปฏิบัติการสองระบบขึ้นไปได้หรือไม่
แน่นอน แต่ไม่มีอะไรในฮาร์ดแวร์ที่สามารถหยุดระบบปฏิบัติการหนึ่งไม่ให้กระทืบหน่วยความจำในระบบปฏิบัติการอื่น หาก CPU อยู่ในโหมดเคอร์เนล (มีเพียงโหมดเคอร์เนลเดียว ) โค้ดใด ๆ ก็สามารถทำอะไรได้ เป็นไปได้ 100% ที่รหัสจากระบบปฏิบัติการหนึ่งจะเรียกใช้รหัสหรือข้อมูลของระบบปฏิบัติการอื่น และเรารู้ว่าระบบปฏิบัติการมีช่องโหว่ในอดีตและจะมีมากขึ้นในอนาคต ดังนั้นมันจึงแย่มากสำหรับความปลอดภัย
ทีนี้มันจะไม่เจ๋งขนาดไหนถ้าคุณใส่ "เลเยอร์" อีกอันไว้เหนือนี้และต้องการฮาร์ดแวร์ที่รองรับระบบปฏิบัติการหลายระบบ นั่นคือสิ่งที่คุณสมบัติการจำลองเสมือนของฮาร์ดแวร์ทำเช่นนั้นพวกเขาวางกำแพงกั้นฮาร์ดแวร์ระหว่างระบบปฏิบัติการหลายตัวที่ใช้งานอยู่และมี "อินเตอร์เฟซ" ระดับสูงสุดสำหรับพวกเขาที่เรียกว่าไฮเปอร์ไวเซอร์ คุณมีได้แค่หนึ่งไฮเปอร์ไวเซอร์ และใช่กระบวนการที่ทำงานภายใต้ระบบปฏิบัติการอย่างใดอย่างหนึ่งจะต้องผ่านสามชั้นเพื่อทำ I / O (กระบวนการ - เคอร์เนลท้องถิ่น - hypervisor)