वर्चुअल मशीन: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Software that emulates an entire computer}} {{Use dmy dates|date=June 2019|cs1-dates=y}} {{Program execution}} कंप्यूटिंग में,...")
 
No edit summary
 
(9 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Software that emulates an entire computer}}
{{Short description|Software that emulates an entire computer}}
{{Use dmy dates|date=June 2019|cs1-dates=y}}
 
{{Program execution}}
{{Program execution}}
कंप्यूटिंग में, एक वर्चुअल मशीन (VM) एक कंप्यूटर सिस्टम का वर्चुअलाइजेशन/एमुलेटर है। वर्चुअल मशीनें कंप्यूटर आर्किटेक्चर पर आधारित होती हैं और एक भौतिक कंप्यूटर की कार्यक्षमता प्रदान करती हैं। उनके कार्यान्वयन में विशेष हार्डवेयर, सॉफ्टवेयर या संयोजन शामिल हो सकते हैं।
कंप्यूटिंग में, '''वर्चुअल (आभासी) मशीन''' एक कंप्यूटर प्रणाली का '''वर्चुअलाइजेशन (आभासीकरण)/इम्यूलेशन''' है। वर्चुअल मशीन कंप्यूटर संरचना पर आधारित हैं और एक भौतिक कंप्यूटर की कार्यक्षमता प्रदान करती हैं। उनके कार्यान्वयन में विशेष हार्डवेयर, सॉफ्टवेयर या संयोजन सम्मिलित हो सकते हैं। वर्चुअल मशीनें अलग-अलग होती हैं और उनके फंक्शन द्वारा व्यवस्थित होती हैं, यहां दिखाया गया है:
आभासी मशीनें भिन्न होती हैं और उनके कार्य द्वारा व्यवस्थित होती हैं, यहाँ दिखाया गया है:


* ''सिस्टम वर्चुअल मशीन'' (जिसे पूर्ण वर्चुअलाइजेशन वीएम भी कहा जाता है) एक वास्तविक मशीन का विकल्प प्रदान करता है। वे संपूर्ण ऑपरेटिंग सिस्टम को निष्पादित करने के लिए आवश्यक कार्यक्षमता प्रदान करते हैं। एक हाइपरवाइजर हार्डवेयर को साझा करने और प्रबंधित करने के लिए देशी कोड का उपयोग करता है, जो कई वातावरणों की अनुमति देता है जो एक दूसरे से अलग होते हैं, फिर भी एक ही भौतिक मशीन पर मौजूद होते हैं। आधुनिक हाइपरविजर मुख्य रूप से होस्ट सीपीयू से हार्डवेयर-असिस्टेड वर्चुअलाइजेशन, वर्चुअलाइजेशन-विशिष्ट हार्डवेयर का उपयोग करते हैं।
* ''सिस्टम वर्चुअल मशीन'' (जिसे पूर्ण वर्चुअलाइजेशन (आभासीकरण) वीएम भी कहा जाता है) वास्तविक मशीन का विकल्प प्रदान करता है। वे संपूर्ण ऑपरेटिंग सिस्टम को निष्पादित करने के लिए आवश्यक कार्यक्षमता प्रदान करते हैं। एक हाइपरवाइजर हार्डवेयर को साझा करने और प्रबंधित करने के लिए मूल कोड का उपयोग करता है, जो कई वातावरणों की स्वीकृति देता है जो एक दूसरे से अलग होते हैं, फिर भी एक ही भौतिक मशीन पर सम्मिलित होते हैं। आधुनिक हाइपरविजर मुख्य रूप से होस्ट सेंट्रल प्रोसेसिंग यूनिट से हार्डवेयर-समर्थित आभासीकरण, आभासीकरण-विशिष्ट हार्डवेयर का उपयोग करते हैं।
* प्रोसेस वर्चुअल मशीन को प्लेटफॉर्म से स्वतंत्र वातावरण में कंप्यूटर प्रोग्राम को निष्पादित करने के लिए डिज़ाइन किया गया है।
* प्रोसेस वर्चुअल मशीन को प्लेटफॉर्म से स्वतंत्र परिवेश में कंप्यूटर प्रोग्राम को निष्पादित करने के लिए डिज़ाइन किया गया है।


कुछ वर्चुअल मशीन एमुलेटर, जैसे कि QEMU और वीडियो गेम कंसोल एमुलेटर, को विभिन्न सिस्टम आर्किटेक्चर का अनुकरण (या वस्तुतः नकल) करने के लिए डिज़ाइन किया गया है, इस प्रकार सॉफ़्टवेयर एप्लिकेशन और ऑपरेटिंग सिस्टम को दूसरे CPU या आर्किटेक्चर के लिए लिखे जाने की अनुमति देता है। ऑपरेटिंग-सिस्टम-लेवल वर्चुअलाइजेशन कंप्यूटर के संसाधनों को कर्नेल (ऑपरेटिंग सिस्टम) के माध्यम से विभाजित करने की अनुमति देता है। शर्तें सार्वभौमिक रूप से विनिमेय नहीं हैं।
कुछ वर्चुअल मशीन एमुलेटर, जैसे कि त्वरित एमुलेटर और वीडियो गेम कंसोल एमुलेटर, को विभिन्न प्रणाली संरचना का एमुलेट (या वस्तुतः नकल) करने के लिए डिज़ाइन किया गया है, इस प्रकार सॉफ़्टवेयर एप्लिकेशन और ऑपरेटिंग सिस्टम को दूसरे सेंट्रल प्रोसेसिंग यूनिट या संरचना के लिए लिखे जाने की स्वीकृति देता है। ऑपरेटिंग-सिस्टम-स्तरीय वर्चुअलाइजेशन कंप्यूटर के संसाधनों को कर्नेल (ऑपरेटिंग सिस्टम) के माध्यम से विभाजित करने की स्वीकृति देता है। शर्तें सार्वभौमिक रूप से विनिमेय नहीं हैं।


== परिभाषाएँ ==
== परिभाषाएँ ==


=== सिस्टम वर्चुअल मशीन ===
=== सिस्टम वर्चुअल मशीन ===
{{main|System virtual machine}}
{{main|सिस्टम वर्चुअल मशीन}}
{{See also|Hardware virtualization|comparison of platform virtualization software}}
{{See also|हार्डवेयर वर्चुअलाइजेशन और प्लेटफॉर्म वर्चुअलाइजेशन सॉफ्टवेयर की तुलना}}
एक वर्चुअल मशीन को मूल रूप से पोपेक और गोल्डबर्ग वर्चुअलाइजेशन आवश्यकताओं द्वारा वास्तविक कंप्यूटर मशीन के एक कुशल, पृथक डुप्लिकेट के रूप में परिभाषित किया गया था।<ref name="Popek"/>वर्तमान उपयोग में वर्चुअल मशीनें शामिल हैं जिनका किसी भी वास्तविक हार्डवेयर से कोई सीधा संबंध नहीं है।<ref name="Smith_Nair_05"/>VM को चलाने वाले भौतिक, वास्तविक दुनिया के हार्डवेयर को आम तौर पर 'होस्ट' कहा जाता है, और उस मशीन पर नकली वर्चुअल मशीन को आम तौर पर 'अतिथि' कहा जाता है। एक मेजबान कई मेहमानों का अनुकरण कर सकता है, जिनमें से प्रत्येक विभिन्न ऑपरेटिंग सिस्टम और हार्डवेयर प्लेटफॉर्म का अनुकरण कर सकता है।


कई ऑपरेटिंग सिस्टम चलाने की इच्छा वर्चुअल मशीनों का प्रारंभिक मकसद था, ताकि कई सिंगल-टास्किंग ऑपरेटिंग सिस्टमों के बीच समय-साझाकरण की अनुमति मिल सके। कुछ मामलों में, सिस्टम वर्चुअल मशीन को वर्चुअल मेमोरी की अवधारणा का एक सामान्यीकरण माना जा सकता है जो ऐतिहासिक रूप से इससे पहले था। आईबीएम का सीपी/सीएमएस, पूर्ण वर्चुअलाइजेशन की अनुमति देने वाली पहली प्रणाली, प्रत्येक उपयोगकर्ता को एकल-उपयोगकर्ता ऑपरेटिंग सिस्टम, संवादी मॉनिटर सिस्टम (सीएमएस) प्रदान करके समय साझाकरण को लागू किया। वर्चुअल मेमोरी के विपरीत, एक सिस्टम वर्चुअल मशीन उपयोगकर्ता को उनके कोड में विशेषाधिकार प्राप्त निर्देश लिखने का अधिकार देती है। इस दृष्टिकोण के कुछ लाभ थे, जैसे इनपुट/आउटपुट उपकरणों को जोड़ना जो मानक प्रणाली द्वारा अनुमत नहीं है।<ref name="Smith_Nair_05"/>
एक वर्चुअल मशीन को मूल रूप से पोपेक और गोल्डबर्ग वर्चुअलाइजेशन आवश्यकताओं द्वारा वास्तविक कंप्यूटर मशीन के एक कुशल, अलग -अलग प्रतिलिपि के रूप में परिभाषित किया गया था।<ref name="Popek"/> वर्तमान उपयोग में वर्चुअल मशीनें सम्मिलित हैं जिनका किसी भी वास्तविक हार्डवेयर से कोई प्रत्यक्ष रूप से संबंध नहीं है।<ref name="Smith_Nair_05"/> वर्चुअल मशीन को संचालन करने वाले भौतिक, वास्तविक विश्व के हार्डवेयर को सामान्य रूप से 'होस्ट' कहा जाता है, और उस मशीन पर एम्यूलेट वर्चुअल मशीन को सामान्य रूप से 'गेस्ट' कहा जाता है। होस्ट कई गेस्ट का अनुकरण कर सकता है, जिनमें से प्रत्येक विभिन्न ऑपरेटिंग सिस्टम और हार्डवेयर प्लेटफॉर्म का अनुकरण कर सकता है।


जैसे-जैसे तकनीक वर्चुअलाइजेशन के उद्देश्यों के लिए वर्चुअल मेमोरी विकसित करती है, एक कंप्यूटर ऑपरेटिंग सिस्टम पर कई वर्चुअल मशीनों के बीच मेमोरी शेयरिंग को प्रबंधित करने के लिए मेमोरी ओवरकमिटमेंट की नई प्रणाली लागू की जा सकती है। एक ही भौतिक मशीन पर चलने वाली कई वर्चुअल मशीनों के बीच समान सामग्री वाले मेमोरी पेजों को साझा करना संभव हो सकता है, जिसके परिणामस्वरूप उन्हें एक ही भौतिक पृष्ठ पर कर्नेल समान-पेज मर्जिंग (KSM) नामक तकनीक द्वारा मैप किया जा सकता है। यह विशेष रूप से रीड-ओनली पेजों के लिए उपयोगी है, जैसे कोड सेगमेंट रखने वाले, जो समान या समान सॉफ़्टवेयर चलाने वाली कई वर्चुअल मशीनों, सॉफ़्टवेयर लाइब्रेरी, वेब सर्वर, मिडलवेयर घटकों आदि के मामले में है। अतिथि ऑपरेटिंग सिस्टम की आवश्यकता नहीं है होस्ट हार्डवेयर के अनुरूप होना, इस प्रकार भविष्य के सॉफ़्टवेयर का समर्थन करने के लिए एक ही कंप्यूटर (जैसे, Microsoft Windows, Linux, या किसी ऑपरेटिंग सिस्टम के पूर्व संस्करण) पर विभिन्न ऑपरेटिंग सिस्टम चलाना संभव बनाता है।<ref name="Oliphant"/>
कई ऑपरेटिंग सिस्टम संचालन की अपेक्षा वर्चुअल मशीनों का प्रारंभिक उद्देश्य था, ताकि कई एकल-टास्किंग ऑपरेटिंग सिस्टमों के बीच टाइम शेयरिंग की स्वीकृति दी जा सके। कुछ स्थितियों में, सिस्टम वर्चुअल मशीन को वर्चुअल मेमोरी की अवधारणा का एक सामान्यीकरण माना जा सकता है जो ऐतिहासिक रूप से इससे पहले था। अंतरराष्ट्रीय व्यवसाय मशीन निगम का कंट्रोल प्रोग्राम/कैम्ब्रिज मॉनिटर सिस्टम, पूर्ण वर्चुअलाइजेशन की स्वीकृति देने वाली पहली प्रणाली, प्रत्येक उपयोगकर्ता को एकल-उपयोगकर्ता ऑपरेटिंग सिस्टम, संवादात्मक मॉनिटर प्रणाली (सीएमएस) प्रदान करके टाइम शेयरिंग को प्रयुक्त किया। वर्चुअल मेमोरी के विपरीत, सिस्टम वर्चुअल मशीन उपयोगकर्ता को उनके कोड में विशेषाधिकार प्राप्त निर्देश लिखने का अधिकार देती है। इस दृष्टिकोण के कुछ लाभ थे, जैसे इनपुट/आउटपुट उपकरणों को जोड़ना जो मानक प्रणाली द्वारा स्वीकृत नहीं है।<ref name="Smith_Nair_05"/>


एम्बेडेड सिस्टम के संबंध में अलग अतिथि ऑपरेटिंग सिस्टम का समर्थन करने के लिए वर्चुअल मशीन का उपयोग लोकप्रिय है। एक विशिष्ट उपयोग एक वास्तविक समय ऑपरेटिंग सिस्टम को एक साथ पसंदीदा जटिल ऑपरेटिंग सिस्टम, जैसे कि लिनक्स या विंडोज के साथ चलाना होगा। एक अन्य उपयोग उपन्यास और अप्रमाणित सॉफ़्टवेयर के लिए अभी भी विकासात्मक चरण में होगा, इसलिए यह एक सैंडबॉक्स (सॉफ़्टवेयर विकास) के अंदर चलता है। ऑपरेटिंग सिस्टम के विकास के लिए वर्चुअल मशीनों के अन्य फायदे हैं और इसमें बेहतर डिबगिंग एक्सेस और तेज़ रीबूट शामिल हो सकते हैं।<ref name="vmwarez_2006"/>
जैसे-जैसे तकनीक वर्चुअलाइजेशन के उद्देश्यों के लिए वर्चुअल मेमोरी विकसित करती है, कंप्यूटर ऑपरेटिंग सिस्टम पर कई वर्चुअल मशीनों के बीच मेमोरी साझाकरण को प्रबंधित करने के लिए मेमोरी ओवरकमिटमेंट (अधिवचनबद्‍धता) की नई प्रणाली प्रयुक्त की जा सकती है। एक ही भौतिक मशीन पर चलने वाली कई वर्चुअल मशीनों के बीच समान सामग्री वाले मेमोरी पेजों को साझा करना संभव हो सकता है, जिसके परिणामस्वरूप उन्हें एक ही भौतिक पेज पर कर्नेल समान-पेज संयोजन (केएसएम) नामक तकनीक द्वारा मैप किया जा सकता है। यह विशेष रूप से केवल पढ़ने योग्य पेजों के लिए उपयोगी है, जैसे कोड सेगमेंट रखने वाले, जो समान सॉफ़्टवेयर संचालन वाली कई वर्चुअल मशीनों, सॉफ़्टवेयर लाइब्रेरी, वेब सर्वर, मिडलवेयर घटकों आदि के स्थिति में है। गेस्ट ऑपरेटिंग सिस्टम की आवश्यकता नहीं है होस्ट हार्डवेयर के अनुरूप होने के लिए इस प्रकार भविष्य के सॉफ़्टवेयर का समर्थन करने के लिए एक ही कंप्यूटर (जैसे, विंडोज, लिनक्स, या ऑपरेटिंग सिस्टम के पूर्व संस्करण) पर विभिन्न ऑपरेटिंग सिस्टम संचालन संभव बनाता है।<ref name="Oliphant"/>


अपने स्वयं के अतिथि ऑपरेटिंग सिस्टम चलाने वाले एकाधिक वीएम अक्सर सर्वर समेकन के लिए लगे रहते हैं।<ref name="vmware_2007"/>
एम्बेडेड (अंतः स्थापित) प्रणाली के संबंध में अलग गेस्ट ऑपरेटिंग सिस्टम का समर्थन करने के लिए वर्चुअल मशीन का उपयोग लोकप्रिय है। विशिष्ट उपयोग एक वास्तविक समय ऑपरेटिंग सिस्टम को एक साथ मुख्य जटिल ऑपरेटिंग सिस्टम, जैसे कि लिनक्स या विंडोज के साथ सक्रिय रखना होगा। एक अन्य उपयोग नवीन और अप्रमाणित सॉफ़्टवेयर के लिए अभी भी विकास के चरण में हैं, इसलिए यह एक सैंडबॉक्स (सॉफ़्टवेयर विकास) के अंदर सक्रिय है। ऑपरेटिंग सिस्टम के विकास के लिए वर्चुअल मशीनों के अन्य लाभ हैं और इसमें अधिकतम डिबगिंग अभिगम्य और तीव्र रीबूट सम्मिलित हो सकते हैं।<ref name="vmwarez_2006"/>
 
अपने स्वयं के गेस्ट ऑपरेटिंग सिस्टम संचालन वाले एकाधिक वर्चुअल मशीन प्रायः सर्वर समेकन के लिए लगे हुए हैं।<ref name="vmware_2007"/>




=== प्रक्रिया आभासी मशीन ===
=== प्रक्रिया आभासी मशीन ===
<!-- This section is linked from [[.NET Framework]] -->
''<nowiki>''एप्लिकेशन वर्चुअल मशीन''</nowiki> यहां पुनर्निर्देश करता है। एप्लिकेशन वर्चुअलाइजेशन के साथ भ्रमित न हों।''
{{Redirect-distinguish|Application virtual machine|application virtualization}}
 
एक प्रक्रिया VM, जिसे कभी-कभी एप्लिकेशन वर्चुअल मशीन या प्रबंधित रनटाइम एनवायरनमेंट (MRE) कहा जाता है, होस्ट OS के अंदर एक सामान्य एप्लिकेशन के रूप में चलता है और एकल प्रक्रिया का समर्थन करता है। यह तब बनता है जब वह प्रक्रिया शुरू होती है और जब वह बाहर निकलती है तो नष्ट हो जाती है। इसका उद्देश्य एक सिस्टम प्लेटफ़ॉर्म-स्वतंत्र प्रोग्रामिंग वातावरण प्रदान करना है जो अंतर्निहित हार्डवेयर या ऑपरेटिंग सिस्टम के विवरणों को दूर करता है और किसी प्रोग्राम को किसी भी प्लेटफ़ॉर्म पर उसी तरह से निष्पादित करने की अनुमति देता है।
एक प्रक्रिया वर्चुअल मशीन, जिसे कभी-कभी एप्लिकेशन वर्चुअल मशीन या प्रबंधित रनटाइम परिवेश (एमआरई) कहा जाता है, होस्ट ऑपरेटिंग सिस्टम के अंदर एक सामान्य एप्लिकेशन के रूप में सक्रिय है और एकल प्रक्रिया का समर्थन करता है। यह तब बनता है जब वह प्रक्रिया प्रारंभ होती है और जब वह बाहर निकलती है तो नष्ट हो जाती है। इसका उद्देश्य एक प्रणाली प्लेटफ़ॉर्म-स्वतंत्र प्रोग्रामिंग परिवेश प्रदान करना है जो अंतर्निहित हार्डवेयर या ऑपरेटिंग सिस्टम के विवरणों को दूर करता है और किसी प्रोग्राम को किसी भी प्लेटफ़ॉर्म पर उसी तरह से निष्पादित करने की स्वीकृति देता है।
 
एक प्रक्रिया वर्चुअल मशीन एक उच्च-स्तरीय अमूर्तता प्रदान करती है एक उच्च-स्तरीय प्रोग्रामिंग भाषा (सिस्टम वर्चुअल मशीन के निम्न-स्तरीय उद्योग मानक संरचना अमूर्तता की तुलना में) है। प्रक्रिया वर्चुअल मशीन एक दुभाषिया (कंप्यूटिंग) का उपयोग करके कार्यान्वित की जाती हैं; संकलित प्रोग्रामिंग भाषाओं के तुलनीय प्रदर्शन को समय-समय पर संकलन के उपयोग से प्राप्त किया जा सकता है।{{Citation needed|date=November 2015}}
 
इस प्रकार का वर्चुअल मशीन जावा (प्रोग्रामिंग भाषा) के साथ लोकप्रिय हो गया है, जिसे जावा वर्चुअल मशीन का उपयोग करके कार्यान्वित किया जाता है। अन्य उदाहरणों में पैरट वर्चुअल मशीन और नेटवर्क समर्थित तकनीक फ्रेमवर्क सम्मिलित हैं, जो सामान्य भाषा रनटाइम नामक वर्चुअल मशीन पर सक्रिय है। ये सभी किसी भी कंप्यूटर भाषा के लिए अमूर्त परत के रूप में काम कर सकते हैं।


एक प्रक्रिया VM एक उच्च-स्तरीय अमूर्तता प्रदान करती है{{snd}} एक उच्च-स्तरीय प्रोग्रामिंग भाषा (सिस्टम VM के निम्न-स्तरीय ISA अमूर्तता की तुलना में)। प्रक्रिया वीएम एक दुभाषिया (कंप्यूटिंग) का उपयोग करके कार्यान्वित की जाती हैं; संकलित प्रोग्रामिंग भाषाओं के तुलनीय प्रदर्शन को समय-समय पर संकलन के उपयोग से प्राप्त किया जा सकता है।{{Citation needed|date=November 2015}}
प्रक्रिया वर्चुअल मशीन का एक विशेष स्थिति प्रणाली है जो एक (संभावित रूप से विषम) कंप्यूटर संघ के संचार तंत्र पर अमूर्त है। इस तरह के वर्चुअल मशीन में एक प्रक्रिया नहीं होती है, लेकिन संघ में प्रत्येक भौतिक मशीन के लिए एक प्रक्रिया होती है। वे अन्तर्संबद्ध और ऑपरेटिंग सिस्टम द्वारा प्रदान किए गए संचार तंत्र के अतिरिक्त प्रोग्रामर को एल्गोरिदम पर ध्यान केंद्रित करके प्रोग्रामिंग समवर्ती एप्लीकेशन के कार्य को आसान बनाने के लिए डिज़ाइन किए गए हैं। वे इस तथ्य को नहीं छिपाते हैं कि संचार होता है, और इस तरह संघ को एक मशीन के रूप में प्रस्तुत करने का प्रयास नहीं करते हैं।{{Citation needed|date=March 2013}}
इस प्रकार का वीएम जावा (प्रोग्रामिंग लैंग्वेज) के साथ लोकप्रिय हो गया है, जिसे जावा वर्चुअल मशीन का उपयोग करके कार्यान्वित किया जाता है। अन्य उदाहरणों में पैरट वर्चुअल मशीन और .NET फ्रेमवर्क शामिल हैं, जो कॉमन लैंग्वेज रनटाइम नामक वीएम पर चलता है। ये सभी किसी भी कंप्यूटर भाषा के लिए अमूर्त परत के रूप में काम कर सकते हैं।


प्रक्रिया वीएम का एक विशेष मामला सिस्टम है जो एक (संभावित रूप से विषम) कंप्यूटर क्लस्टर के संचार तंत्र पर अमूर्त है। इस तरह के वीएम में एक प्रक्रिया नहीं होती है, लेकिन क्लस्टर में प्रत्येक भौतिक मशीन के लिए एक प्रक्रिया होती है। वे इंटरकनेक्ट और OS द्वारा प्रदान किए गए संचार तंत्र के बजाय प्रोग्रामर को एल्गोरिदम पर ध्यान केंद्रित करके प्रोग्रामिंग समवर्ती अनुप्रयोगों के कार्य को आसान बनाने के लिए डिज़ाइन किए गए हैं। वे इस तथ्य को नहीं छिपाते हैं कि संचार होता है, और इस तरह क्लस्टर को एक मशीन के रूप में प्रस्तुत करने का प्रयास नहीं करते हैं।{{Citation needed|date=March 2013}}
अन्य प्रक्रिया वर्चुअल मशीन के विपरीत, ये प्रणाली एक विशिष्ट प्रोग्रामिंग भाषा प्रदान नहीं करते हैं, लेकिन एक सम्मिलित भाषा में सन्निहित हैं; सामान्य रूप से ऐसी प्रणाली कई भाषाओं (जैसे, C (प्रोग्रामिंग भाषा) और फोरट्रान) के लिए बाइंडिंग प्रदान करती है।{{Citation needed|date=March 2013}} सदृश वर्चुअल मशीन (पीवीएम) और संदेश पासिंग इंटरफेस (एमपीआई) इसके उदाहरण हैं। वे पूरी तरह से वर्चुअल मशीन नहीं हैं क्योंकि शीर्ष पर चल रहे एप्लिकेशन अभी भी सभी ऑपरेटिंग सिस्टम सेवाओं तक अभिगम्य रखते हैं और इसलिए प्रणाली मॉडल तक ही सीमित नहीं हैं।
अन्य प्रक्रिया वीएम के विपरीत, ये सिस्टम एक विशिष्ट प्रोग्रामिंग भाषा प्रदान नहीं करते हैं, लेकिन एक मौजूदा भाषा में सन्निहित हैं; आमतौर पर ऐसी प्रणाली कई भाषाओं (जैसे, सी (प्रोग्रामिंग भाषा) और फोरट्रान) के लिए बाइंडिंग प्रदान करती है।{{Citation needed|date=March 2013}} समानांतर वर्चुअल मशीन (पीवीएम) और संदेश पासिंग इंटरफेस (एमपीआई) इसके उदाहरण हैं। वे सख्ती से वर्चुअल मशीन नहीं हैं क्योंकि शीर्ष पर चल रहे एप्लिकेशन अभी भी सभी ओएस सेवाओं तक पहुंच रखते हैं और इसलिए सिस्टम मॉडल तक ही सीमित नहीं हैं।


== इतिहास ==
== इतिहास ==
{{See also|History of CP/CMS|timeline of virtualization development}}
''यह भी देखें: कंट्रोल प्रोग्राम/कैम्ब्रिज मॉनिटर सिस्टम का इतिहास और वर्चुअलाइजेशन विकास की समयरेखा''
{{More citations needed section|date=July 2015}}
 
सिस्टम वर्चुअल मशीन और प्रोसेस वर्चुअल मशीन दोनों ही 1960 के दशक की हैं और सक्रिय विकास के क्षेत्र बने हुए हैं।
सिस्टम वर्चुअल मशीन और प्रोसेस वर्चुअल मशीन दोनों ही 1960 के दशक की हैं और सक्रिय विकास के क्षेत्र बने हुए हैं।


सिस्टम वर्चुअल मशीनें टाइम-शेयरिंग से बाहर हो गईं, जैसा कि विशेष रूप से संगत टाइम-शेयरिंग सिस्टम (CTSS) में लागू किया गया है। टाइम-शेयरिंग ने कई उपयोगकर्ताओं को एक कंप्यूटर का उपयोग करने की अनुमति दी समवर्ती कंप्यूटिंग: प्रत्येक प्रोग्राम को मशीन तक पूर्ण पहुंच दिखाई दी, लेकिन उस समय केवल एक प्रोग्राम को निष्पादित किया गया था, जिसमें सिस्टम टाइम स्लाइस में प्रोग्राम के बीच स्विच कर रहा था, प्रत्येक बार स्थिति को सहेज रहा था और पुनर्स्थापित कर रहा था। . यह आभासी मशीनों में विकसित हुआ, विशेष रूप से IBM की अनुसंधान प्रणालियों के माध्यम से: IBM M44/44X|M44/44X, जो आंशिक वर्चुअलाइजेशन का उपयोग करता है, और IBM CP-40|CP-40 और SIMMON, जो पूर्ण वर्चुअलाइजेशन का उपयोग करते हैं, और इसके शुरुआती उदाहरण थे hypervisors. पहली व्यापक रूप से उपलब्ध वर्चुअल मशीन आर्किटेक्चर CP-67/CMS थी (विवरण के लिए CP/CMS का इतिहास देखें)। टाइम-शेयरिंग के लिए एक होस्ट सिस्टम पर कई वर्चुअल मशीनों का उपयोग करने के बीच एक महत्वपूर्ण अंतर था, जैसा कि M44/44X और CP-40 में, और प्रोटोटाइप के लिए होस्ट सिस्टम पर एक वर्चुअल मशीन का उपयोग करना, जैसा कि SIMMON में है। एम्यूलेटर्स, अनुकूलता के लिए पहले के सिस्टम के हार्डवेयर एमुलेशन के साथ, 1963 में IBM सिस्टम/360 के समय के हैं,<ref name="Pugh_1995"/><ref name="Pugh_1991"/>जबकि सॉफ्टवेयर एमुलेशन (तत्कालीन सिमुलेशन कहा जाता है) इससे पहले का है।
प्रणाली वर्चुअल मशीनें टाइम शेयरिंग से बाहर हो गईं, जैसा कि विशेष रूप से संगत टाइम शेयरिंग प्रणाली (सीटीएसएस) में प्रयुक्त किया गया है। टाइम शेयरिंग ने कई उपयोगकर्ताओं को एक कंप्यूटर का उपयोग करने की स्वीकृति दी समवर्ती कंप्यूटिंग: प्रत्येक प्रोग्राम को मशीन तक पूर्ण अभिगम दिखाई दी, लेकिन उस समय केवल एक प्रोग्राम को निष्पादित किया गया था, जिसमें प्रणाली टाइम स्लाइस में प्रोग्राम के बीच स्विच कर रहा था, प्रत्येक स्थिति को सहेज और पुनर्स्थापित कर रहा था। यह आभासी मशीनों में विकसित हुआ, विशेष रूप से अंतरराष्ट्रीय व्यवसाय मशीन निगम की अनुसंधान प्रणालियों के माध्यम से अंतरराष्ट्रीय व्यवसाय मशीन निगम एम44/44एक्स, जो आंशिक वर्चुअलाइजेशन का उपयोग करता है, और अंतरराष्ट्रीय व्यवसाय मशीन निगम नियंत्रण प्रोग्राम-40 और सिमुलेशन मॉनिटर, जो पूर्ण वर्चुअलाइजेशन का उपयोग करते हैं, और इसके प्रारम्भिक उदाहरण हाइपरविजर थे पहली व्यापक रूप से उपलब्ध वर्चुअल मशीन संरचना नियंत्रण प्रोग्राम-67/कैम्ब्रिज मॉनिटर प्रणाली थी (विवरण के लिए नियंत्रण प्रोग्राम/कैम्ब्रिज मॉनिटर प्रणाली का इतिहास देखें)। टाइम शेयरिंग के लिए एक होस्ट प्रणाली पर कई वर्चुअल मशीनों का उपयोग करने के बीच एक महत्वपूर्ण अंतर था, जैसा कि एम44/44एक्स और नियंत्रण प्रोग्राम-40 में, और प्रोटोटाइप के लिए होस्ट प्रणाली पर एक वर्चुअल मशीन का उपयोग करना, जैसा कि सिमुलेशन मॉनिटर में है। एम्यूलेटर्स, अनुकूलता के लिए पहले के प्रणाली के हार्डवेयर एमुलेशन के साथ, 1963 में अंतरराष्ट्रीय व्यवसाय मशीन निगम प्रणाली/360 के समय के हैं,<ref name="Pugh_1995"/><ref name="Pugh_1991"/> जबकि सॉफ्टवेयर एमुलेशन (तत्कालीन सिमुलेशन कहा जाता है) इससे पूर्व का है।


प्रक्रिया आभासी मशीनें मूल रूप से एक मध्यवर्ती भाषा के लिए अमूर्त प्लेटफार्मों के रूप में उत्पन्न हुईं, जो एक संकलक द्वारा एक कार्यक्रम के मध्यवर्ती प्रतिनिधित्व के रूप में उपयोग की जाती हैं; शुरुआती उदाहरण 1966 के आसपास के हैं। 1966 के शुरुआती उदाहरण -कोड मशीन थे, एक वर्चुअल मशीन जो बीसीपीएल कंपाइलर के कंपाइलर # फ्रंट एंड द्वारा उत्सर्जित ओ-कोड (ऑब्जेक्ट कोड) को निष्पादित करती है। इस अमूर्तता ने कंपाइलर को एक नए कंपाइलर # बैक एंड को लागू करके आसानी से एक नए आर्किटेक्चर में पोर्ट करने की अनुमति दी, जिसने मौजूदा ओ-कोड लिया और इसे अंतर्निहित भौतिक मशीन के लिए मशीन कोड में संकलित किया। यूलर (प्रोग्रामिंग लैंग्वेज) भाषा ने एक समान डिज़ाइन का उपयोग किया, जिसमें पी (पोर्टेबल) नाम की मध्यवर्ती भाषा थी।<ref name="Wirth_1966"/>यह 1970 के आसपास पास्कल (प्रोग्रामिंग लैंग्वेज) द्वारा लोकप्रिय हुआ, विशेष रूप से पास्कल-पी सिस्टम (1973) और पास्कल-एस कंपाइलर (1975) में, जिसमें इसे पी-कोड मशीन कहा गया। पी-कोड मशीन। यह प्रभावशाली रहा है, और इस अर्थ में आभासी मशीनों को अक्सर पी-कोड मशीन कहा जाता है। एक मध्यवर्ती भाषा होने के अलावा, पास्कल पी-कोड को वर्चुअल मशीन को लागू करने वाले दुभाषिया द्वारा सीधे निष्पादित किया गया था, विशेष रूप से यूसीएसडी पास्कल (1978) में; इसने बाद के दुभाषियों को प्रभावित किया, विशेष रूप से जावा वर्चुअल मशीन (जेवीएम)एक और प्रारंभिक उदाहरण SNOBOL4 (1967) था, जिसे SNOBOL इम्प्लीमेंटेशन लैंग्वेज (SIL) में लिखा गया था, जो एक वर्चुअल मशीन के लिए एक असेंबली भाषा थी, जिसे तब मैक्रो असेंबलर के माध्यम से अपने मूल असेंबलर में ट्रांसप्लिंग करके भौतिक मशीनों पर लक्षित किया गया था।<ref name="Griswold_1972"/>मैक्रों तब से समर्थन से बाहर हो गए हैं, इसलिए यह दृष्टिकोण कम प्रभावशाली रहा है। प्रोसेस वर्चुअल मशीनें शुरुआती माइक्रो कंप्यूटर सॉफ़्टवेयर को लागू करने के लिए एक लोकप्रिय दृष्टिकोण थीं, जिसमें टाइनी बेसिक # वर्चुअल मशीन और एडवेंचर गेम्स में कार्यान्वयन, पिरामिड 2000 जैसे एक सामान्य-उद्देश्य इंजन जैसे इन्फोकॉम की जेड-मशीन, जिसे ग्राहम नेल्सन तर्क संभवतः अब तक बनाई गई सबसे पोर्टेबल वर्चुअल मशीन है।<ref name="inform-interpreters"/>
प्रक्रिया आभासी मशीनें मूल रूप से एक मध्यवर्ती भाषा के लिए अमूर्त प्लेटफार्मों के रूप में उत्पन्न हुईं, जो एक संकलक द्वारा एक कार्यक्रम के मध्यवर्ती प्रतिनिधित्व के रूप में उपयोग की जाती हैं; प्रारम्भिक उदाहरण 1966 के आसपास के हैं। 1966 के प्रारम्भिक उदाहरण ऑब्जेक्ट-कोड मशीन थे, एक वर्चुअल मशीन जो सामान्य संयुक्त प्रोग्रामिंग भाषा कंपाइलर के फ्रंट एंड द्वारा उत्सर्जित ओ-कोड (ऑब्जेक्ट कोड) को निष्पादित करती है। इस अमूर्तता ने कंपाइलर को एक नए कंपाइलर बैक एंड को प्रयुक्त करके आसानी से एक नए संरचना में पोर्ट करने की स्वीकृति दी, जिसने सम्मिलित ऑब्जेक्ट-कोड लिया और इसे अंतर्निहित भौतिक मशीन के लिए मशीन कोड में संकलित किया। यूलर (प्रोग्रामिंग भाषा) भाषा ने एक समान डिज़ाइन का उपयोग किया, जिसमें पी (पोर्टेबल) नाम की मध्यवर्ती भाषा थी।<ref name="Wirth_1966"/> यह 1970 के आसपास पास्कल (प्रोग्रामिंग भाषा) द्वारा लोकप्रिय हुआ, विशेष रूप से पास्कल-पी प्रणाली (1973) और पास्कल-एस कंपाइलर (1975) में,जिसमें इसे पी-कोड और परिणामी मशीन को पी-कोड मशीन कहा गया। यह प्रभावशाली रहा है, और इस अर्थ में आभासी मशीनों को प्रायः पी-कोड मशीन कहा जाता है। एक द्वितीयक भाषा होने के अतिरिक्त, पास्कल पी-कोड को वर्चुअल मशीन को प्रयुक्त करने वाले दुभाषिया द्वारा प्रत्यक्ष रूप से निष्पादित किया गया था, विशेष रूप से यूसीएसडी पास्कल (1978) में; इसने बाद के दुभाषियों को प्रभावित किया, विशेष रूप से यूसीएसडी पास्कल (1978) में; इसने बाद के दुभाषियों को प्रभावित किया, विशेष रूप से जावा वर्चुअल मशीन (जेवीएम) को प्रभावित किया। एक अन्य प्रारंभिक उदाहरण स्ट्रिंग ओरिएंटेड (शृंखला उन्मुख) और प्रतीकात्मक भाषा4 (1967) था, जिसे स्ट्रिंग ओरिएंटेड और प्रतीकात्मक भाषा कार्यान्वयन भाषा (एसआईएल) में लिखा गया था, जो एक वर्चुअल मशीन के लिए एक असेंबली भाषा थी, जिसे तब मैक्रो असेंबलर के माध्यम से अपने मूल असेंबलर में ट्रांसप्लिंग करके भौतिक मशीनों पर प्रकाशित किया गया था।<ref name="Griswold_1972"/> मैक्रों तब से समर्थन से बाहर हो गए हैं, इसलिए यह दृष्टिकोण कम प्रभावशाली रहा है। प्रोसेस वर्चुअल मशीनें प्रारम्भिक माइक्रो कंप्यूटर सॉफ़्टवेयर को प्रयुक्त करने के लिए एक लोकप्रिय दृष्टिकोण थीं, जिसमें टाइनी प्रारंभ का सर्व-उद्देश्यीय प्रतीकात्मक निर्देश कोड वर्चुअल मशीन और एडवेंचर गेम्स में कार्यान्वयन, पिरामिड 2000 जैसे एक सामान्य-उद्देश्य इंजन जैसे इन्फोकॉम की जेड-मशीन, जिसे ग्राहम नेल्सन तर्क संभवतः अब तक बनाई गई सबसे पोर्टेबल वर्चुअल मशीन है।<ref name="inform-interpreters"/>


स्मॉलटॉक-80 के कार्यान्वयन में महत्वपूर्ण प्रगति हुई,<ref name="Goldberg_1983"/>विशेष रूप से Deutsch/Schiffmann कार्यान्वयन<ref name="Deutsch_1984"/>जिसने प्रक्रिया वर्चुअल मशीन का उपयोग करने वाले कार्यान्वयन दृष्टिकोण के रूप में जस्ट-इन-टाइम संकलन | जस्ट-इन-टाइम (JIT) संकलन को आगे बढ़ाया।<ref name="Aycock_2003"/>बाद में उल्लेखनीय स्मॉलटाक वीएम विजुअलवर्क्स, स्क्वीक वर्चुअल मशीन,<ref name="Ingalls_1997"/>और स्ट्रॉन्गटॉक।<ref name="Griswold_1993"/>एक संबंधित भाषा जिसने बहुत सारे वर्चुअल मशीन इनोवेशन का निर्माण किया, वह सेल्फ (प्रोग्रामिंग लैंग्वेज) प्रोग्रामिंग लैंग्वेज थी,<ref name="Ungar_1987"/>जिसने अनुकूली अनुकूलन का बीड़ा उठाया<ref name="Hoelzle"/>और ट्रेसिंग कचरा संग्रह#जेनरेशनल जीसी (अल्पकालिक जीसी)। ये तकनीक 1999 में हॉटस्पॉट (वर्चुअल मशीन) जावा वर्चुअल मशीन में व्यावसायिक रूप से सफल साबित हुई।<ref name="Paleczny_2001"/>अन्य नवाचारों में एक रजिस्टर-आधारित वर्चुअल मशीन शामिल है, जो स्टैक-आधारित वर्चुअल मशीन के बजाय अंतर्निहित हार्डवेयर से बेहतर मेल खाती है, जो प्रोग्रामिंग भाषा के लिए एक करीबी मैच है; 1995 में, लिम्बो (प्रोग्रामिंग भाषा) भाषा के लिए डिस वर्चुअल मशीन द्वारा इसका बीड़ा उठाया गया था। OpenJ9, OpenJDK में HotSpot JVM का एक विकल्प है और हॉटस्पॉट की तुलना में बेहतर स्टार्टअप और कम संसाधन खपत का दावा करने वाला एक ओपन सोर्स एक्लिप्स प्रोजेक्ट है।
स्मॉलटॉक-80 के कार्यान्वयन में महत्वपूर्ण प्रगति हुई,<ref name="Goldberg_1983"/>विशेष रूप से ड्यूश/शिफमैन कार्यान्वयन<ref name="Deutsch_1984"/> जिसने प्रक्रिया वर्चुअल मशीन का उपयोग करने वाले कार्यान्वयन दृष्टिकोण के रूप में सही समय पर (जेआईटी) संकलन को आगे बढ़ाया।<ref name="Aycock_2003"/> बाद में उल्लेखनीय स्मॉलटाक वर्चुअल मशीन विजुअलवर्क्स, स्क्वीक वर्चुअल मशीन,<ref name="Ingalls_1997"/>और स्ट्रॉन्गटॉक थे।<ref name="Griswold_1993"/> एक संबंधित भाषा जिसने बहुत सारे वर्चुअल मशीन नवाचार का निर्माण किया, वह सेल्फ (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा थी,<ref name="Ungar_1987"/> जिसने अनुकूली अनुकूलन <ref name="Hoelzle"/> और पारंपरिक गारवेज संग्रह का नेतृत्व किया। ये तकनीकें 1999 में हॉटस्पॉट जावा वर्चुअल मशीन में व्यावसायिक रूप से सफल प्रमाणित हुईं।<ref name="Paleczny_2001"/> अन्य नवाचारों में एक पंजीकृत-आधारित वर्चुअल मशीन सम्मिलित है, जो स्टैक-आधारित वर्चुअल मशीन के अतिरिक्त अंतर्निहित हार्डवेयर से अधिकतम अनुरूप है, जो प्रोग्रामिंग भाषा के लिए एक लगभग समान है; 1995 में, लिम्बो (प्रोग्रामिंग भाषा) भाषा के लिए डिस वर्चुअल मशीन द्वारा अग्रणी था। ओपनजे9, ओपनजेडीके में हॉटस्पॉट जावा वर्चुअल मशीन का एक विकल्प है और हॉटस्पॉट की तुलना में अधिकतम स्टार्टअप और कम संसाधन उपभोग का दावा करने वाला एक मुक्त-स्त्रोत ग्रहण परियोजना है।


== पूर्ण वर्चुअलाइजेशन ==
== पूर्ण वर्चुअलाइजेशन ==
{{Main|Full virtualization}}
{{Main|पूर्ण वर्चुअलाइजेशन}}
[[File:Hardware Virtualization (copy).svg|thumb|पूर्ण वर्चुअलाइजेशन का तार्किक आरेख]]पूर्ण वर्चुअलाइजेशन में, वर्चुअल मशीन एक असंशोधित अतिथि OS (एक ही निर्देश सेट के लिए डिज़ाइन किया गया) को अलगाव में चलाने के लिए पर्याप्त हार्डवेयर का अनुकरण करती है। यह दृष्टिकोण 1966 में IBM CP-40 और CP-67, VM (ऑपरेटिंग सिस्टम) परिवार के पूर्ववर्तियों के साथ अग्रणी था।
[[File:Hardware Virtualization (copy).svg|thumb|पूर्ण वर्चुअलाइजेशन का तार्किक आरेख]]पूर्ण वर्चुअलाइजेशन में, वर्चुअल मशीन एक असंशोधित गेस्ट ऑपरेटिंग सिस्टम (एक ही निर्देश सेट के लिए डिज़ाइन किया गया) को आइसोलेशन में सक्रिय करने के लिए पर्याप्त हार्डवेयर का अनुकरण करती है। यह दृष्टिकोण 1966 में अंतरराष्ट्रीय व्यवसाय मशीन निगम नियंत्रण प्रोग्राम-40 और