मूलतः, आप अतिथि OS को वास्तविक हार्डवेयर का उपयोग करने नहीं दे सकते क्योंकि आपके पास इसे नियंत्रित करने का कोई तरीका नहीं था। यदि आपने इसे असली सीपीयू पर चलाने की कोशिश की है, तो आपको कोई गारंटी नहीं थी कि यह होस्ट ओएस पर वापस नियंत्रण करेगा।
वर्चुअलाइजेशन जैसा कि आप वर्णन करते हैं कि यह हार्डवेयर में कुछ नियमों और प्रतिबंधों को हार्डवेयर स्तर पर लागू करने की अनुमति देकर कार्यान्वित किया जाता है, जिसे होस्ट ओएस द्वारा प्रबंधित किया जा सकता है। यह होस्ट OS को नियम स्थापित करने की अनुमति देता है कि अतिथि क्या कर सकता है और क्या नहीं, और फिर वास्तव में अतिथि को वास्तविक हार्डवेयर पर चलाएँ। यदि अतिथि वास्तविक हार्डवेयर के साथ कुछ करने की कोशिश करता है जो नियमों का उल्लंघन करता है (जैसे डिस्क डिवाइस तक पहुंचने की कोशिश कर रहा है), हार्डवेयर अतिथि को निलंबित कर देगा और मेजबान को एक बाधा भेज देगा, जो मेजबान को प्रतिक्रिया प्रदान करने की अनुमति देता है (जैसे कि डेटा को एक इंसुलेटेड डिस्क डिवाइस से लौटाना), और फिर अतिथि को फिर से शुरू करें।
यहाँ प्रक्रिया का एक सरल उदाहरण दिया गया है:
होस्ट ओएस: अरे सीपीयू, मुझे इस कोड को वर्चुअलाइज्ड चलाने की आवश्यकता है। मुझे कॉल करें अगर यह ऐसा कुछ करना चाहता है जो निर्देशों को निष्पादित नहीं कर रहा है।
होस्ट सीपीयू: आपको मिल गया!
होस्ट CPU सभी होस्ट रजिस्टरों और राज्य को बचाता है, और फिर अतिथि OS कोड निष्पादित करना शुरू करता है
अतिथि OS: मैं ज़िंदा हूँ! अरे सीपीयू, क्या आप मुझे यह फाइल ला सकते हैं?
होस्ट सीपीयू: उह ... यकीन है। एक क्षण।
होस्ट CPU सभी अतिथि रजिस्टर और राज्य को बचाता है, और फिर सभी होस्ट रजिस्टर और राज्य को पुनर्स्थापित करता है
होस्ट CPU: अरे होस्ट ओएस, अतिथि को यह फ़ाइल चाहिए थी!
होस्ट ओएस: ओह, अच्छी तरह से उन्हें यह दें: वर्चुअल हार्ड ड्राइव से फ़ाइल
होस्ट सीपीयू: आपको मिल गया!
होस्ट CPU सभी होस्ट रजिस्टर और राज्य बचाता है, अतिथि रजिस्टर और राज्य को पुनर्स्थापित करता है, और फिर अतिथि OS कोड को
होस्ट करना शुरू करता है होस्ट CPU: यहाँ वह फ़ाइल है!
अतिथि ओएस: मीठा, धन्यवाद!
यहां महत्वपूर्ण अंतर एक एमुलेटर में है, अतिथि ओएस वास्तव में हार्डवेयर पर कभी नहीं चल रहा है। वर्चुअलाइजेशन के साथ, होस्ट ओएस सीपीयू में सीमाओं को कॉन्फ़िगर करता है, और फिर वास्तव में भौतिक सीपीयू पर अतिथि कोड चलाता है। ऊपर दिया गया उदाहरण बेहद सरल है, लेकिन मेमोरी, डिस्क i / o, और यहां तक कि नेटवर्किंग को आज के प्रोसेसर के नवीनतम पर नियंत्रित किया जा सकता है, जिससे उन्हें हर बार होस्ट ओएस को परेशान किए बिना सुरक्षित रूप से हस्तक्षेप करने की अनुमति मिलती है। जब तक अतिथि वर्चुअलाइज्ड सीमाओं के बाहर जाने की कोशिश नहीं करता है, तब तक होस्ट ओएस में कोई भी कोड नहीं चल सकता है अगर उसे किसी दिए गए बिंदु पर कुछ भी नहीं करना है।
थोड़ा परिप्रेक्ष्य जोड़ने के लिए, वर्चुअलाइजेशन और नियंत्रण के लंबे इतिहास में यह सिर्फ एक और कदम है। (कोई गारंटी नहीं है कि यह सही क्रम में है या संपूर्ण है, लेकिन एक अच्छा प्रारंभिक अवलोकन देना चाहिए)
मूल रूप से, कोई वर्चुअलाइजेशन नहीं था। सभी प्रक्रियाओं ने एक ही मेमोरी स्पेस साझा किया, सभी में हार्डवेयर की पूरी पहुंच थी, और मल्टी-टास्क की क्षमता पूरी तरह से एक प्रक्रिया पर निर्भर थी जो खुद को रोक रही थी और अगली प्रक्रिया को नियंत्रण दे रही थी। यदि OS किसी प्रक्रिया पर किसी प्रकार का नियंत्रण करना चाहता था, तो उसे एक एमुलेटर में प्रक्रिया को चलाना पड़ता था (किसी ने नहीं किया, क्योंकि यह बहुत धीमी गति से धीमा था)।
पहली थी प्रिविलेज्ड मेमोरी : कुछ क्रियाएं जो केवल मेमोरी के विशेष क्षेत्रों द्वारा ही की जा सकती हैं। इन क्षेत्रों पर ओएस का कब्जा है, जिससे यह इन विशेषाधिकार प्राप्त कार्यों के लिए प्रवेश द्वार के रूप में कार्य कर सकता है। एक उदाहरण हार्डवेयर को डेटा पढ़ने / लिखने की क्षमता है। यह प्रक्रियाओं को हार्डड्राइव पर सीधे पढ़ने / लिखने से रोकता है, और इसके बजाय उन्हें ओएस को उनके लिए पढ़ने / लिखने के लिए कहने के लिए मजबूर करता है। इसका मतलब यह है कि ओएस जांच कर सकता है कि क्या कार्रवाई करने से पहले प्रक्रिया की अनुमति है।
अगला वर्चुअलाइज्ड "टाइम" आया, जैसा कि यह था। OS निर्धारित समय पर सक्रिय प्रक्रिया को बाधित करने के लिए सीपीयू को कॉन्फ़िगर कर सकता है, जिससे यह शेड्यूलिंग को नियंत्रित करने और प्रक्रियाओं के बीच स्विच करने की अनुमति देता है। OS अब हार्डवेयर पर सीधे प्रक्रियाएं चला सकता है और फिर भी उन्हें CPU समय का दुरुपयोग करने से रोक सकता है। यह एक हार्डवेयर टाइमर द्वारा प्रदान किया गया था ।
अगला आया वर्चुअलाइज्ड मेमोरी : साझा मेमोरी के साथ समस्या यह है कि कोई भी प्रक्रिया किसी अन्य प्रक्रिया की मेमोरी को पढ़ सकती है। जब मैरी का प्रोग्राम अपने वेब ब्राउज़र से बॉब का पासवर्ड पढ़ता है तो क्या होता है? वर्चुअल मेमोरी ओएस को मेमोरी को मैप करने की अनुमति देती है जो एक प्रक्रिया भौतिक मेमोरी के विभिन्न हिस्सों को देखती है, या उन्हें पूरी तरह से भौतिक मेमोरी से बाहर ले जाती है (पृष्ठ फ़ाइल में)। जब भी कोई प्रक्रिया मेमोरी को पढ़ने या लिखने की कोशिश करती है, तो सीपीयू का वीएमएमयू (वर्चुअल मेमोरी मैनेजमेंट यूनिट) दिखता है कि यह भौतिक मेमोरी में मैप किया गया है, और वहां कार्रवाई करता है। यदि इसे मेमोरी से मैप किया जाता है, तो सीपीयू ओएस को पेज फाइल से मेमोरी में लाने के लिए कॉल करता है।
ठीक है, इसलिए इस बिंदु पर हम X86 प्रोसेसर की शुरुआत के बारे में पहुंच गए हैं, जहां हम प्रक्रियाओं को सुरक्षित रूप से चला सकते हैं और उन्हें सक्रिय रूप से सिस्टम को लेने से रोक सकते हैं जब तक कि ओएस विशेष रूप से उन्हें ऐसा करने की अनुमति नहीं देता है। इस बिंदु पर, प्रक्रियाएं प्रभावी रूप से "वर्चुअलाइज्ड" होती हैं। यह समर्थन लंबे समय से आस-पास है , इसलिए आप लोगों को वास्तव में वर्चुअलाइज्ड प्रक्रियाओं के बारे में बात करते हुए नहीं सुनते हैं, क्योंकि यह सिर्फ यह माना जाता है कि सभी प्रक्रियाएं अब वर्चुअलाइज्ड हैं।
वर्चुअलाइज्ड OS के विशेष क्यों हैं, हालांकि? हम सिर्फ एक प्रक्रिया के रूप में शुरुआत क्यों नहीं कर सकते हैं और इसे स्वयं करने दें? खैर, समस्या यह है कि एक ओएस के रूप में, अतिथि प्रणाली को उसी नियंत्रण का उपयोग और उपयोग करने में सक्षम होने की उम्मीद है जो मेजबान प्रक्रियाओं को नियंत्रित करने के लिए उपयोग करता है - मूल रूप से, ओएस कंप्यूटर के सर्वोच्च शासक होने की उम्मीद करता है, और वे बस डॉन ' यदि ऐसा नहीं है तो काम करें। "हार्डवेयर वर्चुअलाइजेशन" एक्सटेंशन (एएमडी-वी फॉर एएमडी, और वीटी-एक्स फॉर इंटेल) होस्ट ओएस को वर्चुअल प्रक्रिया नियंत्रण (वर्चुअल विशेषाधिकार प्राप्त मेमोरी, वर्चुअल हार्डवेयर टाइमर, वर्चुअल वर्चुअल मेमोरी) का वर्चुअलाइज्ड सेट प्रदान करने की अनुमति देता है ।