2012-10-12 35 views
9

आज मैं some slides about Andoird basics पढ़ रहा था और वाक्यांश छपी:एक रजिस्टर-बेस वीएम के बीच एक स्टैक-आधारित एक के बीच मुख्य अंतर क्या हैं?

Dalvik वी एम रजिस्टर आधारित ढेर के बजाय आधारित है।

तो, एक रजिस्टर-बेस वीएम बनाम स्टैक-आधारित एक के बीच मुख्य अंतर क्या हैं?


दूसरी कड़ी answerd पर्याप्त मेरे सवाल:

http://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-architecture-and-the-dalvik-vm/

एक और लिंक:

http://androidjayavelu.blogspot.co.at/2011/06/dalvik-virtual-machine-vs-java-virtual.html

+1

जावा स्रोत से स्तर में कोई वैचारिक अंतर नहीं है। अंतर बाइटकोड्स (वह जावैक उत्पादन) में है, जहां स्टैक-आधारित बाइटकोड स्टैक के मामले में लिखे जाते हैं, जबकि रजिस्टर-आधारित मॉडल के लिए बाइटकोड शब्द में लिखे गए हैं रजिस्ट्रारों के –

+3

(जेआईटी-संकलित जावा, यहां तक ​​कि "स्टैक-आधारित" आर्किटेक्चर पर भी रजिस्टर-आधारित है।) –

+0

यह लिंक आपको अधिक स्पष्टीकरण प्राप्त करने में मदद करेगा http://markfaction.wordpress.com/2012/07/ 15/ढेर आधारित-बनाम-रजिस्टर आधारित आभासी मशीन-वास्तुकला और-Dalvik-वी एम/ – LeoMobDev

उत्तर

2

इस लेख के साथ-साथ बहुत जानकारीपूर्ण है: http://www.codeproject.com/Articles/461052/Stack-based-vs-Register-based-Virtual-Machine-Arch

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

stackAdd

पॉप 20 पॉप: ढेर आधारित आभासी मशीन में, दो नंबर शामिल करने के आपरेशन आमतौर पर निम्नलिखित तरीके (जहां 20, 7, और 'परिणाम' ऑपरेंड कर रहे हैं) में किया जाएगा 7 एडीडी 20, 7, परिणाम पुश परिणाम पुश और पीओपी संचालन के कारण, अतिरिक्त ऑपरेशन करने के लिए निर्देशों की चार पंक्तियों की आवश्यकता है। स्टैक आधारित मॉडल का एक लाभ यह है कि ऑपरेंड को स्टैक पॉइंटर (उपरोक्त छवि में एसपी) द्वारा स्पष्ट रूप से संबोधित किया जाता है। इसका मतलब यह है कि वर्चुअल मशीन को ऑपरेंड पते को स्पष्ट रूप से जानने की आवश्यकता नहीं है, क्योंकि स्टैक पॉइंटर को कॉल करने से अगले ऑपरेंड (पॉप) दिया जाएगा। स्टैक आधारित वीएम में, सभी अंकगणितीय और तर्क संचालन संचालन को पुशिंग और पंप करके और स्टैक में परिणाम के माध्यम से किए जाते हैं।

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

registerAdd

जोड़ें R1, R2, R3; # आर 1 और आर 2 की सामग्री जोड़ें, आर 3 में स्टोर परिणाम जैसा कि मैंने पहले उल्लेख किया था, वहां कोई पीओपी या पुश ऑपरेशन नहीं है, इसलिए जोड़ने के लिए निर्देश केवल एक पंक्ति है। लेकिन ढेर के विपरीत, हमें ऑपरेटरों के पते को आर 1, आर 2, और आर 3 के रूप में स्पष्ट रूप से उल्लेख करने की आवश्यकता है। यहां का लाभ यह है कि स्टैक से धक्का देने और पॉपिंग करने का ओवरहेड मौजूद नहीं है, और एक रजिस्टर आधारित वीएम में निर्देश निर्देश प्रेषण लूप के भीतर तेजी से निष्पादित होते हैं।

रजिस्टर आधारित मॉडल का एक अन्य लाभ यह है कि यह कुछ अनुकूलन की अनुमति देता है जो स्टैक आधारित दृष्टिकोण में नहीं किया जा सकता है। ऐसा ही एक उदाहरण है जब वहाँ कोड में आम उप अभिव्यक्ति कर रहे हैं, रजिस्टर मॉडल यह एक बार की गणना करने और भविष्य में उपयोग के लिए एक रजिस्टर में परिणाम की दुकान जब उप अभिव्यक्ति फिर जो अभिव्यक्ति recalculating की लागत कम कर देता है ऊपर आता है, कर सकते हैं।

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

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

+0

यदि यह एक उत्तर है, तो कृपया यहां प्रासंगिक कोड पेस्ट करें; लिंक बदल सकते हैं और यह उत्तर अब प्रासंगिक नहीं होगा। – rfornal