संरचना के संदर्भ में वर्चुअलाइजेशन कैसे अनुकरण से भिन्न होता है?


20

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

मेरा मुख्य सवाल यह है कि कैसे वर्चुअलाइजेशन विकसित किया गया है? हम वर्चुअल मशीन में एक संपूर्ण ओएस को एक प्रक्रिया के रूप में चलाने के लिए कैसे सक्षम करते हैं, लेकिन वास्तविक सीपीयू का उपयोग करते समय इसे स्वतंत्र रूप से चलाने के लिए मिलता है? मैं केवल एमुलेशन जानता हूं, वर्चुअलाइजेशन नहीं, इसलिए अगर कोई मदद कर सकता है तो अच्छा होगा!

पुनश्च: मैं केवल यह नहीं पूछ रहा हूं कि अंतर क्या है, लेकिन वे कैसे सॉफ्टवेयर चलाते हैं, इसमें अंतर है।

जवाबों:


32

मूलतः, आप अतिथि OS को वास्तविक हार्डवेयर का उपयोग करने नहीं दे सकते क्योंकि आपके पास इसे नियंत्रित करने का कोई तरीका नहीं था। यदि आपने इसे असली सीपीयू पर चलाने की कोशिश की है, तो आपको कोई गारंटी नहीं थी कि यह होस्ट ओएस पर वापस नियंत्रण करेगा।

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

यहाँ प्रक्रिया का एक सरल उदाहरण दिया गया है:

होस्ट ओएस: अरे सीपीयू, मुझे इस कोड को वर्चुअलाइज्ड चलाने की आवश्यकता है। मुझे कॉल करें अगर यह ऐसा कुछ करना चाहता है जो निर्देशों को निष्पादित नहीं कर रहा है।

होस्ट सीपीयू: आपको मिल गया!
होस्ट CPU सभी होस्ट रजिस्टरों और राज्य को बचाता है, और फिर अतिथि OS कोड निष्पादित करना शुरू करता है

अतिथि OS: मैं ज़िंदा हूँ! अरे सीपीयू, क्या आप मुझे यह फाइल ला सकते हैं?

होस्ट सीपीयू: उह ... यकीन है। एक क्षण।
होस्ट CPU सभी अतिथि रजिस्टर और राज्य को बचाता है, और फिर सभी होस्ट रजिस्टर और राज्य को पुनर्स्थापित करता है
होस्ट CPU: अरे होस्ट ओएस, अतिथि को यह फ़ाइल चाहिए थी!

होस्ट ओएस: ओह, अच्छी तरह से उन्हें यह दें: वर्चुअल हार्ड ड्राइव से फ़ाइल

होस्ट सीपीयू: आपको मिल गया!
होस्ट CPU सभी होस्ट रजिस्टर और राज्य बचाता है, अतिथि रजिस्टर और राज्य को पुनर्स्थापित करता है, और फिर अतिथि OS कोड को
होस्ट करना शुरू करता है होस्ट CPU: यहाँ वह फ़ाइल है!

अतिथि ओएस: मीठा, धन्यवाद!

यहां महत्वपूर्ण अंतर एक एमुलेटर में है, अतिथि ओएस वास्तव में हार्डवेयर पर कभी नहीं चल रहा है। वर्चुअलाइजेशन के साथ, होस्ट ओएस सीपीयू में सीमाओं को कॉन्फ़िगर करता है, और फिर वास्तव में भौतिक सीपीयू पर अतिथि कोड चलाता है। ऊपर दिया गया उदाहरण बेहद सरल है, लेकिन मेमोरी, डिस्क i / o, और यहां तक ​​कि नेटवर्किंग को आज के प्रोसेसर के नवीनतम पर नियंत्रित किया जा सकता है, जिससे उन्हें हर बार होस्ट ओएस को परेशान किए बिना सुरक्षित रूप से हस्तक्षेप करने की अनुमति मिलती है। जब तक अतिथि वर्चुअलाइज्ड सीमाओं के बाहर जाने की कोशिश नहीं करता है, तब तक होस्ट ओएस में कोई भी कोड नहीं चल सकता है अगर उसे किसी दिए गए बिंदु पर कुछ भी नहीं करना है।


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

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

पहली थी प्रिविलेज्ड मेमोरी : कुछ क्रियाएं जो केवल मेमोरी के विशेष क्षेत्रों द्वारा ही की जा सकती हैं। इन क्षेत्रों पर ओएस का कब्जा है, जिससे यह इन विशेषाधिकार प्राप्त कार्यों के लिए प्रवेश द्वार के रूप में कार्य कर सकता है। एक उदाहरण हार्डवेयर को डेटा पढ़ने / लिखने की क्षमता है। यह प्रक्रियाओं को हार्डड्राइव पर सीधे पढ़ने / लिखने से रोकता है, और इसके बजाय उन्हें ओएस को उनके लिए पढ़ने / लिखने के लिए कहने के लिए मजबूर करता है। इसका मतलब यह है कि ओएस जांच कर सकता है कि क्या कार्रवाई करने से पहले प्रक्रिया की अनुमति है।

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

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

ठीक है, इसलिए इस बिंदु पर हम X86 प्रोसेसर की शुरुआत के बारे में पहुंच गए हैं, जहां हम प्रक्रियाओं को सुरक्षित रूप से चला सकते हैं और उन्हें सक्रिय रूप से सिस्टम को लेने से रोक सकते हैं जब तक कि ओएस विशेष रूप से उन्हें ऐसा करने की अनुमति नहीं देता है। इस बिंदु पर, प्रक्रियाएं प्रभावी रूप से "वर्चुअलाइज्ड" होती हैं। यह समर्थन लंबे समय से आस-पास है , इसलिए आप लोगों को वास्तव में वर्चुअलाइज्ड प्रक्रियाओं के बारे में बात करते हुए नहीं सुनते हैं, क्योंकि यह सिर्फ यह माना जाता है कि सभी प्रक्रियाएं अब वर्चुअलाइज्ड हैं।

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


मुझे एक आईआरसी एक एक्ट प्ले की याद दिलाता है जिसे मैंने एक बार देखा था (संभवतः NSFW: इसमें कुछ PG-13 भाषा शामिल है)
स्कॉट चैंबरलेन

मेरे कंप्यूटर में हार्डवेयर वर्चुअलाइजेशन (AMD-V और न ही VT-x) नहीं है। लेकिन मैं वर्चुअलबॉक्स पर एक वर्चुअल मशीन चलाने में सक्षम हूं ... वर्चुअलबॉक्स ओएस पर एक ड्राइवर स्थापित करता है जो ऐसा करने में सक्षम हो। कैसे किया जाता है?
NothingsImpossible

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

@LieRyan स्पष्टीकरण के लिए धन्यवाद। लेकिन यह पुराना नहीं है, यह एक एटम प्रोसेसर है। यह एक सटीक होने के लिए: ark.intel.com/products/70105
NothingsImpossible

1

हम वर्चुअल मशीन में एक संपूर्ण ओएस को एक प्रक्रिया के रूप में चलाने के लिए कैसे सक्षम करते हैं, लेकिन वास्तविक सीपीयू का उपयोग करते समय इसे स्वतंत्र रूप से चलाने के लिए मिलता है?

(निम्नलिखित बहुत सरल है।)

उसी या इसी तरह के तंत्र का उपयोग करके, जो OS उपयोगकर्ता-मोड प्रक्रियाओं को लाइन में रखने के लिए उपयोग करता है, ज्यादातर।

उपयोगकर्ता मोड प्रक्रियाओं में CPU अपवादों का कारण होगा जब वे कुछ ऐसा करने की कोशिश करते हैं जो उन्हें करने की अनुमति नहीं है।

इसलिए, यदि हमारे पास उपयोगकर्ता मोड में एक ओएस कर्नेल है, तो कभी भी यह सीधे एक्सेस हार्डवेयर की तरह कुछ करने की कोशिश करता है, यह एक अपवाद का कारण होगा। एक हाइपरविजर उस अपवाद को उठा सकता है और एक सामान्य कर्नेल की तरह सिस्टम क्रैश के कारण, उत्सर्जित या वर्चुअलाइज्ड व्यवहार के साथ प्रतिक्रिया कर सकता है।

यह इस कर्नेल की ओर से हार्डवेयर का उपयोग कर सकता है, एक संशोधित हार्डवेयर एक्सेस (यानी एक डायरेक्ट डिस्क सेक्टर एक्सेस के बजाय किसी फ़ाइल का एक हिस्सा एक्सेस) कर सकता है, या जो भी आप सपने देख सकते हैं।

CPU वर्चुअल मशीन एक्सटेंशन मूल रूप से CPU के संपूर्ण "सुपरवाइज़र" या "संरक्षित" मोड का विस्तार करता है, ऐसा करने के लिए एक और स्तर बाहर करता है, और वर्चुअल मेमोरी का एक अतिरिक्त "नेस्टिंग स्तर" भी प्रदान करता है ताकि पेजिंग को वर्चुअलाइज़ करना आसान हो।


0

वर्चुअलाइजेशन में कंप्यूटर के हार्डवेयर के कुछ हिस्सों का अनुकरण शामिल है - एक अतिथि ऑपरेटिंग सिस्टम को अनमॉडिफाइड चलाने के लिए पर्याप्त है - लेकिन अधिकांश संचालन अभी भी दक्षता कारणों से वास्तविक हार्डवेयर पर होते हैं। वर्चुअलाइजेशन इसलिए आम तौर पर अनुकरण की तुलना में तेजी से होता है, लेकिन वास्तविक प्रणाली में अतिथि प्रणाली के समान एक वास्तुकला होना आवश्यक है। उदाहरण के लिए, VMWare एक आभासी विंडोज एक्सपी मशीन को "असली" के अंदर चलाने के लिए एक आभासी वातावरण प्रदान कर सकता है। हालांकि VMWare एक वास्तविक x86 पीसी के अलावा किसी भी वास्तविक हार्डवेयर पर काम नहीं कर सकता है।

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


ठीक है ... लेकिन आप कैसे हार्डवेयर के "अनुकरण" भागों का मतलब है? एक एमुलेटर सटीक काम करता है ... वास्तविक सीपीयू संसाधनों का लाभ उठाने के लिए वर्चुअलाइज़िंग को अतिथि ओएस कैसे मिलता है?
टन टन

@tonsbons: परिभाषा के अनुसार। : P एक एमुलेटर सटीक एक ही काम नहीं करता है - यह सीपीयू से सब कुछ ऊपर का अनुकरण करता है। उदाहरण के लिए, Bochs एक एमुलेटर है। वर्चुअलाइजेशन पतला है; एक हाइपरविजर भौतिक सीपीयू पर अतिथि ओएस चलाता है (मूल रूप से अतिथि को यह सोचकर कि यह सीपीयू का मालिक है)। चूँकि अतिथि के पास वह विशेषाधिकार नहीं है जो यह सोचते हैं कि यह है, हालांकि, यह "दोष" को ट्रिगर करता है जब यह कर्नेल के सामान को करने का प्रयास करता है। हाइपरविजर उन दोषों के लिए देखता है, और वर्चुअल हार्डवेयर को ट्विडल करता है ताकि यह अतिथि को दिख सके जैसे कि वास्तव में उन ऑपरेशनों में हुआ था।
cHao

0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.