आभासी मशीन

कंप्यूटिंग में, एक वर्चुअल मशीन (VM) एक कंप्यूटर प्रणाली का वर्चुअलाइजेशन/एमुलेटर है। वर्चुअल मशीनें कंप्यूटर आर्किटेक्चर पर आधारित होती हैं और एक भौतिक कंप्यूटर की कार्यक्षमता प्रदान करती हैं। उनके कार्यान्वयन में विशेष हार्डवेयर, सॉफ्टवेयर या संयोजन शामिल हो सकते हैं। आभासी मशीनें भिन्न होती हैं और उनके कार्य द्वारा व्यवस्थित होती हैं, यहाँ दिखाया गया है:


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

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

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

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

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

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

अपने स्वयं के अतिथि ऑपरेटिंग सिस्टम चलाने वाले एकाधिक वीएम अक्सर सर्वर समेकन के लिए लगे रहते हैं।

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

एक प्रक्रिया VM एक उच्च-स्तरीय अमूर्तता प्रदान करती है – एक उच्च-स्तरीय प्रोग्रामिंग भाषा (सिस्टम VM के निम्न-स्तरीय ISA अमूर्तता की तुलना में)। प्रक्रिया वीएम एक दुभाषिया (कंप्यूटिंग) का उपयोग करके कार्यान्वित की जाती हैं; संकलित प्रोग्रामिंग भाषाओं के तुलनीय प्रदर्शन को समय-समय पर संकलन के उपयोग से प्राप्त किया जा सकता है।

इस प्रकार का वीएम जावा (प्रोग्रामिंग भाषा)  के साथ लोकप्रिय हो गया है, जिसे जावा वर्चुअल मशीन का उपयोग करके कार्यान्वित किया जाता है। अन्य उदाहरणों में  तोता आभासी मशीन  और .NET फ्रेमवर्क शामिल हैं, जो  सामान्य भाषा रनटाइम  नामक वीएम पर चलता है। ये सभी किसी भी कंप्यूटर भाषा के लिए अमूर्त परत के रूप में काम कर सकते हैं।

प्रक्रिया वीएम का एक विशेष मामला सिस्टम है जो एक (संभावित रूप से विषम) कंप्यूटर क्लस्टर के संचार तंत्र पर अमूर्त है। इस तरह के वीएम में एक प्रक्रिया नहीं होती है, लेकिन क्लस्टर में प्रत्येक भौतिक मशीन के लिए एक प्रक्रिया होती है। वे इंटरकनेक्ट और OS द्वारा प्रदान किए गए संचार तंत्र के बजाय प्रोग्रामर को एल्गोरिदम पर ध्यान केंद्रित करके प्रोग्रामिंग समवर्ती अनुप्रयोगों के कार्य को आसान बनाने के लिए डिज़ाइन किए गए हैं। वे इस तथ्य को नहीं छिपाते हैं कि संचार होता है, और इस तरह क्लस्टर को एक मशीन के रूप में प्रस्तुत करने का प्रयास नहीं करते हैं।

अन्य प्रक्रिया वीएम के विपरीत, ये सिस्टम एक विशिष्ट प्रोग्रामिंग भाषा प्रदान नहीं करते हैं, लेकिन एक मौजूदा भाषा में सन्निहित हैं; आमतौर पर ऐसी प्रणाली कई भाषाओं (जैसे, सी (प्रोग्रामिंग भाषा) और फोरट्रान) के लिए बाइंडिंग प्रदान करती है। उदाहरण समानांतर वर्चुअल मशीन (PVM) और संदेश पासिंग इंटरफ़ेस (MPI) हैं। वे सख्ती से वर्चुअल मशीन नहीं हैं क्योंकि शीर्ष पर चलने वाले एप्लिकेशन अभी भी सभी ओएस सेवाओं तक पहुंच रखते हैं और इसलिए सिस्टम मॉडल तक ही सीमित नहीं हैं।

इतिहास
सिस्टम वर्चुअल मशीन और प्रोसेस वर्चुअल मशीन दोनों ही 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 के समय के हैं, जबकि सॉफ्टवेयर एमुलेशन (तत्कालीन सिमुलेशन कहा जाता है) इससे पहले का है।

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

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

पूर्ण वर्चुअलाइजेशन
पूर्ण वर्चुअलाइजेशन में, वर्चुअल मशीन एक असंशोधित अतिथि OS (एक ही निर्देश सेट के लिए डिज़ाइन किया गया) को अलगाव में चलाने की अनुमति देने के लिए पर्याप्त हार्डवेयर का अनुकरण करती है। यह दृष्टिकोण 1966 में IBM CP-40 और CP-67, VM (ऑपरेटिंग सिस्टम) परिवार के पूर्ववर्तियों के साथ अग्रणी था।

मेनफ्रेम फील्ड के बाहर के उदाहरणों में समानांतर कार्य केंद्र, मैक के लिए पैरेलल्स डेस्कटॉप, VirtualBox, आभासी लोहा, ओरेकल वीएम, माइक्रोसॉफ्ट वर्चुअल पीसी, माइक्रोसॉफ्ट वर्चुअल सर्वर, हाइपर-वी, वीएमवेयर फ्यूजन,  VMware कार्य केंद्र , वीएमवेयर सर्वर (बंद, जिसे पहले जीएसएक्स सर्वर कहा जाता था) शामिल हैं। , VMware ESXi, QEMU, ऑपरेटिंग सिस्टम के लिए अनुकूली डोमेन पर्यावरण, Mac-on-Linux, Win4BSD, Win4Lin, और Egenera vBlade तकनीक।

हार्डवेयर-असिस्टेड वर्चुअलाइजेशन
हार्डवेयर-असिस्टेड वर्चुअलाइजेशन में, हार्डवेयर आर्किटेक्चरल सपोर्ट प्रदान करता है जो वर्चुअल मशीन मॉनिटर बनाने की सुविधा देता है और गेस्ट OS को आइसोलेशन में चलाने की अनुमति देता है। वीएम (ऑपरेटिंग सिस्टम) | वीएम/370 के साथ प्रयोग के लिए 1972 में आईबीएम सिस्टम/370 पर पहली बार हार्डवेयर-असिस्टेड वर्चुअलाइजेशन पेश किया गया था, जो आईबीएम द्वारा एक आधिकारिक उत्पाद के रूप में पेश किया गया पहला वर्चुअल मशीन ऑपरेटिंग सिस्टम है। 2005 और 2006 में, Intel और Advanced Micro Devices ने वर्चुअलाइजेशन का समर्थन करने के लिए अतिरिक्त हार्डवेयर प्रदान किया। सन माइक्रोसिस्टम्स (अब Oracle Corporation) ने 2005 में अपने SPARC T3|UltraSPARC T-Series प्रोसेसर में इसी तरह की विशेषताएं जोड़ीं। ऐसे हार्डवेयर के लिए अनुकूलित वर्चुअलाइजेशन प्लेटफॉर्म के उदाहरणों में कर्नेल-आधारित वर्चुअल मशीन, VMware वर्कस्टेशन, VMware फ्यूजन, हाइपर- Vविंडोज वर्चुअल पीसी शामिल हैं। PC, Xen, Mac के लिए Parallels Desktop, SPARC के लिए Oracle VM Server, VirtualBox और Parallels Workstation।

2006 में, पहली पीढ़ी के 32- और 64-बिट x86 हार्डवेयर समर्थन को सॉफ्टवेयर वर्चुअलाइजेशन पर शायद ही कभी प्रदर्शन लाभ प्रदान करने के लिए पाया गया था।

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

यह भी देखें

 * अमेज़न मशीन छवि
 * डेस्कटॉप वर्चुअलाइजेशन
 * लिनक्स कंटेनर
 * देशी विकास किट
 * पैरावर्चुअलाइजेशन
 * स्टोरेज हाइपरविजर
 * यूनिवर्सल ट्यूरिंग मशीन
 * आभासी उपकरण
 * वर्चुअल बैकअप उपकरण
 * वर्चुअल डिस्क छवि
 * वर्चुअल डॉस मशीन (वीडीएम)
 * वर्चुअल मशीन एस्केप

अग्रिम पठन

 * James E. Smith, Ravi Nair, Virtual Machines: Versatile Platforms For Systems And Processes, Morgan Kaufmann, May 2005, ISBN 1-55860-910-5, 656 pages (covers both process and system virtual machines)
 * Craig, Iain D. Virtual Machines. Springer, 2006, ISBN 1-85233-969-1, 269 pages (covers only process virtual machines)

बाहरी संबंध

 * Sandia National Laboratories Runs 1 Million Linux Kernels as Virtual Machines
 * The design of the Inferno virtual machine by Phil Winterbottom and Rob Pike
 * The design of the Inferno virtual machine by Phil Winterbottom and Rob Pike