बाइनरी ट्रांसलेशन

कम्प्यूटिंग में, बाइनरी ट्रांसलेशन बाइनरी पुनर्संकलन का एक रूप है, जहां इंस्ट्रक्शन (कंप्यूटर साइंस) के सीक्वेंस को 'स्रोत' निर्देश समुच्चय से 'टारगेट' इंस्ट्रक्शन सेट में ट्रांसलेट किया जाता है। निर्देश सेट सिम्युलेटर जैसे कुछ मामलों में, लक्ष्य निर्देश सेट स्रोत निर्देश सेट के समान हो सकता है, जो निर्देश ट्रेस, सशर्त विराम बिंदु और हॉट स्पॉट (कंप्यूटर विज्ञान) का पता लगाने जैसी परीक्षण और डिबगिंग सुविधाएँ प्रदान करता है।

दो मुख्य प्रकार स्थिर और गतिशील बाइनरी अनुवाद हैं। अनुवाद हार्डवेयर में किया जा सकता है (उदाहरण के लिए, CPU में सर्किट द्वारा) या सॉफ्टवेयर में (जैसे रन-टाइम इंजन, स्टेटिक रीकंपलर, इम्यूलेटर)।

प्रेरणा
बाइनरी अनुवाद लक्ष्य प्लेटफॉर्म के लिए बाइनरी की कमी, लक्ष्य प्लेटफॉर्म के लिए संकलित करने के लिए स्रोत कोड की कमी, या लक्ष्य प्लेटफॉर्म के लिए स्रोत को संकलित करने में अन्यथा कठिनाई से प्रेरित है।

जैसा कि एमुलेशन ओवरहेड हटा दिया जाता है, स्टैटिकली-रीकम्पाइल्ड बायनेरिज़ अपने संबंधित बायनेरिज़ की तुलना में संभावित रूप से तेज़ी से चलते हैं। यह सामान्य रूप से व्याख्या किए गए और संकलित कार्यक्रमों के बीच प्रदर्शन के अंतर के समान है।

स्टैटिक बाइनरी ट्रांसलेशन
स्टैटिक बाइनरी ट्रांसलेशन का उपयोग करने वाले अनुवादक का उद्देश्य एक निष्पादन योग्य के सभी कोड को कोड में बदलना है जो पहले कोड को चलाए बिना लक्ष्य आर्किटेक्चर पर चलता है, जैसा कि डायनेमिक बाइनरी ट्रांसलेशन में किया जाता है। यह सही ढंग से करना बहुत कठिन है, क्योंकि अनुवादक द्वारा सभी कोड की खोज नहीं की जा सकती है। उदाहरण के लिए, निष्पादन योग्य के कुछ हिस्से केवल अप्रत्यक्ष शाखाओं के माध्यम से ही पहुंच योग्य हो सकते हैं, जिसका मूल्य केवल रन-टाइम पर ही जाना जाता है।

ऐसा ही एक स्टैटिक बाइनरी ट्रांसलेटर यूनिवर्सल superoptimization पीपहोल अनुकूलन टेक्नोलॉजी (स्टैनफोर्ड विश्वविद्यालय से सौरव बंसल और एलेक्स ऐकेन द्वारा विकसित) का उपयोग करता है, संभवतः कई स्रोत और लक्ष्य जोड़े के बीच कुशल अनुवाद करने के लिए, काफी कम विकास लागत और लक्ष्य बाइनरी के उच्च प्रदर्शन के साथ। PowerPC-to-x86 अनुवाद के प्रयोगों में, कुछ बायनेरिज़ ने मूल संस्करणों से भी बेहतर प्रदर्शन किया, लेकिन औसतन वे दो-तिहाई मूल गति से चले।

स्टैटिक बाइनरी ट्रांसलेशन के उदाहरण
हनीवेल ने अपने हनीवेल 200 श्रृंखला के कंप्यूटरों के लिए मुक्तिदाता (हनीवेल) नामक एक कार्यक्रम प्रदान किया; यह आईबीएम 1400 श्रृंखला के कंप्यूटरों के कार्यक्रमों को हनीवेल 200 श्रृंखला के कार्यक्रमों में अनुवाद कर सकता है। 2014 में, 1998 के वीडियो गेम StarCraft (वीडियो गेम) का एक एआरएम वास्तुकला संस्करण स्थिर पुनर्संयोजन और मूल x86 संस्करण के अतिरिक्त रिवर्स इंजीनियरिंग द्वारा उत्पन्न किया गया था। पेंडोरा (कंसोल) हैंडहेल्ड समुदाय आवश्यक उपकरण विकसित करने में सक्षम था अपने दम पर और इस तरह के अनुवादों को कई बार सफलतापूर्वक प्राप्त करना। उदाहरण के लिए, 2014 में वीडियो गेम क्यूब विश्व की प्रक्रियात्मक पीढ़ी के लिए एक सफल x86-to-x64 स्थिर पुनर्संकलन उत्पन्न किया गया था। एक अन्य उदाहरण वीडियोगेम सुपर मारियो ब्रदर्स का निन्टेंडो एंटरटेनमेंट सिस्टम-टू-एक्स 86 स्टैटिकली रीकंपाइल्ड संस्करण है, जिसे 2013 में एलएलवीएम के उपयोग के तहत उत्पन्न किया गया था। 2004 में Nintendo में स्कॉट इलियट और फिलिप आर हचिंसन ने खेल का लड़का बाइनरी से सी कोड उत्पन्न करने के लिए एक उपकरण विकसित किया जिसे तब एक नए प्लेटफॉर्म के लिए संकलित किया जा सकता था और एयरलाइन मनोरंजन प्रणालियों में उपयोग के लिए एक हार्डवेयर लाइब्रेरी से जोड़ा जा सकता था। 1995 में बेल संचार अनुसंधान में नॉर्मन रैमसे और प्रिंसटन विश्वविद्यालय के कंप्यूटर साइंस विभाग में मैरी एफ. फर्नांडीज ने द न्यू जर्सी मशीन-कोड टूलकिट विकसित किया, जिसमें स्टैटिक असेंबली ट्रांसलेशन के लिए बुनियादी उपकरण थे।

डायनेमिक बाइनरी ट्रांसलेशन
डायनेमिक बाइनरी ट्रांसलेशन (DBT) कोड के एक छोटे अनुक्रम को देखता है - आमतौर पर एक मूल ब्लॉक के क्रम में - फिर इसका अनुवाद करता है और परिणामी अनुक्रम को कैश करता है। कोड का केवल अनुवाद किया जाता है क्योंकि यह खोजा जाता है और जब संभव हो, और शाखा निर्देश पहले से अनुवादित और सहेजे गए कोड (memoization) को इंगित करने के लिए बनाए जाते हैं।

डायनेमिक बाइनरी ट्रांसलेशन सरल इम्यूलेशन से अलग है (एमुलेटर के मुख्य रीड-डीकोड-एक्ज़ीक्यूट लूप को खत्म करना - एक प्रमुख प्रदर्शन अड़चन), अनुवाद समय के दौरान बड़े ओवरहेड द्वारा इसके लिए भुगतान करना। इस ओवरहेड को उम्मीद से परिशोधित किया गया है क्योंकि अनुवादित कोड अनुक्रमों को कई बार निष्पादित किया जाता है।

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

सॉफ्टवेयर में डायनेमिक बाइनरी ट्रांसलेशन के उदाहरण

 * Apple कंप्यूटर ने Motorola 68000 श्रृंखला कोड के लिए उनके Apple Macintosh की PowerPC लाइन में एक डायनेमिक ट्रांसलेटिंग एम्यूलेटर लागू किया, जिसने बहुत उच्च स्तर की विश्वसनीयता, प्रदर्शन और अनुकूलता हासिल की (मैक 68K एमुलेटर देखें)। इसने Apple को मशीनों को केवल आंशिक रूप से देशी ऑपरेटिंग सिस्टम के साथ बाज़ार में लाने की अनुमति दी, और अंतिम उपयोगकर्ता सॉफ़्टवेयर में अपने निवेश को जोखिम में डाले बिना नए, तेज़ आर्किटेक्चर को अपना सकते थे। आंशिक रूप से क्योंकि एमुलेटर इतना सफल था, ऑपरेटिंग सिस्टम के कई हिस्से अनुकरणीय बने रहे। 2001 में Mac OS X (10.0) के रिलीज़ होने तक PowerPC नेटिव ऑपरेटिंग सिस्टम (OS) में पूर्ण परिवर्तन नहीं किया गया था। मैक ओएस एक्स 10.5 तक।)
 * मैक ओएस एक्स 10.4 | इंटेल-आधारित मैक के क्लासिक (मैक ओएस एक्स) 10.4.4 ने पीपीसी-आधारित हार्डवेयर से x86 तक ऐप्पल के संक्रमण को आसान बनाने के लिए रोसेटा (सॉफ्टवेयर) गतिशील अनुवाद परत पेश की। Transitive Corporation द्वारा Apple के लिए विकसित किया गया, Rosetta सॉफ़्टवेयर Transitive के QuickTransit समाधान का कार्यान्वयन है।
 * QuickTransit ने अपने उत्पाद जीवन काल के दौरान SPARC→x86, x86→PowerPC और MIPS आर्किटेक्चर → Itanium 2 अनुवाद समर्थन भी प्रदान किया।
 * डिजिटल उपकरण निगम ने अपने अनुवाद उपकरणों के साथ समान सफलता हासिल की ताकि उपयोगकर्ताओं को जटिल निर्देश सेट कंप्यूटर VAX आर्किटेक्चर से DEC अल्फा RISC आर्किटेक्चर में माइग्रेट करने में मदद मिल सके।
 * Hewlett-Packard ARIES (ऑटोमैटिक री-ट्रांसलेशन एंड इंटीग्रेटेड एनवायरनमेंट सिमुलेशन) एक सॉफ्टवेयर है डायनेमिक बाइनरी ट्रांसलेशन सिस्टम जो एचपीई वफ़ादारी सर्वर के लिए एचपी-यूएक्स 11i पर एचपी 9000 एचपी-यूएक्स अनुप्रयोगों को पारदर्शी और सटीक रूप से निष्पादित करने के लिए दो चरण के गतिशील अनुवाद के साथ फास्ट कोड व्याख्या को जोड़ता है। ARIES तेज़ दुभाषिया बिना किसी उपयोगकर्ता हस्तक्षेप के गैर-विशेषाधिकार प्राप्त PA-RISC निर्देशों के एक पूर्ण सेट का अनुकरण करता है। व्याख्या के दौरान, यह एप्लिकेशन के निष्पादन पैटर्न पर नज़र रखता है और रनटाइम पर केवल अक्सर निष्पादित कोड को देशी इटेनियम कोड में अनुवादित करता है। ARIES दो चरण के गतिशील अनुवाद को लागू करता है, एक ऐसी तकनीक जिसमें पहले चरण में अनुवादित कोड रनटाइम प्रोफ़ाइल जानकारी एकत्र करता है जिसका उपयोग दूसरे चरण के अनुवाद के दौरान अनुवादित कोड को और अधिक अनुकूलित करने के लिए किया जाता है। ARIES गतिशील रूप से अनुवादित कोड को मेमोरी बफर में संग्रहीत करता है जिसे कोड कैश कहा जाता है। अनुवादित मूल ब्लॉकों के आगे के संदर्भ सीधे कोड कैश में निष्पादित होते हैं और अतिरिक्त व्याख्या या अनुवाद की आवश्यकता नहीं होती है। ज्यादातर समय कोड कैश में निष्पादन सुनिश्चित करने के लिए अनुवादित कोड ब्लॉक के लक्ष्यों को बैक-पैच किया जाता है। अनुकरण के अंत में, ARIES मूल एप्लिकेशन को संशोधित किए बिना सभी अनुवादित कोड को हटा देता है। ARIES एमुलेशन इंजन पर्यावरण एमुलेशन को भी लागू करता है जो HP 9000 HP-UX एप्लिकेशन के सिस्टम कॉल, सिग्नल डिलीवरी, अपवाद प्रबंधन, थ्रेड प्रबंधन, डिबगिंग के लिए Hewlett-Packard GDB के एमुलेशन और एप्लिकेशन के लिए कोर फ़ाइल निर्माण का अनुकरण करता है।
 * DEC ने x86 एप्लिकेशन को अल्फा एप्लिकेशन में बदलने के लिए FX!32 बाइनरी ट्रांसलेटर बनाया। * सन माइक्रोसिस्टम्स के वाबी (सॉफ्टवेयर) सॉफ्टवेयर में x86 से स्पार्क निर्देशों के लिए गतिशील अनुवाद शामिल था।
 * जनवरी 2000 में, हस्तांतरण कॉर्पोरेशन ने ट्रांसम्यूटेशनल क्रूसो नामक एक उपन्यास प्रोसेसर डिजाइन की घोषणा की। एफएक्यू से उनकी वेब साइट पर, "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 अनुप्रयोगों का समर्थन करने के लिए डिज़ाइन किया गया एक डायनेमिक बाइनरी ट्रांसलेटर, जिसे इटेनियम आर्किटेक्चर के लिए Microsoft Windows सर्वर में शामिल किया गया था, साथ ही साथ Linux के कई स्वादों में भी शामिल किया गया था। Red Hat और SUSE Linux सहित। इसने IA-32 अनुप्रयोगों को इटेनियम प्रोसेसर पर देशी IA-32 मोड का उपयोग करने की तुलना में तेज़ी से चलाने की अनुमति दी।
 * डॉल्फिन (एमुलेटर) (खेल घन/Wii के लिए एक एमुलेटर) x86 और AArch64 के लिए PowerPC कोड का JIT पुनर्संकलन करता है।

हार्डवेयर में डायनेमिक बाइनरी ट्रांसलेशन के उदाहरण

 * x86 Intel CPUs चूंकि पेंटियम प्रो जटिल निर्देश सेट कंप्यूटिंग x86 निर्देशों को अधिक RISC-जैसे आंतरिक माइक्रो आपरेशन में ट्रांसलेट करता है।
 * Nvidia Tegra K1 डेनवर एआरएम आर्किटेक्चर निर्देशों को एक धीमे हार्डवेयर डिकोडर पर अपने मूल माइक्रोकोड निर्देशों में अनुवादित करता है और हॉट कोड के लिए एक सॉफ्टवेयर बाइनरी ट्रांसलेटर का उपयोग करता है।

यह भी देखें

 * बाइनरी ऑप्टिमाइज़ेशन
 * बाइनरी पुनर्संकलन
 * गतिशील पुनर्संकलन
 * अभी-अभी संकलन
 * निर्देश सेट सिम्युलेटर
 * एमुलेटर
 * आभासी मशीन
 * प्लेटफॉर्म वर्चुअलाइजेशन सॉफ्टवेयर की तुलना
 * छाया स्मृति