سؤال

ما هي مزايا وعيوب استخدام جهاز ظاهري قائم على التسجيل مقابل استخدام جهاز ظاهري قائم على المكدس؟

بالنسبة لي، يبدو الأمر كما لو أن الآلة القائمة على التسجيل ستكون أكثر مباشرة في البرمجة وأكثر كفاءة.فلماذا تعتمد كل من JVM وCLR وPython VM على المكدس؟

هل كانت مفيدة؟

المحلول

تمت الإجابة على هذا السؤال بالفعل، إلى مستوى معين، في الأسئلة الشائعة الخاصة بـ Parrot VM والمستندات المرتبطة به:نظرة عامة على الببغاءالنص ذو الصلة من هذا المستند هو:

سيكون لدى Parrot VM بنية تسجيل، بدلاً من بنية المكدس.سيكون لديه أيضًا عمليات منخفضة المستوى للغاية، تشبه إلى حد كبير عمليات Java مقارنة بالعمليات متوسطة المستوى مثل Perl وPython وما شابه.

السبب وراء هذا القرار هو في المقام الأول أنه من خلال التشابه مع الأجهزة الأساسية إلى حد ما، فمن الممكن تجميع كود Parrot الثانوي إلى لغة الآلة الأصلية الفعالة.

علاوة على ذلك، تتكون العديد من البرامج في اللغات عالية المستوى من استدعاءات دالة وأساليب متداخلة، وفي بعض الأحيان تحتوي على متغيرات معجمية للحصول على نتائج متوسطة.ضمن إعدادات غير JIT، سوف يظهر جهاز افتراضي قائم على المكدس ثم يدفع نفس المعاملات عدة مرات، في حين أن جهاز افتراضي قائم على السجل سيخصص ببساطة الكمية المناسبة من السجلات ويعمل عليها، مما يمكن أن يقلل بشكل كبير من حجم العمليات ووقت وحدة المعالجة المركزية.

قد ترغب أيضًا في قراءة هذا: السجلات مقابل المكدسات لتصميم المترجم نقلا عن ذلك قليلا:

ليس هناك شك حقيقي في أنه من الأسهل إنشاء تعليمات برمجية لآلة مكدسة.يمكن لمعظم طلاب المترجمين الجدد القيام بذلك.يعد إنشاء التعليمات البرمجية لجهاز التسجيل أكثر صعوبة بعض الشيء، إلا إذا كنت تعامله كجهاز مكدس مزود بمراكم.(وهو أمر قابل للتنفيذ، وإن كان إلى حد ما أقل من المثالي من وجهة نظر الأداء) إن بساطة الاستهداف ليست مشكلة كبيرة، على الأقل ليس بالنسبة لي، ويرجع ذلك جزئيًا إلى أن قلة قليلة من الناس سيستهدفونها بشكل مباشر - أعني، هيا، كم عدد الأشخاص الذين تعرفهم والذين يحاولون بالفعل كتابة مترجم لشيء قد يهتم به أي شخص؟الأعداد صغيرة.المشكلة الأخرى هي أن العديد من الأشخاص الذين لديهم معرفة بالمترجمين يشعرون بالراحة بالفعل في استهداف أجهزة التسجيل، لأن هذا هو الحال مع جميع وحدات المعالجة المركزية للأجهزة شائعة الاستخدام.

نصائح أخرى

عند تطبيقه في الأجهزة، سيكون الجهاز المعتمد على التسجيل أكثر كفاءة، وذلك ببساطة لأن هناك عددًا أقل من الوصول إلى ذاكرة الوصول العشوائي الأبطأ.ومع ذلك، في البرامج، حتى البنية القائمة على السجل سيكون لها على الأرجح "السجلات" في ذاكرة الوصول العشوائي.ستكون الآلة القائمة على المكدس فعالة بنفس القدر في هذه الحالة.

بالإضافة إلى ذلك، فإن جهاز VM القائم على المكدس سيجعل كتابة المترجمات أسهل كثيرًا.ليس عليك التعامل مع استراتيجيات تخصيص التسجيل.لديك، بشكل أساسي، عدد غير محدود من السجلات للعمل معها.

تحديث: لقد كتبت هذه الإجابة بافتراض وجود جهاز VM مترجم.قد لا يكون هذا صحيحًا بالنسبة لجهاز VM المترجم من JIT.ركضت عبر هذه الورقة والذي يبدو أنه يشير إلى أن الجهاز الظاهري المترجم من JIT قد يكون أكثر كفاءة باستخدام بنية التسجيل.

تقليديًا، فضل منفذو الأجهزة الافتراضية البنى القائمة على المكدس على القائمة على التسجيل نظرًا "لبساطة تنفيذ VM" وسهولة كتابة الواجهة الخلفية للمترجم - تم تصميم معظم الأجهزة الافتراضية في الأصل لاستضافة لغة واحدة وكثافة التعليمات البرمجية والملفات القابلة للتنفيذ لبنية المكدس تكون دائمًا أصغر من الملفات التنفيذية لبنيات التسجيل.البساطة وكثافة التعليمات البرمجية هي تكلفة الأداء.

أظهرت الدراسات أن البنية القائمة على التسجيل تتطلب تنفيذ تعليمات VM أقل بنسبة 47% في المتوسط ​​من البنية القائمة على المكدس، وأن رمز التسجيل أكبر بنسبة 25% من رمز المكدس المقابل، ولكن هذه الزيادة في تكلفة جلب المزيد من تعليمات VM بسبب الكود الأكبر يتضمن الحجم 1.07% فقط من أحمال الماكينة الحقيقية الإضافية لكل تعليمات VM وهو أمر لا يكاد يذكر.الأداء العام للجهاز الافتراضي القائم على التسجيل هو أنه يستغرق، في المتوسط، وقتًا أقل بنسبة 32.3% لتنفيذ المعايير القياسية.

وسبب واحد لبناء قائم على كومة نظام رصد السفن هو أن هذا أكواد العمليات VM الفعلية يمكن أن يكون أصغر وأبسط (لا حاجة لتشفير / فك المعاملات). وهذا يجعل الشفرة التي تم إنشاؤها أصغر، وأيضا يجعل رمز VM بساطة.

كم عدد السجلات التي تحتاجها؟

وأنا ربما تحتاج إلى واحد على الأقل أكثر من ذلك.

وليس من الواضح لي أن "تقوم على تسجيل" الجهاز الظاهري سيكون "أكثر مباشرة إلى الأمام لبرنامج" أو "أكثر فعالية". ربما كنت تفكر أن سجلات افتراضية من شأنه أن يوفر قطع قصيرة خلال مرحلة تجميع JIT؟ هذا بالتأكيد لن يكون هذا هو الحال، لأن المعالج الحقيقي قد يكون أكثر أو أقل من سجلات VM، ويمكن استخدام هذه السجلات بطرق مختلفة. (مثال: القيم التي هي على وشك أن decremented توضع الأفضل في ECX تسجيل على معالجات x86.) إذا كان الجهاز الحقيقي لديها اكثر من سجلات VM والموارد ثم كنت إضاعة، أقل وكنت قد اكتسبت شيئا باستخدام "السجل المستندة إلى "البرمجة.

وVM

والمكدس على أساس أكثر بساطة ورمز هو أكثر من ذلك بكثير المضغوط. وكمثال العالم الحقيقي، وهو صديق بنيت (حوالي 30 عاما) نظام تسجيل البيانات مع البيرة الرابع VM على COSMAC. كان الرابع VM 30 <م> بايت من التعليمات البرمجية على جهاز مع 2K من ROM و 256 بايت من ذاكرة الوصول العشوائي.

ونظام رصد السفن المكدس استنادا أسهل لإنشاء رمز ل.

وسجل نظام رصد السفن تستند هي أسهل لخلق تطبيقات سريعة ل، وأسهل لتوليد رمز الأمثل للغاية ل.

لمحاولتك الأولى، أوصي بدءا كومة أساس VM.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top