آلة تكديس

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

تصميم

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

تُدفع المعاملات الثابتة الصحيحة بواسطة تعليمات `load-store` Pushأو `load- Load Immediatestore`. غالبًا ما يتم الوصول إلى الذاكرة بواسطة تعليمات `load-store` منفصلة Loadتحتوي Storeعلى عنوان ذاكرة أو تحسب العنوان من القيم الموجودة في المكدس. تحتوي جميع أجهزة المكدس العملية على متغيرات من رموز عمليات التحميل والتخزين للوصول إلى المتغيرات المحلية والمعاملات الرسمية دون حسابات عناوين صريحة. يمكن أن يتم ذلك عن طريق الإزاحات من عنوان أعلى المكدس الحالي، أو عن طريق الإزاحات من سجل ثابت ذي أساس إطاري.

تُنفّذ مجموعة التعليمات معظم عمليات وحدة الحساب والمنطق باستخدام الترميز اللاحق ( الترميز البولندي العكسي )، والتي تعمل فقط على مكدس التعبيرات، وليس على سجلات البيانات أو خلايا الذاكرة الرئيسية. وهذا يُعدّ ملائمًا جدًا لتنفيذ لغات البرمجة عالية المستوى، لأن معظم التعبيرات الحسابية يُمكن ترجمتها بسهولة إلى الترميز اللاحق.

شجرة بناء الجملة الثنائية للتعبير A *( BC ) + ( D + E )

على سبيل المثال، لنفترض التعبير A *( BC )+( D + E )، المكتوب بالترميز البولندي العكسي كالتالي: A B C − * DE ++ . سيكون تجميع هذا التعبير وتشغيله على آلة مكدس افتراضية بسيطة على النحو التالي:

 # محتويات المكدس (الأيسر = الأعلى = الأحدث): اضغط على A A اضغط B BA اضغط C CBA اطرح من B-CA اضرب # A*(B−C) ادفع D # DA*(B−C) اضغط E # EDA*(B−C) أضف # D+EA*(B−C) أضف # A*(B−C)+(D+E)

تُطبَّق العمليات الحسابية "الطرح" و"الضرب" و"الجمع" على أول عنصرين في مكدس الذاكرة. يأخذ الحاسوب هذين العنصرين من أعلى (أحدث) قيم المكدس، ثم يستبدلهما بالفرق أو المجموع أو الناتج المحسوب. بعبارة أخرى، تُسحب عناصر التعليمات من المكدس، ثم تُعاد نتائجها إليه، لتكون جاهزة للتعليمات التالية.

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

يُعدّ تحسين كود المكدس المُجمّع أمرًا ممكنًا تمامًا. وقد ثبت أن تحسين مخرجات المُجمّع في الخلفية يُحسّن الكود بشكل ملحوظ، [ 3 ] [ 4 ] وربما الأداء، بينما يُحقق التحسين الشامل داخل المُجمّع نفسه مكاسب إضافية. [ 5 ]

تخزين مكدس

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

لنفترض ذلك X+1. يتم تجميعه إلى Load X؛ Load 1؛ Add. مع وجود مكدس مخزن بالكامل في ذاكرة الوصول العشوائي، يقوم هذا بكتابة وقراءة المكدس الموجود في الذاكرة ضمنيًا:

  • قم بتحميل X، ثم قم بنقله إلى الذاكرة.
  • تحميل 1، ثم دفعه إلى الذاكرة
  • اسحب قيمتين من الذاكرة، واجمعهما، ثم ادفع النتيجة إلى الذاكرة.

بإجمالي 5 مراجع لذاكرة التخزين المؤقت للبيانات.

الخطوة التالية هي آلة مكدس أو مترجم ذو سجل واحد في أعلى المكدس. يقوم الكود أعلاه بما يلي:

  • قم بتحميل X في سجل TOS فارغ (إذا كان جهازًا ماديًا) أو ادفع سجل TOS إلى الذاكرة، ثم قم بتحميل X في سجل TOS (إذا كان مترجمًا).
  • قم بتحميل سجل TOS إلى الذاكرة، ثم قم بتحميل الرقم 1 في سجل TOS.
  • استخرج المعامل الأيسر من الذاكرة، وأضفه إلى سجل TOS، واتركه هناك.

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

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

التاريخ والتطبيقات

تم تقديم وصف لهذه الطريقة التي تتطلب فقط قيمتين في كل مرة يتم الاحتفاظ بهما في السجلات، مع مجموعة محدودة من المعاملات المحددة مسبقًا والتي يمكن توسيعها عن طريق تعريف المزيد من المعاملات والوظائف والبرامج الفرعية، لأول مرة في مؤتمر من قبل روبرت س. بارتون في عام 1961. [ 6 ] [ 7 ]

آلات التكديس التجارية

تتضمن أمثلة مجموعات تعليمات المكدس التي يتم تنفيذها مباشرة في الأجهزة ما يلي:

آلات المكدس الافتراضية

أمثلة على آلات المكدس الافتراضية التي يتم تفسيرها في البرامج:

الآلات الهجينة

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

من بين الأساليب الهجينة الشائعة الأخرى البدء ببنية آلة التسجيل، وإضافة نمط عنوان ذاكرة آخر يحاكي عمليات الدفع والسحب لآلات المكدس: "memaddress = reg; reg += instr.displ". استُخدم هذا الأسلوب لأول مرة في الحاسوب المصغر PDP-11 من شركة DEC . [ 24 ] وتمّ اعتماد هذه الميزة في حواسيب VAX ومعالجات Motorola الدقيقة من سلسلتي 6809 و 68000 . وقد أتاح ذلك استخدام أساليب مكدس أبسط في المترجمات المبكرة. كما دعم بكفاءة الآلات الافتراضية باستخدام مترجمات المكدس أو التعليمات البرمجية متعددة الخيوط . مع ذلك، لم تُسهم هذه الميزة في جعل كود آلة التسجيل مضغوطًا مثل كود آلة المكدس الخالص. كذلك، كانت سرعة التنفيذ أقل من سرعة الترجمة الجيدة إلى بنية التسجيل. يُعد تغيير مؤشر أعلى المكدس بشكل متقطع (مرة واحدة لكل استدعاء أو إرجاع) أسرع من تغييره باستمرار صعودًا وهبوطًا خلال كل عبارة برمجية، بل إن تجنب مراجع الذاكرة تمامًا أسرع.

في الآونة الأخيرة، اعتمدت ما يُسمى بأجهزة المكدس من الجيل الثاني مجموعة مخصصة من السجلات لتكون بمثابة سجلات عناوين، مما يُخفف عبء معالجة عناوين الذاكرة عن مكدس البيانات. على سبيل المثال، يعتمد معالج MuP21 على سجل يُسمى "A"، بينما تعتمد معالجات GreenArrays الأحدث على سجلين: A وB. [ 25 ]

تعتمد عائلة معالجات Intel x86 على مجموعة تعليمات تعتمد على المسجلات (المراكم) لمعظم العمليات، بينما تستخدم تعليمات المكدس لحسابات الفاصلة العائمة في معالج x87 ، Intel 8087 ، والتي يعود تاريخها إلى المعالج المساعد iAPX87 (8087) الخاص بمعالجي 8086 و8088. أي أنه لا توجد مسجلات للفاصلة العائمة يمكن للمبرمج الوصول إليها، وإنما مكدس بعرض 80 بت وعمق 8 مستويات فقط. ويعتمد معالج x87 بشكل كبير على وحدة المعالجة المركزية x86 للمساعدة في تنفيذ عملياته.

أجهزة الكمبيوتر التي تستخدم مكدسات الاستدعاء وإطارات المكدس

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

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

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

تدعم بعض أجهزة Burroughs stack المراجعَ العليا مباشرةً في مكوناتها المادية، وذلك باستخدام أنماط عناوين متخصصة وملف سجلات "عرض" خاص يحتوي على عناوين الإطارات لجميع النطاقات الخارجية. حاليًا، جهاز MCST Elbrus هو الوحيد الذي نفّذ ذلك في مكوناته المادية. عندما طوّر نيكلاوس ويرث أول مُصرّف لغة باسكال لسلسلة CDC 6000 ، وجد أن تمرير مؤشرات الإطارات كسلسلة أسرع عمومًا من تحديث مصفوفات مؤشرات الإطارات الكاملة باستمرار. كما أن هذه الطريقة البرمجية لا تُضيف أي عبء إضافي للغات الشائعة مثل C التي تفتقر إلى المراجع العليا.

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

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

في لغات البرمجة البسيطة مثل فورث ، التي تفتقر إلى المتغيرات المحلية وتسمية المعاملات، لا تحتوي إطارات المكدس إلا على عناوين فروع الإرجاع وتكاليف إدارة الإطارات. لذا، يحتوي مكدس الإرجاع فيها على عناوين إرجاع فقط بدلاً من الإطارات. ويُفصل مكدس الإرجاع عن مكدس قيم البيانات لتحسين تدفق عملية إعداد الاستدعاءات وعمليات الإرجاع.

مقارنة مع آلات التسجيل

غالبًا ما تُقارن آلات المكدس بآلات المسجلات، التي تخزن القيم في مصفوفة من المسجلات . قد تخزن آلات المسجلات هياكل شبيهة بالمكدس في هذه المصفوفة، ولكن آلة المسجلات تحتوي على تعليمات تتجاوز واجهة المكدس. تتفوق آلات المسجلات بشكل روتيني على آلات المكدس، [ 26 ] وظلت آلات المكدس محدودة الانتشار في أنظمة الأجهزة. مع ذلك، تُستخدم آلات المكدس بكثرة في تنفيذ الآلات الافتراضية نظرًا لبساطتها وسهولة تنفيذها. [ 27 ]

تعليمات

تتميز آلات المكدس بكثافة رمزية أعلى . فعلى عكس تعليمات آلات المكدس الشائعة التي يمكن استيعابها بسهولة في 6 بتات أو أقل، تتطلب آلات المسجلات حقلين أو ثلاثة حقول لأرقام المسجلات لكل تعليمة حسابية منطقية لاختيار المعاملات؛ ويبلغ متوسط ​​كثافة التعليمات في آلات المسجلات الأكثر كثافة حوالي 16 بتًا لكل تعليمة بالإضافة إلى المعاملات. كما تستخدم آلات المسجلات حقل إزاحة أوسع لرموز عمليات التحميل والتخزين. وبطبيعة الحال، تسمح التعليمات المضغوطة لآلة المكدس بتخزين عدد أكبر من التعليمات في الذاكرة المؤقتة، وبالتالي يمكنها تحقيق كفاءة أفضل في الذاكرة المؤقتة ، مما يقلل من تكاليف الذاكرة أو يسمح بأنظمة ذاكرة أسرع بتكلفة محددة. علاوة على ذلك، فإن معظم تعليمات آلات المكدس بسيطة للغاية، وتتكون من حقل رمز عملية واحد أو حقل معامل واحد فقط. وبالتالي، تتطلب آلات المكدس موارد إلكترونية قليلة جدًا لفك تشفير كل تعليمة.

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

تُحدد معظم مُفسِّرات السجلات سجلاتها بالأرقام. ولكن لا يُمكن الوصول إلى سجلات الجهاز المضيف باستخدام مصفوفة مُفهرسة، لذا تُخصَّص مصفوفة ذاكرة للسجلات الافتراضية. وبالتالي، يجب أن تستخدم تعليمات مُفسِّر السجلات الذاكرة لتمرير البيانات المُولَّدة إلى التعليمات التالية. هذا يُجبر مُفسِّرات السجلات على العمل ببطء شديد على المعالجات الدقيقة المُصنَّعة بتقنية التصنيع الدقيق (أي ترانزستورات أسرع دون تحسين سرعات الدوائر، مثل Haswell x86). تتطلب هذه المعالجات عدة دورات ساعة للوصول إلى الذاكرة، ولكن دورة ساعة واحدة فقط للوصول إلى السجلات. في حالة جهاز المكدس الذي يحتوي على دائرة إعادة توجيه بيانات بدلاً من ملف سجلات، يُمكن لمُفسِّرات المكدس تخصيص سجلات الجهاز المضيف للمعاملات العليا للمكدس بدلاً من ذاكرة الجهاز المضيف.

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

القيم المؤقتة / المحلية

يعتقد بعض العاملين في هذا المجال أن أجهزة المكدس تُنفذ دورات تخزين مؤقت للبيانات أكثر من أجهزة التسجيل. [ 28 ]

في الأجهزة ذات الذاكرة المكدسة، غالبًا ما تُخزَّن القيم المؤقتة في الذاكرة الرئيسية، بينما في الأجهزة ذات المسجلات المتعددة، تبقى هذه القيم عادةً في المسجلات. (مع ذلك، غالبًا ما يلزم تخزين هذه القيم في "إطارات التنشيط" في نهاية تعريف الإجراء، أو الكتلة الأساسية، أو على الأقل في مخزن مؤقت للذاكرة أثناء معالجة المقاطعات). تُضيف القيم المخزنة في الذاكرة الرئيسية دورات تخزين مؤقت إضافية. يعتمد تأثير التخزين المؤقت هذا على عدد المسجلات المخفية المستخدمة لتخزين قيم أعلى المكدس، وعلى وتيرة استدعاءات الإجراءات المتداخلة، وعلى معدلات معالجة مقاطعات الحاسوب المضيف.

في أجهزة التسجيل التي تستخدم مُجمِّعات مُحسِّنة، من الشائع جدًا أن تبقى المتغيرات المحلية الأكثر استخدامًا في المسجلات بدلًا من خلايا ذاكرة إطار المكدس. هذا يُلغي معظم دورات ذاكرة التخزين المؤقت للبيانات اللازمة لقراءة وكتابة هذه القيم. وقد ساهم تطوير "جدولة المكدس" لإجراء تحليل المتغيرات الحية ، وبالتالي الاحتفاظ بالمتغيرات الرئيسية في المكدس لفترات طويلة، في حل هذه المشكلة. [ 3 ] [ 4 ] [ 5 ]

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

التعبيرات الفرعية الشائعة

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

في المقابل، في آلات المكدس، يمكن تخزين النتائج بإحدى طريقتين. أولاً، يمكن تخزين النتائج باستخدام متغير مؤقت في الذاكرة. يتطلب التخزين والاسترجاع اللاحق تعليمات إضافية ودورات تخزين مؤقت إضافية. لا يُعدّ هذا مفيدًا إلا إذا كانت عملية حساب التعبير الفرعي تستغرق وقتًا أطول من جلب البيانات من الذاكرة، وهو ما يحدث غالبًا في معظم وحدات المعالجة المركزية ذات المكدس. لا يُجدي هذا نفعًا أبدًا مع المتغيرات البسيطة وجلب المؤشرات، لأنها تتطلب بالفعل نفس تكلفة دورة تخزين مؤقت واحدة لكل وصول. يكون مفيدًا بشكل طفيف فقط لتعبيرات مثل X+1. تُشكّل هذه التعبيرات الأبسط غالبية التعبيرات الزائدة والقابلة للتحسين في البرامج المكتوبة بلغات غير لغات التجميع . لا يستطيع المُصرّف المُحسِّن تحقيق فائدة إلا في حالات التكرار التي كان بإمكان المبرمج تجنبها في شفرة المصدر.

الطريقة الثانية تُبقي قيمة محسوبة على مكدس البيانات، وتُكررها حسب الحاجة. تستخدم هذه الطريقة عمليات لنسخ عناصر المكدس. يجب أن يكون عمق المكدس ضحلاً بما يكفي لتعليمات النسخ المتاحة لوحدة المعالجة المركزية. غالبًا ما يستخدم كود المكدس المكتوب يدويًا هذا الأسلوب، ويحقق سرعات مماثلة لسرعات آلات التسجيل للأغراض العامة. [ 29 ] [ 9 ] لسوء الحظ، لا تُستخدم خوارزميات "جدولة المكدس" المثلى على نطاق واسع في لغات البرمجة.

خطوط الأنابيب

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

يتطلب جدولة الوصول إلى الذاكرة سجلات احتياطية صريحة. وهذا غير ممكن في أجهزة المكدس دون كشف جانب من جوانب البنية الدقيقة للمبرمج. بالنسبة للتعبير AB −، يجب تقييم B ودفعه مباشرةً قبل خطوة الطرح. وبدون تبديل المكدس أو تعدد مؤشرات الترابط للأجهزة، لا يمكن وضع سوى القليل نسبيًا من التعليمات البرمجية المفيدة أثناء انتظار انتهاء تحميل B. يمكن لأجهزة المكدس التغلب على تأخير الذاكرة إما من خلال وجود خط أنابيب تنفيذ خارج الترتيب عميق يغطي العديد من التعليمات في وقت واحد، أو -وهو الأرجح- يمكنها تبديل المكدس بحيث يمكنها العمل على أحمال عمل أخرى أثناء اكتمال التحميل، أو يمكنها تداخل تنفيذ مؤشرات ترابط البرنامج المختلفة، كما هو الحال في نظام Unisys A9. [ 30 ] ومع ذلك، تشير أحمال الحوسبة المتوازية المتزايدة اليوم إلى أن هذا قد لا يكون العيب الذي تم تصويره عليه في الماضي.

يمكن لآلات المكدس الاستغناء عن مرحلة جلب المعاملات في آلة التسجيل. [ 29 ] على سبيل المثال، في معالج جافا المُحسَّن (JOP)، يدخل المعاملان العلويان للمكدس مباشرةً إلى دائرة إعادة توجيه البيانات، وهي أسرع من ملف التسجيل. [ 31 ]

التنفيذ خارج الترتيب

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

يبدو أن تنفيذ التعليمات خارج الترتيب في آلات المكدس يقلل أو يتجنب العديد من الصعوبات النظرية والعملية. [ 32 ] تُظهر الأبحاث المذكورة أن آلة المكدس هذه قادرة على استغلال التوازي على مستوى التعليمات، ويجب على الأجهزة الناتجة تخزين بيانات التعليمات مؤقتًا. تتجاوز هذه الآلات فعليًا معظم عمليات الوصول إلى ذاكرة المكدس. والنتيجة هي إنتاجية (تعليمات لكل دورة ساعة ) تُضاهي آلات بنية التحميل والتخزين ، مع كثافة تعليمات أعلى بكثير (لأن عناوين المعاملات ضمنية).

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

يخفي بداخله جهاز تسجيل أسرع

تتميز بعض آلات المكدس البسيطة بتصميم رقاقة مُخصص بالكامل وصولاً إلى مستوى السجلات الفردية. يُبنى سجل عنوان أعلى المكدس ومخازن بيانات أعلى المكدس (عددها N) من دوائر سجلات فردية منفصلة، ​​مع جامعات منفصلة ووصلات مخصصة.

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

تُعدّ آلات المكدس المُبرمجة دقيقًا مثالًا على ذلك. فمحرك الشفرة الدقيقة الداخلي هو نوع من آلات التسجيل الشبيهة بـ RISC أو آلات VLIW التي تستخدم ملفات تسجيل متعددة. وعند التحكم به مباشرةً بواسطة شفرة دقيقة خاصة بالمهمة، يُنجز هذا المحرك عملًا أكثر بكثير في كل دورة مقارنةً بالتحكم به بشكل غير مباشر بواسطة شفرة مكدس مكافئة لنفس المهمة.

تُعدّ مُترجمات كود الكائن، التي ترجمت الكود الخاص بأجهزة HP 3000 و Tandem NonStop المكدسة إلى كود بديل قائم على المسجلات بتقنية RISC، مثالًا آخر. [ 33 ] [ 34 ] فقد ترجمت هذه المُترجمات تسلسلات كود المكدس إلى تسلسلات مُكافئة من كود RISC. وأدت تحسينات "محلية" طفيفة إلى إزالة جزء كبير من العبء الزائد لبنية المكدس. واستُخدمت المسجلات الاحتياطية لاستبعاد حسابات العناوين المُكررة. ومع ذلك، احتفظ الكود المُترجم بقدر كبير من عبء المحاكاة الناتج عن عدم التوافق بين الجهاز الأصلي والجهاز المُستهدف. وعلى الرغم من هذا العبء، فقد تطابقت كفاءة دورة الكود المُترجم مع كفاءة دورة كود المكدس الأصلي. وعندما أُعيد تجميع الكود المصدري مباشرةً إلى جهاز المسجلات عبر مُجمّعات مُحسّنة، تضاعفت الكفاءة. يُبيّن هذا أن بنية المكدس ومُجمّعاتها غير المُحسّنة كانت تُهدر أكثر من نصف طاقة الأجهزة الأساسية.

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

بما أن المكدس مكون أساسي في معظم برامج الحاسوب، حتى عندما لا يكون البرنامج المستخدم جهاز مكدس بالمعنى الدقيق، فإن جهاز المكدس المادي قد يحاكي بشكل أدق آلية عمل برامجه الداخلية. تتميز سجلات المعالج بتكلفة حرارية عالية، وقد يدّعي جهاز المكدس كفاءة طاقة أعلى. [ 35 ]

المقاطعات

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

مترجمون فوريون

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

غالباً ما تكون مترجمات البرامج الخاصة بآلات المكدس الافتراضية أبطأ من مترجمات البرامج الخاصة بأنواع أخرى من الآلات الافتراضية. [ 37 ] ويزداد هذا التباطؤ سوءاً عند التشغيل على أجهزة مضيفة ذات مسارات تنفيذ عميقة، مثل معالجات x86 الحالية.

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

من الأمثلة على ذلك لغة البرمجة جافا . تُحدد آلتها الافتراضية الأساسية كآلة مكدس 8 بت. مع ذلك، فإن آلة دالفيك الافتراضية لجافا المستخدمة في هواتف أندرويد الذكية هي آلة مسجلات افتراضية 16 بت، وهو خيار تم اتخاذه لأسباب تتعلق بالكفاءة. تقوم التعليمات الحسابية بجلب أو تخزين المتغيرات المحلية مباشرةً عبر حقول تعليمات 4 بت (أو أكبر). [ 39 ] وبالمثل، استبدل الإصدار 5.0 من لغة لوا آلة المكدس الافتراضية بآلة مسجلات افتراضية أسرع. [ 40 ] [ 41 ]

منذ أن شاع استخدام آلة جافا الافتراضية، وظّفت المعالجات الدقيقة مُتنبئات تفرع متقدمة للقفزات غير المباشرة. [ 42 ] هذا التطور يتجنب معظم عمليات إعادة تشغيل خط الأنابيب الناتجة عن القفزات متعددة الاتجاهات، ويُزيل الكثير من تكاليف عدد التعليمات التي تؤثر على مُفسّرات المكدس.

انظر أيضاً

مراجع

  1. بيرد، بوب (خريف 1997). "حاسوب KDF9 - بعد 30 عامًا" . إحياء الحاسوب .
  2. هايز، جون ب. (1978). هندسة الحاسوب وتنظيمه . شركة ماكجرو هيل الدولية للنشر. ص 164. ISBN  0-07-027363-4.
  3. 1 2 كوبمان الابن، فيليب جون (1994). "استكشاف أولي لتوليد كود المكدس الأمثل" (ملف PDF) . مجلة تطبيقات وبحوث فورث . 6 (3).
  4. 1 2 بيلي، كريس (2000). "جدولة المعاملات بين الحدود: دراسة أولية" (ملف PDF) . وقائع مؤتمر يوروفورث 2000 .
  5. 1 2 شانون، مارك؛ بيلي، كريس (2006). "تخصيص المكدس العالمي: تخصيص السجلات لآلات المكدس" (ملف PDF) . وقائع مؤتمر يوروفورث 2006 .
  6. بارتون، روبرت س. (9 مايو 1961). "نهج جديد للتصميم الوظيفي للحاسوب الرقمي" . أوراق بحثية قُدِّمت في المؤتمر الغربي المشترك للحاسوب، الذي عُقد في الفترة من 9 إلى 11 مايو 1961، بين معهد مهندسي الراديو (IRE) ومعهد مهندسي الكهرباء والإلكترونيات (AIEE) ورابطة مكائن ​​الحوسبة (ACM). 1961. الصفحات 393-396. doi : 10.1145 /1460690.1460736 . ISBN  978-1-45037872-7. S2CID 29044652 . {{cite conference}}عدم توافق رقم ISBN / التاريخ ( مساعدة )
  7. بارتون، روبرت س. (1987). "نهج جديد للتصميم الوظيفي للحاسوب الرقمي" . حوليات معهد مهندسي الكهرباء والإلكترونيات لتاريخ الحوسبة . 9 (1): 11-15 . رمز Bibcode : 1987IAHC....9a..11B . doi : 10.1109/MAHC.1987.10002 .
  8. بلاو، جيريت آن ؛ بروكس الابن، فريدريك فيليبس (1997). هندسة الحاسوب: المفاهيم والتطور . بوسطن، ماساتشوستس، الولايات المتحدة الأمريكية: شركة أديسون-ويسلي لونغمان للنشر.
  9. 1 2 لافوريست، تشارلز إريك (أبريل 2007). "2.1 لوكاسيفيتش والجيل الأول: 2.1.2 ألمانيا: كونراد تسوزه (1910-1995)؛ 2.2 الجيل الأول من الحواسيب المكدسة: 2.2.1 تسوزه Z4". بنية حاسوب مكدس من الجيل الثاني (ملف PDF) (أطروحة). واترلو، كندا: جامعة واترلو . ص 8، 11، إلخ. مؤرشف (ملف PDF) من الأصل في 20 يناير 2022. تم الاسترجاع في 2 يوليو 2022 . (178 صفحة)
  10. غريف، ديفيد أ.؛ وايلدينغ، ماثيو م. (12 يناير 1998). "أول معالج جافا في العالم" . مجلة الهندسة الإلكترونية تايمز .
  11. "مبادئ تشغيل معالج ميسا" . متحف ديجي بارن للحاسوب . زيروكس. مؤرشف من الأصل بتاريخ 14 مايو 2024. تم الاطلاع عليه بتاريخ 20 سبتمبر 2023 .
  12. "DigiBarn: The Xerox Star 8010 "Dandelion"متحف ديجي بارن للحاسوب. مؤرشف من الأصل بتاريخ 3 مايو 2024. تم الاطلاع عليه بتاريخ 20 سبتمبر 2023 .
  13. "مجموعة تعليمات لمعالج أحادي الشريحة 32 بت" . مجلة هيوليت-باكارد . 34 (8). هيوليت-باكارد. أغسطس 1983. تاريخ الاسترجاع: 5 فبراير 2024 .
  14. دليل مبرمج وحدات التحكم الدقيقة MARC4 ذات 4 بت (ملف PDF) . Atmel .
  15. "رقائق فورث" . Colorforth.com . مؤرشف من الأصل بتاريخ 15 فبراير 2006. تم الاطلاع عليه بتاريخ 8 أكتوبر 2017 .
  16. "نظرة عامة على المعالج الدقيق F21" . Ultratechnology.com . تم الاطلاع عليه بتاريخ 2017-10-08 .
  17. "ويكي فورث فريك" . GitHub.com . 2017-08-25 . تم الاطلاع عليه بتاريخ 2017-10-08 .
  18. "شريحة جافا متوفرة الآن!" . Developer.com . 8 أبريل 1999. مؤرشف من الأصل في 30 سبتمبر 2022. تم الاطلاع عليه في 7 يوليو 2022 .
  19. "نقل مُصرّف لغة C من جنو إلى معالج ثور الدقيق" (ملف PDF) . 4 ديسمبر 1995. أُرشف من النسخة الأصلية (ملف PDF) في 20 أغسطس 2011. تم الاطلاع عليه في 30 مارس 2011 .
  20. "ZPU - أصغر وحدة معالجة مركزية 32 بت في العالم مزودة بسلسلة أدوات GCC: نظرة عامة" . opencores.org . تم الاطلاع عليه بتاريخ 7 فبراير 2015 .
  21. راندل، برايان ؛ راسل، لوفورد جون (1964). تطبيق Algol 60 (ملف PDF) . لندن، المملكة المتحدة: أكاديميك برس . ISBN 0-12-578150-4.{{cite book}}عدم توافق رقم ISBN / التاريخ ( مساعدة )
  22. "تطبيق لغة Lua 5.0" (ملف PDF) .
  23. "مجموعة التعليمات" . دليل مرجعي لـ TrueType .
  24. دنكان، فريزر جورج (1977-05-01). "تطوير آلة المكدس: أستراليا، بريطانيا العظمى، وأوروبا" (ملف PDF) . مجلة الكمبيوتر . المجلد 10، العدد 5. جامعة بريستول، بريستول، فيرجينيا، الولايات المتحدة الأمريكية. الصفحات 50-52 . doi : 10.1109/MC.1977.315873 . eISSN 1558-0814 . ISSN 0018-9162 . S2CID 17013010. CODEN CPTRB4 . مؤرشف من النسخة الأصلية (PDF) بتاريخ 2023-10-15 . تم الاطلاع عليه بتاريخ 2023-10-15 .       (3 صفحات)
  25. "تعليمات كولورفورث" . Colorforth.com . مؤرشف من الأصل بتاريخ 10-03-2016 . تم الاطلاع عليه بتاريخ 08-10-2017 .(مجموعة تعليمات نوى F18A، سميت colorForth لأسباب تاريخية.)
  26. شي، يون هي؛ جريج، ديفيد؛ بيتي، أندرو؛ إرتل، إم. أنطون (2005). "مواجهة الآلة الافتراضية: المكدس مقابل المسجلات". وقائع المؤتمر الدولي الأول لجمعية ACM/USENIX حول بيئات التنفيذ الافتراضية . الصفحات 153-163 . doi : 10.1145/1064979.1065001 . ISBN  1595930477. S2CID 811512 . 
  27. هايد، راندال (2004). كتابة كود رائع، المجلد 2: التفكير على مستوى منخفض، وكتابة على مستوى عالٍ . المجلد 2. دار نشر نو ستارش . ص 391. ISBN   978-1-59327-065-0تم الاطلاع عليه بتاريخ 30 يونيو 2021 .
  28. جون ل. هينيسي ؛ ديفيد أندرو باترسون . هندسة الحاسوب: منهج كمي .انظر مناقشة آلات المكدس.
  29. 1 2 كوبمان الابن، فيليب جون. "حواسيب المكدس: الموجة الجديدة" . Ece.cmu.edu . تم الاسترجاع في 2017-10-08 .
  30. مقدمة لأنظمة السلسلة A (ملف PDF) . شركة بوروز . أبريل 1986. تم الاطلاع عليه بتاريخ 2023-09-20 .
  31. "تصميم وتنفيذ آلة مكدس فعالة" (ملف PDF) . Jopdesign.com . تم الاطلاع عليه بتاريخ 8 أكتوبر 2017 .
  32. سينها، ستيف؛ تشاتيرجي، ساتراجيت؛ رافيندران، كوشيك. "BOOST: تقنية المكدس غير المرتب في بيركلي" . ريسيرش جيت . تم الاسترجاع في 11 نوفمبر 2023 .
  33. بيرغ، أرندت؛ كيلمان، كيث؛ ماغينهايمر، دانيال؛ ميلر، جيمس (ديسمبر 1987). "محاكاة HP3000 على حواسيب HP Precision Architecture" (ملف PDF) . مجلة هيوليت-باكارد . هيوليت-باكارد : 87-89 . مؤرشف من الأصل (ملف PDF) بتاريخ 22-10-2023 . تم الاطلاع عليه بتاريخ 20-09-2023 .
  34. كريستي أندروز؛ دوان ساند (أكتوبر 1992). "نقل عائلة حواسيب CISC إلى RISC عبر ترجمة كود الكائن". وقائع ASPLOS-V .
  35. "المستندات" . شركة GreenArrays، Inc. تقنية F18A . تم الاسترجاع في 2022-07-07 .
  36. دليل استخدام وحدة المعالجة المركزية 8051، إنتل، 1980
  37. شي، يون هي؛ جريج، ديفيد؛ بيتي، أندرو؛ إرتل، إم. أنطون. "مواجهة الآلة الافتراضية: آلة المكدس مقابل آلة التسجيل" (ملف PDF) . Usenix.org . تاريخ الاسترجاع: 8 أكتوبر 2017 .
  38. ديفيس، برايان؛ بيتي، أندرو؛ كيسي، كيفن؛ جريج، ديفيد؛ والدرون، جون. "حالة آلات التسجيل الافتراضية" (ملف PDF) . Scss.tcd.ie. تاريخ الاسترجاع: 2023-09-20 .
  39. بورنشتاين، دان (29-05-2008). "عرض تفصيلي لآلية دالفيك الافتراضية" (ملف PDF) . ص 22. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 05-09-2008 . تم الاطلاع عليه بتاريخ 16-08-2010 . 
  40. "تطبيق لغة Lua 5.0" (ملف PDF) . Lua.org . تاريخ الاسترجاع: 2017-10-08 .
  41. "الآلة الافتراضية للغة Lua 5.0" (ملف PDF) . Inf.puc-rio.br . تاريخ الاسترجاع: 2017-10-08 .
  42. "التنبؤ بالفروع وأداء المترجمين الفوريين - لا تثق بالفولكلور" . Hal.inria.fr . تم الاطلاع عليه بتاريخ 2023-09-20 .