الترجمة الثنائية
في مجال الحوسبة ، تُعدّ الترجمة الثنائية شكلاً من أشكال إعادة تجميع البرامج الثنائية، حيث تُترجم سلاسل التعليمات من مجموعة تعليمات المصدر (ISA) إلى مجموعة تعليمات الهدف، وذلك وفقًا لنظام التشغيل الذي جُمعت له الملفات الثنائية. في بعض الحالات، مثل محاكاة مجموعة التعليمات ، قد تكون مجموعة تعليمات الهدف هي نفسها مجموعة تعليمات المصدر، مما يوفر ميزات الاختبار والتصحيح، مثل تتبع التعليمات، ونقاط التوقف الشرطية، واكتشاف النقاط الساخنة .
النوعان الرئيسيان هما الترجمة الثنائية الثابتة والديناميكية. يمكن إجراء الترجمة في الأجهزة (على سبيل المثال، بواسطة الدوائر في وحدة المعالجة المركزية ) أو في البرامج (مثل محركات وقت التشغيل، والمترجم الثابت، والمحاكيات؛ وكلها عادة ما تكون بطيئة ).
تحفيز
يتم اللجوء إلى الترجمة الثنائية بسبب عدم وجود ملف ثنائي لمنصة مستهدفة، أو عدم وجود شفرة مصدرية للتجميع من أجل المنصة المستهدفة، أو صعوبة أخرى في تجميع المصدر للمنصة المستهدفة.
قد تعمل الملفات الثنائية المُعاد تجميعها بشكل ثابت بسرعة أكبر من نظيراتها المُحاكاة، وذلك لإزالة عبء المحاكاة. وهذا يُشبه الفرق في الأداء بين البرامج المُفسَّرة والمُجمَّعة بشكل عام.
الترجمة الثنائية الثابتة
يهدف المترجم الذي يستخدم الترجمة الثنائية الثابتة إلى تحويل جميع أجزاء الكود في ملف تنفيذي إلى كود يعمل على بنية النظام والمنصة المستهدفة دون الحاجة إلى تشغيل الكود مسبقًا، كما هو الحال في الترجمة الثنائية الديناميكية. يُعدّ هذا الأمر بالغ الصعوبة، إذ لا يستطيع المترجم اكتشاف جميع أجزاء الكود. على سبيل المثال، قد لا يمكن الوصول إلى بعض أجزاء الملف التنفيذي إلا من خلال فروع غير مباشرة ، والتي لا تُعرف قيمتها إلا أثناء التشغيل.
يستخدم أحد هذه المترجمات الثنائية الثابتة تقنية "التحسين الفائق الشامل" ( التي طورها سوراف بانسال وأليكس أيكن من جامعة ستانفورد ) لإجراء ترجمة فعالة بين العديد من أزواج المصدر والهدف، بتكاليف تطوير منخفضة للغاية وأداء عالٍ للملف الثنائي الهدف. في تجارب ترجمة PowerPC إلى x86، تفوقت بعض الملفات الثنائية على النسخ الأصلية، ولكنها عملت في المتوسط بسرعة ثلثي السرعة الأصلية. [ 1 ]
أمثلة على الترجمات الثنائية الثابتة
في ستينيات القرن العشرين، قدمت شركة هانيويل برنامجًا يسمى ليبراتور لسلسلة حواسيب هانيويل 200 الخاصة بها ؛ وكان بإمكانه ترجمة البرامج الخاصة بسلسلة حواسيب آي بي إم 1400 إلى برامج خاصة بسلسلة هانيويل 200. [ 2 ]
في عام 1995، قام نورمان رامزي في شركة بيل للاتصالات للأبحاث وماري ف. فرنانديز في قسم علوم الحاسوب بجامعة برينستون بتطوير مجموعة أدوات نيو جيرسي لترجمة لغة التجميع الثابتة. [ 3 ]
في عام 2004، قام سكوت إليوت وفيليب آر. هاتشينسون في شركة نينتندو بتطوير أداة لتوليد كود "C" من ملفات Game Boy الثنائية، والتي يمكن بعد ذلك تجميعها لمنصة جديدة وربطها بمكتبة أجهزة لاستخدامها في أنظمة الترفيه على متن الطائرات. [ 4 ]
في عام ٢٠١٤، تم تطوير نسخة من لعبة الفيديو StarCraft، الصادرة عام ١٩٩٨، لتتوافق مع معمارية ARM، وذلك من خلال إعادة تجميع ثابتة وهندسة عكسية إضافية للنسخة الأصلية x86 . [ ٥ ] [ ٦ ] وقد تمكن مجتمع مستخدمي أجهزة Pandora المحمولة من تطوير الأدوات اللازمة [ ٧ ] بأنفسهم، ونجحوا في تحقيق هذه الترجمات عدة مرات. [ ٨ ] [ ٩ ]
مثال آخر هو نسخة NES -to- x86 المعاد تجميعها بشكل ثابت من لعبة الفيديو Super Mario Bros. والتي تم إنشاؤها باستخدام LLVM في عام 2013. [ 10 ]
على سبيل المثال، تم إنشاء عملية إعادة تجميع ثابتة ناجحة من x86 إلى x64 لمولد التضاريس الإجرائي للعبة الفيديو Cube World في عام 2014. [ 11 ]
الترجمة الثنائية الديناميكية
تعتمد الترجمة الثنائية الديناميكية (DBT) على فحص تسلسل قصير من التعليمات البرمجية - عادةً ما يكون بحجم كتلة أساسية واحدة - ثم ترجمته وتخزين التسلسل الناتج مؤقتًا. تتم ترجمة التعليمات البرمجية فقط عند اكتشافها وعند الإمكان، وتُوجّه تعليمات التفرع إلى التعليمات البرمجية المترجمة والمحفوظة مسبقًا ( التخزين المؤقت ).
تختلف الترجمة الثنائية الديناميكية عن المحاكاة البسيطة (إذ تلغي حلقة القراءة-فك التشفير-التنفيذ الرئيسية للمحاكي - وهي عنق زجاجة رئيسي للأداء)، وتؤدي إلى زيادة كبيرة في وقت الترجمة. ومن المأمول أن يتم تعويض هذه الزيادة مع تنفيذ تسلسلات التعليمات البرمجية المترجمة عدة مرات.
تستخدم المترجمات الديناميكية الأكثر تطورًا إعادة الترجمة الديناميكية، حيث يتم تعديل الكود المترجم لتحديد الأجزاء التي تُنفذ عددًا كبيرًا من المرات، ثم تُحسّن هذه الأجزاء بشكل مكثف. تُشبه هذه التقنية مُترجم JIT ، وفي الواقع، يمكن اعتبار هذه المُترجمات (مثل تقنية HotSpot من Sun ) بمثابة مترجمات ديناميكية من مجموعة تعليمات افتراضية ( الرمز البايتي ) إلى مجموعة تعليمات حقيقية.
أمثلة على الترجمات الثنائية الديناميكية في البرمجيات
- قامت شركة آبل بتطبيق محاكي ترجمة ديناميكي لرمز M68K في أجهزة ماكنتوش من سلسلة PowerPC ، [ 12 ] مما حقق مستوى عالٍ جدًا من الموثوقية والأداء والتوافق (انظر محاكي Mac 68K ). وقد مكّن هذا آبل من طرح الأجهزة في السوق بنظام تشغيل شبه أصلي ، وسمح للمستخدمين النهائيين بتبني البنية الجديدة الأسرع دون المخاطرة باستثماراتهم في البرامج. ونظرًا لنجاح المحاكي، ظلت أجزاء كثيرة من نظام التشغيل مُحاكاة. ولم يتم الانتقال الكامل إلى نظام تشغيل أصلي لـ PowerPC إلا مع إصدار Mac OS X (10.0) في عام 2001. (استمرت بيئة تشغيل Mac OS X " Classic " في توفير إمكانية المحاكاة هذه على أجهزة ماكنتوش PowerPC حتى إصدار Mac OS X 10.5 ).
- قدم نظام التشغيل Mac OS X 10.4.4 لأجهزة Mac التي تعمل بمعالجات Intel طبقة الترجمة الديناميكية Rosetta لتسهيل انتقال Apple من الأجهزة القائمة على معالجات PPC إلى معالجات x86. تم تطوير برنامج Rosetta لصالح Apple بواسطة شركة Transitive Corporation ، وهو عبارة عن تطبيق لحل QuickTransit الخاص بشركة Transitive .
- كما وفرت QuickTransit خلال فترة حياتها دعم الترجمة SPARC → x86 و x86→ PowerPC و MIPS → Itanium 2 .
- حققت شركة DEC نجاحًا مماثلاً باستخدام أدوات الترجمة الخاصة بها لمساعدة المستخدمين على الانتقال من بنية CISC VAX إلى بنية Alpha RISC .
- نظام HP ARIES (إعادة الترجمة التلقائية ومحاكاة البيئة المتكاملة) هو نظام ترجمة ثنائية ديناميكية برمجي [ 13 ] يجمع بين تفسير سريع للتعليمات البرمجية وترجمة ديناميكية ثنائية المراحل لتنفيذ تطبيقات HP 9000 HP-UX على نظام HP-UX 11i لخوادم HPE Integrity بدقة وشفافية [ 14 ] . يُحاكي مُفسِّر ARIES السريع مجموعة كاملة من تعليمات PA-RISC غير المُميزة دون أي تدخل من المستخدم. أثناء التفسير، يراقب نمط تنفيذ التطبيق ويترجم فقط التعليمات البرمجية التي يتم تنفيذها بشكل متكرر إلى تعليمات Itanium الأصلية في وقت التشغيل. يُطبِّق ARIES الترجمة الديناميكية ثنائية المراحل، وهي تقنية تجمع فيها التعليمات البرمجية المُترجمة في المرحلة الأولى معلومات ملف تعريف وقت التشغيل، والتي تُستخدم أثناء ترجمة المرحلة الثانية لتحسين التعليمات البرمجية المُترجمة بشكل أكبر. يخزن ARIES التعليمات البرمجية المُترجمة ديناميكيًا في مخزن مؤقت للذاكرة يُسمى ذاكرة التخزين المؤقت للتعليمات البرمجية. تُنفَّذ المراجع الإضافية للكتل الأساسية المُترجمة مباشرةً في ذاكرة التخزين المؤقت للتعليمات البرمجية ولا تتطلب تفسيرًا أو ترجمة إضافية. يتم تعديل أهداف كتل التعليمات البرمجية المُترجمة لضمان تنفيذها في ذاكرة التخزين المؤقت للتعليمات البرمجية في معظم الأوقات. في نهاية عملية المحاكاة، يتجاهل برنامج ARIES جميع التعليمات البرمجية المترجمة دون تعديل التطبيق الأصلي. كما يُنفذ محرك محاكاة ARIES ميزة محاكاة البيئة، التي تُحاكي استدعاءات النظام، وإرسال الإشارات، وإدارة الاستثناءات، وإدارة سلاسل العمليات، ومحاكاة HP GDB لأغراض تصحيح الأخطاء، وإنشاء ملفات النظام الأساسية لتطبيق HP 9000 HP-UX .
- قامت شركة DEC بإنشاء مترجم FX!32 الثنائي لتحويل تطبيقات x86 إلى تطبيقات Alpha. [ 12 ]
- تضمن برنامج Wabi من شركة Sun Microsystems ترجمة ديناميكية من تعليمات x86 إلى تعليمات SPARC.
- في يناير 2000، أعلنت شركة ترانسميتا عن تصميم معالج جديد يُدعى كروسو . [ 15 ] [ 16 ] من قسم الأسئلة الشائعة [ 17 ] على موقعهم الإلكتروني،
يتكون المعالج الدقيق الذكي من نواة VLIW مادية كمحرك له، وطبقة برمجية تُسمى برنامج تحويل الشفرة. يعمل برنامج تحويل الشفرة كواجهة برمجية، حيث يقوم بتحويل أو ترجمة تعليمات x86 إلى تعليمات Crusoe الأصلية. بالإضافة إلى ذلك، يحتوي برنامج تحويل الشفرة على مُترجم ديناميكي ومُحسِّن للشفرة. والنتيجة هي زيادة الأداء بأقل استهلاك للطاقة. وهذا يسمح لشركة Transmeta بتطوير كل من نواة VLIW المادية وبرنامج تحويل الشفرة بشكل منفصل دون التأثير على قاعدة التطبيقات البرمجية الضخمة.
- طوّرت شركة إنتل ونفّذت طبقة تنفيذ IA-32 ، وهي عبارة عن مترجم ثنائي ديناميكي مصمم لدعم تطبيقات IA-32 على الأنظمة القائمة على معالجات إيتانيوم . وقد أُدرجت هذه الطبقة في نظام تشغيل مايكروسوفت ويندوز سيرفر لبنية إيتانيوم ، بالإضافة إلى العديد من توزيعات لينكس ، بما في ذلك ريد هات وسوس . وقد مكّنت هذه الطبقة تطبيقات IA-32 من العمل بسرعة أكبر من تلك التي تعمل بها باستخدام وضع IA-32 الأصلي على معالجات إيتانيوم.
- يقوم برنامج Dolphin (وهو برنامج محاكاة لجهاز GameCube / Wii ) بإعادة تجميع كود PowerPC إلى x86 و AArch64 في الوقت الفعلي.
- يدعم برنامج Microsoft Virtual PC الترجمة الثنائية لأنظمة التشغيل الضيف ذات 32 بت.
- من المعروف أن برنامج VMware Workstation 12 أو الإصدارات الأقدم يدعم الترجمة الثنائية لأنظمة التشغيل الضيف 32 بت.
أمثلة على الترجمات الثنائية الديناميكية في الأجهزة
- تقوم Nvidia Tegra K1 Denver بترجمة تعليمات ARM عبر وحدة فك تشفير الأجهزة البطيئة إلى تعليمات الشفرة الدقيقة الأصلية الخاصة بها وتستخدم مترجمًا ثنائيًا برمجيًا للتعليمات البرمجية الساخنة.
انظر أيضاً
مراجع
- ↑ بانسال، سوراف؛ أيكن، أليكس (ديسمبر 2008). "الترجمة الثنائية باستخدام مُحسِّنات التجسس الفائقة" (ملف PDF) . وقائع المؤتمر الثامن لـ USENIX حول تصميم وتنفيذ أنظمة التشغيل . الصفحات 177-192 .
- ↑ وصف موجز لسلسلة هانيويل 200 (ملف PDF) . هانيويل . فبراير 1966. ص 11.
على سبيل المثال، فإن مجموعة تعليمات معالجات السلسلة 200 مشابهة بما يكفي لتلك الخاصة بالعديد من أنظمة المعالجة الأخرى، مثل سلسلة IBM 1400، للسماح بالترجمة الآلية لمرة واحدة للبرامج المكتوبة لهذه الأنظمة المنافسة إلى شكل مناسب للتنفيذ على أنظمة السلسلة 200 ذات الأداء العالي.
- ↑ رامزي، نورمان؛ فرنانديز، ماري ف. (1995). "مجموعة أدوات لغة الآلة في نيوجيرسي" . وقائع مؤتمر TCON'95، وقائع المؤتمر التقني لـ USENIX لعام 1995. جمعية USENIX، بيركلي، كاليفورنيا، الولايات المتحدة الأمريكية. ص 24.
- ↑ US 7765539 ، إليوت، سكوت وهاتشينسون ، فيليب، "نظام وطريقة لتحويل ألعاب الفيديو إلى لغة برمجة"، صدر عام 2010
- ^ شتاينلشنر ، بيتر (10/03/2014). "Starcraft für ARM-Handheld kompiliert" (باللغة الألمانية). golem.de . تم الاسترجاع 2014/03/25 .
- ↑ notaz (2014-03-04). "StarCraft" . repo.openpandora.org . تم الاسترجاع في 2014-03-26 .
- ↑ notaz (2014-03-01). "ia32rtools/" . GitHub . تم الاسترجاع في 2015-01-09 .
- ↑ notaz (2014-03-04). "ستاركرافت" . openpandora.org . تم الاطلاع عليه بتاريخ 29-03-2014 .
قاعدة "لا مصدر، لا منفذ" ليست صحيحة تمامًا، إذ يُمكن الحصول على شيء مشابه (ولكن ليس نفسه) للمنفذ من خلال إعادة التجميع الثابت. وقد قامت M-HT بأمور مماثلة عدة مرات لبعض ألعاب DOS. كما تم تحويل اللعبة لنظام Android باستخدام نهج مشابه إلى حد ما.
- ↑ M-HT. "Warcraft: Orcs & Humans" . repo.openpandora.org.
- ↑ كيلي، أندرو (2013-07-07). "إعادة تجميع ألعاب NES بشكل ثابت إلى ملفات تنفيذية أصلية باستخدام LLVM وGo" . تم الاطلاع عليه بتاريخ 2013-08-08 .
تقدم هذه المقالة بحثًا أصليًا حول إمكانية تفكيك وإعادة تجميع ألعاب نظام نينتندو الترفيهي (NES) بشكل ثابت إلى ملفات تنفيذية أصلية.
- ↑ كارليف، ماتياس (14 أبريل 2014). "إعادة تجميع عملية وقابلة للنقل لـ x86" . تم الاسترجاع في 8 أغسطس 2014. ولكن بعد ذلك ،
برزت فكرة استخدام كود آلة x86 الأصلي بطريقة ما. ومع ذلك، بالنسبة لخادمنا المفتوح المصدر، نحتاج إلى دعم x86-64 أيضًا، وفي هذه الحالة، نحتاج حتمًا إلى المحاكاة أو إعادة التجميع. [...] بدت إعادة التجميع الثابتة إلى لغة التجميع خيارًا أفضل بكثير، ولكن للحفاظ على قابليتها للنقل، سنحتاج إلى كتابة واجهات خلفية لـ x86 و x86-64، وربما ARM/PowerPC.
- 1 2 وارتون، جون هاريسون (1994-08-01). "غاري كيلدال، رائد الصناعة، يرحل عن عمر ناهز 52 عامًا: مبتكر أولى لغات الحواسيب الصغيرة وأنظمة تشغيل الأقراص" . تقرير المعالجات الدقيقة . 8 (10). شركة مايكرو ديزاين ريسورسز (MDR). مؤرشف من الأصل في 2016-11-18 . تم الاسترجاع في 2016-11-18 .
[...] ومن المفارقات، أن العديد من التقنيات التي ابتكرها
غاري
يُعاد اكتشافها الآن، بعد عشر سنوات.
تروج شركتا
آبل
ودي
إي سي
لإعادة تجميع الملفات الثنائية
باعتبارها تقنية "جديدة" لنقل البرامج الحالية إلى بنية
باور بي سي
أو
ألفا
. في الواقع،
قدمت
شركة دي آر آي مُعيد تجميع ثنائي من
8080
إلى
8086
في أوائل الثمانينيات. [...]
- ↑ كارلسون، جيم؛ هاك، جيري (2003). صعود إيتانيوم: اختراق قانون مور الثاني لقوة الحوسبة . برنتيس هول بي تي آر. رقم ISBN 978-0-13046415-6تم الاطلاع عليه بتاريخ 9 يناير 2015 .
- ↑ "مترجم HP ARIES الثنائي الديناميكي" . HP . مؤرشف من الأصل بتاريخ 10 يناير 2015. تم الاطلاع عليه بتاريخ 9 يناير 2015 .
- ↑ ستوكس، جون. "استكشاف سفينة كروزو عبر الفضائيين" . آرس تكنيكا . تم الاسترجاع في 9 يناير 2015 .
- ↑ هيوز، روب (20 يناير 2000). "معالج كروزو الدقيق من ترانسميتا" . geek.com . مؤرشف من الأصل في 27 سبتمبر 2007.
- ↑ "الأسئلة الشائعة حول معالج ترانسميتا كروزو" . ترانسميتا . 2007. مؤرشف من الأصل بتاريخ 10 يناير 2007.
للمزيد من القراءة
- هابر، جادي (2010). "مقدمة في الترجمة الثنائية" (ملف PDF) . إنتل . مؤرشف من الأصل (ملف PDF) بتاريخ 9 مارس 2016. تم الاطلاع عليه بتاريخ 30 مارس 2014 .
- بانسال، سوراف؛ أيكن، أليكس (ديسمبر 2008). "الترجمة الثنائية باستخدام مُحسِّنات الثقب الفائق" . قسم علوم وهندسة الحاسوب . المعهد الهندي للتكنولوجيا دلهي . تاريخ الاسترجاع: 30 مارس 2014 .
- باراز، ليونيد؛ ديفور، تيفي؛ إتزيون، أورنا؛ غولدنبرغ، شالوم؛ سكاليتسكي، أليكس؛ وانغ، يون؛ زيماخ، يغال (2003). "طبقة تنفيذ IA-32: مترجم ديناميكي ثنائي الطور مصمم لدعم تطبيقات IA-32 على الأنظمة القائمة على معالجات إيتانيوم" . وقائع الندوة الدولية السنوية السادسة والثلاثين لمعهد مهندسي الكهرباء والإلكترونيات/رابطة مكائن الحوسبة حول هندسة المعالجات الدقيقة . MICRO 36. واشنطن العاصمة، الولايات المتحدة الأمريكية: جمعية الحاسبات التابعة لمعهد مهندسي الكهرباء والإلكترونيات . الصفحات 191 وما بعدها. ISBN 978-0-7695-2043-8.
- توال، غراهام. "دليل كتابة المحاكي للترجمة الثنائية الثابتة" .
- تشيرنوف، انطون. هيرديج، مارك؛ هوكواي، راي؛ ريف، كريس؛ روبن، نورمان. تاي توني. يادافالي، س. بهارادواج؛ ييتس، جون (1998). "FX!32: مترجم ثنائي موجه للملف الشخصي" . آي إي إي مايكرو . 18 (2): 56-64 . دوى : 10.1109 / 40.671403 . ISSN 0272-1732 .
- سوزا، ماكسويل؛ نيكاسيو، دانيال؛ أراوجو، غيدو (23-06-2010) [19-06-2010]. ISAMAP: رسم خرائط التعليمات المدفوعة بالترجمة الديناميكية . ورش عمل هندسة الحاسوب الدولية ISCA 2010. سان مالو، فرنسا. ص 117 وما بعدها. ISBN 9783642243226.
- تشين، يو-هسين (20 يونيو 2009) [18 يونيو 2009]. "الترجمة الثنائية الديناميكية من كود x86-32 إلى كود x86-64 للمحاكاة الافتراضية" (ملف PDF) . معهد ماساتشوستس للتكنولوجيا .
- برنامج المحاكاة
- المترجمون الفوريون (في مجال الحوسبة)
- المحاكاة الافتراضية
