ترجمه دودویی
در محاسبات، ترجمه باینری نوعی ترکیب مجدد باینری است که در آن توالی دستورالعملها از یک مجموعه دستورالعمل منبع به مجموعه دستورالعملهای هدف ترجمه میشوند. در برخی موارد مانند شبیهسازی مجموعه دستورالعملها، مجموعه دستورالعملهای هدف ممکن است همان مجموعه دستورالعملهای منبع باشد، ویژگیهای تست و اشکال زدایی مانند ردیابی دستورالعملها، نقاط وقفه شرطی و تشخیص نقاط hotspot را ارائه میدهد.
ترجمه باینری دارای دو دستهبندی استاتیک و پویا میباشد. ترجمه را میتوان در سختافزار یا در نرمافزار انجام داد.
انگیزه
[ویرایش]هدف ترجمه باینری عدم وجود باینری برای یک پلتفرم هدف، کمبود کد منبع برای کامپایل برای سیستم عامل هدف یا در غیر این صورت مشکل در تهیه منبع برای سیستم عامل هدف میباشد.
باینریهایی که به صورت ایستا مجدداً کامپایل شدهاند، به دلیل اینکه سربار تقلید از بین میرود بالقوه سریعتر از باینرهای شبیهسازی شده مربوطه اجرا میشوند. این شبیه تفاوت عملکرد بین برنامههای تفسیر شده و کامپایل شده بهطور کلی است.
ترجمه باینری استاتیک
[ویرایش]یک مترجم با استفاده از ترجمه باینری ایستا قصد دارد تمام کدهای یک فایل اجرایی را به کدی تبدیل کند که بر روی معماری هدف اجرا میشود بدون اینکه لازم باشد ابتدا کد را اجرا کند، همانطور که در ترجمه باینری پویا انجام میشود. انجام این کار بسیار دشوار است، زیرا همه کدها توسط مترجم کشف نمیشوند. به عنوان مثال، بعضی از قسمتهای اجرایی فقط از طریق شاخههای غیرمستقیم قابل دسترسی هستند که ارزش آنها فقط در زمان اجرا مشخص است.
یک مترجم باینری استاتیک از superoptimizer روزنه تکنولوژی جهانی (توسعه یافته توسط Sorav Bansal، و الکس آیکن از دانشگاه استنفورد) برای انجام یک ترجمه کارآمد بین احتمالاً بسیاری از منابع جفت مبدأ و مقصد، با هزینههای توسعه، بهطور قابل توجهی کم و کارایی بالا از باینری هدف استفاده میکند. در آزمایشهای ترجمه PowerPC به x86، برخی از باینریها حتی از نسخههای بومی عملکرد بهتری دارند اما بهطور متوسط با دو سوم سرعت بومی کار میکنند.
نمونههایی برای ترجمههای باینری استاتیک
[ویرایش]هانیول برنامه ای تحت عنوان Liberator را برای سری ۲۰۰ رایانه هانیول ارائه داد. این برنامه میتواند برنامههایی را برای سری کامپیوترهای IBM 1400 به برنامههای سری Honeywell 200 ترجمه کند.
در سال ۲۰۱۴، یک نسخه معماری ARM از بازی ویدیویی استارکرافت 1998 با تلفیق ایستا و مهندسی معکوس اضافی نسخه اصلی x86 تولید شد.[۱][۲] جامعه دستی پاندورا قادر بود ابزارهای مورد نیاز[۳] به تنهایی توسعه دهد و چندین بار با موفقیت به چنین ترجمههایی دست یابد.[۴][۵]
به عنوان مثال، یک ترکیب مجدد استاتیک x86 به x64 موفقیتآمیز برای ژنراتور رویه ای بازی ویدیویی دنیای مکعب در سال ۲۰۱۴ تولید شد.[۶]
مثال دیگر، نسخه کاملاً آماری NES -to- x86 از بازی ویدیویی برادران سوپر ماریو است که با استفاده از الالویام در سال ۲۰۱۳ تولید شدهاست.[۷]
در سال ۲۰۰۴ اسکات الیوت و فیلیپ آر. هاچینسون در نینتندو ابزاری را برای تولید کد "C" از باینری گیم بوی تولید میکردند که میتواند برای یک پلتفرم جدید کامپیوتر شود و با استفاده از کتابخانه سختافزاری برای استفاده در سیستمهای سرگرمی خطوط هوایی پیوند یابد.[۸]
در سال ۱۹۹۵ نورمن رمزی در تحقیقات ارتباطات بل و مری اف. فرناندز در گروه علوم کامپیوتر، دانشگاه پرینستون جعبه ابزار ماشین-کد نیوجرسی را ایجاد کرد که دارای ابزارهای اساسی برای ترجمه استاتیک مونتاژ بود.[۹]
ترجمه باینری پویا
[ویرایش]ترجمه باینری پویا (DBT) توالی کوتاهی از کد را مشاهده میکند - که معمولاً به ترتیب یک بلوک اساسی است - سپس آن را ترجمه کرده و توالی حاصل را در حافظه پنهان میکند. کد فقط در صورت کشف و در صورت امکان ترجمه میشود و دستورالعملهای شاخه برای اشاره به کد ترجمه شده و ذخیره شده (یادداشت سازی) ساخته میشوند.
ترجمه باینری پویا با شبیهسازی ساده (حذف حلقه اصلی خواندن-رمزگشایی-اجرا-شبیهساز - یک گلوگاه اصلی عملکرد) متفاوت است، هزینههای این کار را با هزینه زیاد در طول زمان ترجمه پرداخت میکند.
مترجمان پویاتر پیشرفته از ترکیب مجدد پویا استفاده میکنند که کد ترجمه شده برای استفاده از تعداد زیادی بار اجرا شده و این قسمتها به صورت تهاجمی بهینه می شوند. این تکنیک یادآور کامپایلر JIT و در واقع چنین کامپایلرهایی است (به عنوان مثال از فناوری HotSpot Sun میتوان به عنوان مترجمهای پویا از یک مجموعه دستورالعمل مجازی (کد بایت) به یک دستورالعمل واقعی دیدن کرد.
نمونههایی از ترجمههای باینری پویا در نرمافزار
[ویرایش]- اپل کامپیوتر یک شبیهساز ترجمه پویا برای کد M68K را در خط PowerPC خود از Macintoshesمکینتاش پیادهسازی کرد که به سطح بالایی از قابلیت اطمینان، عملکرد و سازگاری دست یافت (به شبیهساز Mac 68K مراجعه کنید). این به اپل این امکان را میداد که دستگاهها را فقط با یک سیستم عامل تا حدودی بومی به بازار بیاورد و کاربران نهایی میتوانند از معماری سریعتر و جدید استفاده کنند بدون اینکه سرمایهگذاری خود را در زمینه نرمافزار به خطر بیندازند. تا حدودی به این دلیل که شبیهساز بسیار موفق بود، بسیاری از قسمتهای سیستم عامل شبیهسازی شدند. انتقال کامل به سیستم عامل بومی (OS) PowerPC تا زمان انتشار Mac OS X (10.0) در سال ۲۰۰۱ انجام نشد. (محیط زمان اجرا " Classic " Mac OS X همچنان این قابلیت شبیهسازی را در MacP PowerPC تا Mac OS X 10.5 ارائه میدهد)
- Mac OS X 10.4.4 برای مکینتاش مبتنی بر اینتل، لایه ترجمه دینامیک Rosetta را برای سهولت انتقال اپل از سختافزار مبتنی بر PPC به x86 معرفی کرد. نرمافزار Rosetta که توسط شرکت Transitive Corporation برای اپل توسعه یافتهاست، پیادهسازی راه حل QuickTransit Transitive است.
- QuickTransit در طول عمر محصول خود همچنین از پشتیبانی SPARC → x86، x86 → PowerPC و MIPS IPS Itanium 2 پشتیبانی میکند.
- DEC با کمک ابزارهای ترجمه خود به موفقیت مشابهی دست یافت تا به کاربران در مهاجرت از معماری CISC VAX به معماری Alpha RISC کمک کند .[نیازمند منبع]
- HP ARIES (ترجمه مجدد خودکار و شبیهسازی محیط مجتمع) یک نرمافزار سیستم ترجمه باینری پویا است که ترکیبی از تفسیر سریع کد با ترجمه پویا دو فاز برای اجرای شفاف و دقیق برنامههای HP 9000 HP-UX در HP-UX 11i برای HPE است سرورهای یکپارچگی[۱۰] مفسر سریع ARIES مجموعه کاملی از دستورالعملهای PA-RISC غیرمجاز را بدون دخالت کاربر تقلید میکند. در حین تفسیر، الگوی اجرای برنامه را کنترل میکند و فقط کدهای اغلب اجرا شده را در زمان اجرا به کد بومی ایتانیوم ترجمه میکند. ARIES ترجمه پویا دو فازی را پیادهسازی میکند، تکنیکی که در آن کد ترجمه شده در مرحله اول اطلاعات پروفایل زمان اجرا را که هنگام ترجمه فاز دوم برای بهینهسازی بیشتر کد ترجمه شده استفاده میکند، جمعآوری میکند. ARIES کد ترجمه شده به صورت پویا را در بافر حافظه بنام cache کد ذخیره میکند. ارجاعات بیشتر به بلوکهای اساسی ترجمه شده مستقیماً در حافظه پنهان کد اجرا میشوند و نیازی به تفسیر یا ترجمه اضافی ندارند. اهداف بلوکهای کد ترجمه شده دوباره وصله میشوند تا اطمینان حاصل شود که اجرای آن در حافظه پنهان کد بیشتر اوقات انجام میشود. در پایان شبیهسازی، ARIES تمام کد ترجمه شده را بدون تغییر در برنامه اصلی دور میاندازد. موتور شبیهسازی ARIES همچنین محیط شبیهسازی را اجرا میکند که مکالمات سیستمی، تحویل سیگنال، مدیریت استثنا، مدیریت رشتهها، شبیهسازی HP GDB برای اشکال زدایی و ایجاد پرونده هسته ای برنامه HP 9000 HP-UX را شبیهسازی میکند.
- DEC مترجم باینری FX! ۳۲ را برای تبدیل برنامههای x86 به برنامههای آلفا ایجاد کرد.
- نرمافزار Sun Microsystems ' Wabi شامل ترجمه پویا از x86 به دستورالعملهای SPARC بود.
- در ژانویه ۲۰۰۰، شرکت Transmeta یک طرح پردازنده جدید به نام Crusoe را اعلام کرد.[۱۱][۱۲] از س FAالات متداول[۱۳] در وب سایت خود ،
The smart microprocessor consists of a hardware VLIW core as its engine and a software layer called Code Morphing software. The Code Morphing software acts as a shell […] morphing or translating x86 instructions to native Crusoe instructions. In addition, the Code Morphing software contains a dynamic compiler and code optimizer […] The result is increased performance at the least amount of power. […] [This] allows Transmeta to evolve the VLIW hardware and Code Morphing software separately without affecting the huge base of software applications.
- اینتل شرکت توسعه و اجرا IA-32 اجرای لایه - مترجم باینری پویا طراحی شده برای پشتیبانی IA-32 برنامههای کاربردی در ایتانیوم سیستم مبتنی بر، که در نظر گرفته شد مایکروسافت ویندوز سرور برای ایتانیوم معماری، و همچنین در چندین طعم لینوکس، از جمله کلاه قرمزی و سوسه. به برنامههای IA-32 اجازه میداد تا سریعتر از حالت بومی IA-32 در پردازندههای Itanium کار کنند.
- Dolphin (شبیهساز GameCube / Wii) مجدداً کامپایل JIT کد PowerPC را به x86 و AArch64 انجام میدهد.
نمونههایی برای ترجمه باینری پویا در سختافزار
[ویرایش]- پردازندههای x86 اینتل از زمانی که Pentium Pro دستورالعملهای پیچیده CISC x86 را به عملکردهای داخلی بیشتر شبیه RISC ترجمه میکند.
- Nvidia Tegra K1 Denver دستورالعملهای ARM را از طریق رمزگشای سختافزاری کند به دستورالعملهای میکرو کد اصلی خود ترجمه میکند و از یک مترجم باینری نرمافزار برای کد گرم استفاده میکند.[نیازمند منبع]
جستارهای وابسته
[ویرایش]- بهینهسازی دودویی
- ترکیب مجدد دودویی
- تلفیق مجدد پویا
- تدوین به موقع
- شبیهساز مجموعه دستورالعملها
- شبیهساز
- ماشین مجازی
- مقایسه نرمافزار مجازی سازی پلتفرم
- خاطره سایه
منابع
[ویرایش]- ↑ Steinlechner, Peter (March 10, 2014). "Starcraft für ARM-Handheld kompiliert" (به آلمانی). golem.de. Retrieved March 25, 2014.
- ↑ notaz (March 4, 2014). "StarCraft". repo.openpandora.org. Retrieved March 26, 2014.
- ↑ notaz (2014-03-01). "ia32rtools/". GitHub. Retrieved 2015-01-09.
- ↑ notaz (March 4, 2014). "Starcraft". openpandora.org. Archived from the original on 10 December 2015. Retrieved March 29, 2014.
The "no source, no port" rule is not completely true, you can get something similar (but not the same) as a port through static recompilation. Similar stuff was done several times by M-HT for some DOS games. The game was also converted for Android with somewhat similar approach.
- ↑ M-HT. "Warcraft: Orcs & Humans". repo.openpandora.org.
- ↑ Kærlev, Mathias (2014-04-14). "Practical and Portable X86 Recompilation". Retrieved 2014-08-08.
but then the idea of somehow using the original x86 machine code presented itself. However, for our open server, we need to support x86-64 as well, and in that case, we absolutely need emulation or recompilation. […] Static recompilation to assembler seemed like a much better option, but to keep it portable, we would need to write backends for x86, x86-64, and possibly ARM/PowerPC.
- ↑ Kelley, Andrew (2013-07-07). "Statically Recompiling NES Games into Native Executables with LLVM and Go". Retrieved 2013-08-08.
This article presents original research regarding the possibility of statically disassembling and recompiling Nintendo Entertainment System games into native executables.
- ↑ [۱], "System and method for trans-compiling video games"
- ↑ "The New Jersey Machine-Code Toolkit". Proceeding TCON'95 Proceedings of the USENIX 1995 Technical Conference Proceedings. USENIX Association Berkeley, CA, USA: 24. 1995.
- ↑ "HP ARIES Dynamic Binary Translator". HP. Retrieved 2015-01-09.
- ↑ Stokes, Jon. "Transmeta Crusoe Explored". Ars Technica. Retrieved 2015-01-09.
- ↑ Hughes, Rob (January 20, 2000). "Transmeta's Crusoe Microprocessor". geek.com. Archived from the original on September 27, 2007.
- ↑ "Transmeta Crusoe Processor Frequently Asked Questions FAQ". Transmeta. 2007. Archived from the original on 2007-01-10.