2008-10-02 12 views
43

स्टैक-आधारित आभासी मशीन का उपयोग कर एक रजिस्टर-आधारित वर्चुअल मशीन बनाम उपयोग करने के फायदे और नुकसान क्या हैं?रजिस्ट्रार बनाम स्टैक्स

मेरे लिए, ऐसा लगता है कि एक रजिस्टर आधारित मशीन प्रोग्राम के लिए अधिक सीधे आगे और अधिक कुशल होगी। तो यह क्यों है कि जेवीएम, सीएलआर, और पायथन वीएम सभी ढेर-आधारित हैं?

उत्तर

26

यह पहले से ही, जवाब किया गया है एक निश्चित स्तर तक, तोता वी एम के सवाल जवाब में और संबद्ध दस्तावेज:

तोता वीएम एक रजिस्टर वास्तुकला होगा: A Parrot Overview कि दस्तावेज़ से प्रासंगिक पाठ यह है , एक ढेर वास्तुकला के बजाय। इसमें बहुत कम स्तर के संचालन भी होंगे, जो कि जावा और पर्ल और पाइथन के मध्यम-स्तरीय ओप की तुलना में अधिक समान है।

इस निर्णय का तर्क मुख्य रूप से अंतर्निहित हार्डवेयर जैसा कुछ हद तक समान है, तो तोते बाइटकोड को कुशल देशी मशीन भाषा में संकलित करना संभव है।

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

आप भी इस पढ़ सकते हैं

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

7

आपको कितने रजिस्टरों की आवश्यकता है?

मुझे शायद उससे कम से कम एक की आवश्यकता होगी।

+0

मैं देख सकता हूं कि आप क्या प्राप्त कर रहे हैं, लेकिन यह एक ढेर से अलग कैसे है? ढेर भी बहुत छोटे बनाया जा सकता है। –

+1

वर्चुअल मशीनों को सॉफ़्टवेयर में कार्यान्वित करने के रूप में देखकर, आपका स्टैक आकार लगभग असीमित है। रजिस्टर सीमित हैं। मेरे पास आर 1-आर 32 हो सकता है। मैं सॉफ्टवेयर में r33 बना सकता हूं, लेकिन अन्य वर्गों को क्या जानने की आवश्यकता होगी? –

+17

तोता में असीमित कई रजिस्ट्रार हैं। क्या आप वाकई उससे अधिक की जरूरत है? –

34

हार्डवेयर में कार्यान्वित, एक रजिस्टर-आधारित मशीन अधिक कुशल होने जा रही है क्योंकि धीमी रैम के लिए कम पहुंच है। सॉफ़्टवेयर में, हालांकि, यहां तक ​​कि एक रजिस्टर आधारित आर्किटेक्चर में रैम में "रजिस्ट्रार" होने की संभावना है। एक स्टैक आधारित मशीन उस मामले में उतनी ही कुशल होगी।

इसके अतिरिक्त एक स्टैक-आधारित वीएम कंपेलरों को लिखना बहुत आसान बना रहा है। आपको पंजीकरण आवंटन रणनीतियों से निपटने की ज़रूरत नहीं है। आपके पास काम करने के लिए अनिवार्य रूप से रजिस्टरों की असीमित संख्या है।

अद्यतन: मैंने इस उत्तर को एक व्याख्याित वीएम मानते हुए लिखा था। यह एक जेआईटी संकलित वीएम के लिए सच नहीं हो सकता है। मैं this paper में भाग गया जो इंगित करता है कि एक जेआईटी संकलित वीएम एक रजिस्टर आर्किटेक्चर का उपयोग करके अधिक कुशल हो सकता है।

12

स्टैक-आधारित वीएम बनाने का एक कारण यह है कि वास्तविक वीएम ऑपकोड छोटे और सरल हो सकते हैं (ऑपरेटरों को एन्कोड/डीकोड करने की आवश्यकता नहीं है)। यह जेनरेट कोड को छोटा बनाता है, और वीएम कोड को भी सरल बनाता है।

1

स्टैक आधारित वीएम के लिए कोड उत्पन्न करना आसान है।

रजिस्टर आधारित वीएम के लिए तेजी से कार्यान्वयन करना आसान है, और अत्यधिक अनुकूलित कोड उत्पन्न करना आसान है।

आपके पहले प्रयास के लिए, मैं एक स्टैक आधारित वीएम से शुरू करने की सलाह देता हूं।

+0

मैं समझ नहीं पा रहा हूं कि जब आप कहते हैं कि "रजिस्टर आधारित वीएम के लिए तेजी से कार्यान्वयन करना आसान है"। क्या आप एक उदाहरण दे सकते हैं? –

3

यह मेरे लिए स्पष्ट नहीं है कि "रजिस्टर-आधारित" आभासी मशीन "कार्यक्रम के लिए अधिक सीधे आगे" या "अधिक कुशल" होगी। शायद आप सोच रहे हैं कि वर्चुअल रजिस्ट्रार जेआईटी संकलन चरण के दौरान एक छोटा सा कट प्रदान करेगा? यह निश्चित रूप से मामला नहीं होगा, क्योंकि वास्तविक प्रोसेसर में वीएम की तुलना में अधिक या कम रजिस्ट्रार हो सकते हैं, और उन रजिस्टरों का उपयोग विभिन्न तरीकों से किया जा सकता है। (उदाहरण: घटने वाले मूल्यों को x86 प्रोसेसर पर ईसीएक्स रजिस्टर में सबसे अच्छा रखा जाता है।) यदि वास्तविक मशीन में वीएम की तुलना में अधिक रजिस्ट्रार हैं, तो आप संसाधनों को बर्बाद कर रहे हैं, कम और आपने "रजिस्टर" का उपयोग करके कुछ हासिल नहीं किया है आधारित "प्रोग्रामिंग।

2

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

+2

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

+0

फर्थ को दोहरी स्टैक वर्चुअल मशीन माना जा सकता है। इसमें एक डेटा और रिटर्न स्टैक है।जब फर्थ वीएम को हार्डवेयर में स्थानांतरित किया जाता है, जैसे नोवीक्स एनसी 4016 या हैरिस आरटीएक्स 2000 चिप्स, तो आप मूल भाषा के रूप में फर्थ को प्राप्त करते हैं। –

16

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

अध्ययनों से पता चला है कि एक पंजीकृत-आधारित आर्किटेक्चर को स्टैक-आधारित आर्किटेक्चर की तुलना में औसत 47% कम निष्पादित वीएम निर्देशों की आवश्यकता होती है, और रजिस्टर कोड संबंधित स्टैक कोड से 25% बड़ा है लेकिन अधिक वीएम निर्देशों को लाने की लागत में वृद्धि बड़े कोड आकार के कारण केवल 1.07% अतिरिक्त वास्तविक मशीन लोड प्रति वीएम निर्देश शामिल है जो नगण्य है। रजिस्टर-आधारित वीएम का समग्र प्रदर्शन यह है कि मानक मानकों को निष्पादित करने के लिए औसतन 32.3% कम समय लगता है।

+6

यहां इस उत्तर में उद्धृत आंकड़ों का संदर्भ दिया गया है: http://db.usenix.org/events/vee05/full_papers/p153-yunhe.pdf - ध्यान दें कि गति अंतर एक दुभाषिया के लिए है, न कि एक जेआईटी कंपाइलर। वास्तविक संख्याओं के लिए –

+0

+1 –

संबंधित मुद्दे