कंप्यूटर सिस्टम सिमुलेटर - क्या वे वास्तविकता की तरह दिखते हैं

सिमुलेटर के क्षेत्र से बुनियादी शब्दों के बारे में एक सरल और सुलभ भाषा में, साथ ही साथ मॉडल के विस्तार के प्रकार और स्तर। इस क्षेत्र के साथ आसान और त्वरित परिचित के लिए सामग्री।

छवि

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

मुझे यकीन है कि आप में से कई लोग सिमुलेटर पर आ गए हैं, जिन्हें अक्सर वर्चुअल मशीन, हाइपरवाइज़र कहा जाता है। कोई MacOS से विंडोज चलाने के लिए अपने मैक पर Parallels स्टूडियो स्थापित करता है, कोई VmWare से उत्पाद का उपयोग करता है - वर्कस्टेशन में एक और ऑपरेटिंग सिस्टम (OS) है जो पहले से स्थापित है। लिनक्स से परिचित लोग KVM और QEMU पसंद करते हैं। लोगों के बीच भी लोकप्रिय है VirtualBox। व्यावसायिक रूप से FPGA आधारित हार्डवेयर (प्रोग्रामेबल लॉजिक इंटीग्रेटेड सर्किट) विकसित करने वाले लोग SynCSys और Mentor Graphics Questa से VCS के बारे में जानते हैं। और फिर भी यह केवल एक छोटा सा हिस्सा है जिसे सिमुलेटर कहा जा सकता है।

एक सिम्युलेटर क्या है?


एक सिम्युलेटर एक मॉडल है, आमतौर पर एक सॉफ्टवेयर, वास्तविक डिवाइस। तदनुसार, सिमुलेशन ऐसे मॉडल की एक प्रक्रिया है जो डिवाइस के संचालन को दोहराता है।

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

सिमुलेशन में Airbnb - अतिथि और मेजबान


सिम्युलेटर के अंदर चलने वाले कोड को "अतिथि कोड" कहा जाता है, यह "अतिथि कार्यक्रम" या पूरे "अतिथि ऑपरेटिंग सिस्टम" हो सकता है। नकली प्रणाली को केवल एक "अतिथि" कहा जाता है। बदले में, सिस्टम, जिस कंप्यूटर पर सिम्युलेटर चलता है, उसे "होस्ट" (अंग्रेजी होस्ट) कहा जाता है, और ऑपरेटिंग सिस्टम होस्ट पर चल रहा है जिसमें सिम्युलेटर "होस्ट ओएस" कहलाता है।

छवि

इस प्रकार, हम कह सकते हैं कि एक सिम्युलेटर जो अतिथि सिस्टम निर्देशों के एक निश्चित सेट को लागू करता है, उन्हें उपलब्ध होस्ट सिस्टम टूल का उपयोग करके अनुकरण करता है।

अनुकरण और अनुकरण - कौन सा नाम सही है?


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

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

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

छवि

सिमुलेशन विस्तार के 4 स्तर


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

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

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

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

यदि हम सरल उपकरणों के बारे में बात कर रहे हैं, तो हाथ पर FPGA की छवि होने पर, आप विशेष कंपनियों से संपर्क कर सकते हैं जो प्रोग्राम किए गए तर्क के साथ एक वास्तविक (गैर-FPGA) डिवाइस बनाएंगे।

नीचे दिया गया आंकड़ा वर्णित सिमुलेशन स्तरों को दर्शाता है।

छवि

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

तो सिमुलेटर और वास्तविकता की तुलना के बारे में क्या?

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

यह सबसे बुनियादी जानकारी है कि सिमुलेटर क्या हैं और वे क्या हैं। अगले लेख में मैं पूर्ण-प्लेटफ़ॉर्म सिमुलेटर के कार्यान्वयन, बीट मॉडल और पटरियों के साथ काम करने के विवरण का वर्णन करूंगा।

All Articles