เริ่มแรกคุณไม่สามารถให้แขกระบบปฏิบัติการใช้ฮาร์ดแวร์จริงได้เนื่องจากคุณไม่มีวิธีควบคุม หากคุณพยายามเรียกใช้บน CPU จริงคุณไม่รับประกันว่าจะควบคุมกลับไปยังโฮสต์ระบบปฏิบัติการ
การจำลองเสมือนตามที่คุณอธิบายถูกนำไปใช้ในฮาร์ดแวร์โดยอนุญาตให้ใช้กฎและข้อ จำกัด บางอย่างในระดับฮาร์ดแวร์ซึ่งโฮสต์ระบบปฏิบัติการสามารถจัดการได้ สิ่งนี้อนุญาตให้โฮสต์ระบบปฏิบัติการตั้งค่ากฎเกี่ยวกับสิ่งที่แขกสามารถทำได้และไม่สามารถทำได้จากนั้นเรียกใช้แขกบนฮาร์ดแวร์จริง หากแขกพยายามทำบางสิ่งกับฮาร์ดแวร์จริงที่ละเมิดกฎ (เช่นพยายามเข้าถึงอุปกรณ์ดิสก์) ฮาร์ดแวร์จะระงับแขกและส่งโฮสต์ขัดจังหวะซึ่งอนุญาตให้โฮสต์ให้การตอบสนอง (เช่น ส่งคืนข้อมูลจากอุปกรณ์ดิสก์ที่จำลองแล้ว) จากนั้นให้ผู้เยี่ยมชมทำงานต่อ
นี่คือตัวอย่างที่ง่ายของกระบวนการ:
โฮสต์ระบบปฏิบัติการ:สวัสดีซีพียูฉันต้องการให้คุณเรียกใช้รหัสนี้แบบเสมือนจริง โทรหาฉันหากต้องการทำสิ่งที่ไม่เพียงดำเนินการตามคำสั่ง
Host CPU:คุณเข้าใจแล้ว!
โฮสต์ CPU บันทึกโฮสต์และสถานะการลงทะเบียนทั้งหมดจากนั้นเริ่มประมวลผลรหัส Guest OS
บุคคลทั่วไป OS:ฉันยังมีชีวิตอยู่! เฮ้ซีพียูคุณช่วยเอาไฟล์นี้ให้ฉันได้ไหม
Host CPU:เอ่อ ... แน่นอน แป๊บนึง.
Host CPU บันทึกการลงทะเบียนและสถานะแขกทั้งหมดจากนั้นคืนค่าการลงทะเบียนโฮสต์และสถานะ
Host CPU ทั้งหมด:สวัสดี Host OS ผู้เยี่ยมชมต้องการไฟล์นี้!
โฮสต์ระบบปฏิบัติการ:โอ้ให้พวกเขาอย่างนี้: ไฟล์จากฮาร์ดไดรฟ์เสมือน
Host CPU:คุณเข้าใจแล้ว!
CPU โฮสต์บันทึกการโฮสต์และสถานะโฮสต์ทั้งหมดคืนค่าการลงทะเบียนและสถานะของผู้เยี่ยมชมจากนั้นเริ่มการเรียกใช้งานรหัส Guest OS
CPU โฮสต์:นี่คือไฟล์!
แขกระบบปฏิบัติการ:หวานขอบคุณ!
ความแตกต่างที่สำคัญที่นี่คืออีมูเลเตอร์ระบบปฏิบัติการเกสต์ไม่เคยทำงานบนฮาร์ดแวร์ ด้วยการจำลองเสมือนระบบปฏิบัติการโฮสต์จะกำหนดค่าข้อ จำกัด ใน CPU จากนั้นเรียกใช้รหัสผู้เยี่ยมชมบนฟิสิคัล CPU ตัวอย่างข้างต้นนั้นง่ายมาก แต่หน่วยความจำ, ดิสก์ i / o และแม้กระทั่งเครือข่ายสามารถควบคุมได้ในโปรเซสเซอร์ล่าสุดของวันนี้ทำให้พวกเขาสามารถเชื่อมต่อได้อย่างปลอดภัยโดยไม่ต้องรบกวนโฮสต์ระบบปฏิบัติการในแต่ละครั้ง ตราบใดที่แขกไม่พยายามออกไปนอกขอบเขตเสมือนจริงแล้ว Host OS อาจไม่มีรหัสใด ๆ ที่ทำงานหากไม่มีอะไรทำตามเวลาที่กำหนด
เพื่อเพิ่มมุมมองนี่เป็นอีกขั้นตอนเดียวในประวัติศาสตร์อันยาวนานของการจำลองเสมือนและการควบคุม (ไม่รับประกันว่านี่จะถูกต้องหรือครบถ้วน แต่ควรให้ภาพรวมการเริ่มต้นที่ดี)
เริ่มแรกไม่มี virtualization กระบวนการทั้งหมดแชร์พื้นที่หน่วยความจำเดียวกันทุกคนสามารถเข้าถึงฮาร์ดแวร์ได้อย่างเต็มที่และความสามารถในการทำงานหลายอย่างนั้นขึ้นอยู่กับกระบวนการหนึ่งที่หยุดตัวเองและให้การควบคุมกระบวนการถัดไป หากระบบปฏิบัติการต้องการควบคุมกระบวนการใด ๆ ก็ต้องเรียกใช้กระบวนการในโปรแกรมจำลอง (ไม่มีใครทำเพราะมันช้าเกินไปอย่างเจ็บปวด)
ครั้งแรกคือหน่วยความจำที่มีสิทธิ์ : การกระทำบางอย่างที่สามารถทำได้โดยพื้นที่พิเศษของหน่วยความจำเท่านั้น ภูมิภาคเหล่านี้ถูกครอบครองโดยระบบปฏิบัติการทำให้มันทำหน้าที่เป็นประตูสู่การดำเนินการที่ได้รับสิทธิพิเศษเหล่านี้ ตัวอย่างคือความสามารถในการอ่าน / เขียนข้อมูลไปยังฮาร์ดแวร์ สิ่งนี้ป้องกันไม่ให้กระบวนการอ่าน / เขียนลงในฮาร์ดไดรฟ์โดยตรงและบังคับให้กระบวนการขอให้ระบบอ่าน / เขียนแทน ซึ่งหมายความว่าระบบปฏิบัติการสามารถตรวจสอบว่ากระบวนการได้รับอนุญาตก่อนดำเนินการ
ถัดไปมาเสมือน "เวลา" เหมือนเดิม ระบบปฏิบัติการสามารถกำหนดค่า CPU เพื่อขัดจังหวะกระบวนการที่ใช้งานในช่วงเวลาที่กำหนดช่วยให้สามารถควบคุมการตั้งเวลาและสลับระหว่างกระบวนการ ระบบปฏิบัติการสามารถเรียกใช้กระบวนการบนฮาร์ดแวร์ได้โดยตรงและยังป้องกันไม่ให้ใช้ CPU ในทางที่ผิด นี้ได้รับการให้บริการโดยจับเวลาฮาร์ดแวร์
หน่วยความจำเสมือนต่อไปที่มา: ปัญหาเกี่ยวกับหน่วยความจำที่ใช้ร่วมกันคือกระบวนการใด ๆ ที่สามารถอ่านหน่วยความจำของกระบวนการอื่น ๆ จะเกิดอะไรขึ้นเมื่อโปรแกรมของ Mary อ่านรหัสผ่านของ Bob จากเว็บเบราว์เซอร์ หน่วยความจำเสมือนช่วยให้ระบบปฏิบัติการแมปหน่วยความจำที่กระบวนการเห็นไปยังส่วนต่าง ๆ ของหน่วยความจำกายภาพหรือแม้กระทั่งย้ายพวกเขาออกจากหน่วยความจำกายภาพทั้งหมด (ไปยังไฟล์หน้า) เมื่อใดก็ตามที่กระบวนการพยายามอ่านหรือเขียนไปยังหน่วยความจำ VMMU (หน่วยจัดการหน่วยความจำเสมือน) ของ CPU จะค้นหาตำแหน่งที่แมปไว้ในหน่วยความจำกายภาพและดำเนินการที่นั่น หากหน่วยความจำถูกแมปแล้ว CPU จะเรียกใช้ระบบปฏิบัติการเพื่อดึงข้อมูลหน้าจากหน่วยความจำจากไฟล์หน้า
เอาล่ะดังนั้น ณ จุดนี้เราถึงจุดเริ่มต้นของตัวประมวลผล X86 ซึ่งเราสามารถเรียกใช้กระบวนการอย่างปลอดภัยและสามารถป้องกันไม่ให้เข้าครอบงำระบบเว้นแต่ว่าระบบปฏิบัติการอนุญาตให้ทำเช่นนั้นได้โดยเฉพาะ ณ จุดนี้กระบวนการต่างๆจะถูก "เสมือนจริง" อย่างมีประสิทธิภาพ การสนับสนุนนี้มีมานานแล้วดังนั้นคุณไม่ได้ยินคนพูดถึงกระบวนการเสมือนจริงเพราะมันเป็นเพียงการสันนิษฐานว่ากระบวนการทั้งหมดเป็นเสมือนจริงในขณะนี้
เหตุใดระบบปฏิบัติการเสมือนจริงจึงเป็นพิเศษ ทำไมเราไม่สามารถเริ่มต้นเป็นกระบวนการและปล่อยให้มันทำเอง ปัญหาก็คือในฐานะที่เป็นระบบปฏิบัติการระบบแขกคาดว่าจะสามารถเข้าถึงและใช้การควบคุมแบบเดียวกันกับที่โฮสต์ใช้ในการควบคุมกระบวนการ - โดยทั่วไประบบปฏิบัติการคาดว่าจะเป็นผู้ปกครองสูงสุดของคอมพิวเตอร์ ไม่ทำงานถ้าไม่ใช่อย่างนั้น ส่วนขยาย"การจำลองเสมือนฮาร์ดแวร์" (AMD-V สำหรับ AMD และ VT-x สำหรับ Intel) อนุญาตให้ Host OS จัดเตรียมชุดการควบคุมกระบวนการเสมือน (virtualized memory memory), ตัวจับเวลาฮาร์ดแวร์เสมือน, หน่วยความจำเสมือนเสมือนจริง