बाइनरी ट्रांसलेशन: Difference between revisions
No edit summary |
|||
Line 7: | Line 7: | ||
द्विआधारी अनुवाद लक्ष्य प्लेटफॉर्म के लिए द्विआधारी की कमी, लक्ष्य प्लेटफॉर्म के लिए संकलित करने के लिए स्रोत कोड की कमी, या लक्ष्य प्लेटफॉर्म के लिए स्रोत को संकलित करने में अन्यथा कठिनाई से प्रेरित है। | द्विआधारी अनुवाद लक्ष्य प्लेटफॉर्म के लिए द्विआधारी की कमी, लक्ष्य प्लेटफॉर्म के लिए संकलित करने के लिए स्रोत कोड की कमी, या लक्ष्य प्लेटफॉर्म के लिए स्रोत को संकलित करने में अन्यथा कठिनाई से प्रेरित है। | ||
जैसा कि प्रतिस्पर्धी ओवरहेड हटा दिया जाता है, | जैसा कि प्रतिस्पर्धी ओवरहेड हटा दिया जाता है, सांख्यिकीय रूप से संकलित बायनेरिज़ अपने संबंधित बायनेरिज़ की तुलना में संभावित रूप से तेज़ी से चलती हैं। यह सामान्य रूप से व्याख्या किए गए और संकलित कार्यक्रमों के बीच प्रदर्शन के अंतर के समान है। | ||
== स्टैटिक द्विआधारी अवुवाद == | == स्टैटिक द्विआधारी अवुवाद == |
Revision as of 10:50, 10 March 2023
कम्प्यूटिंग में, द्विआधारी अनुवाद (द्विआधारी अनुवाद) द्विआधारी पुनःसंयोजन (द्विआधारी पुनर्संकलन) का एक रूप है, जहां निर्देशों के अनुक्रम को 'स्रोत' निर्देश सेट से 'लक्ष्य' निर्देश सेट में अनुवादित किया जाता है। निर्देश सेट अनुरूपण जैसे कुछ मामलों में, लक्ष्य निर्देश सेट स्रोत निर्देश सेट के समान हो सकता है, जो निर्देश अनुरेखण , प्रतिबंधी विच्छेद बिंदु और हॉट स्पॉट का पता लगाने जैसी परीक्षण और दोषमार्जन सुविधाएँ प्रदान करता है।
दो मुख्य प्रकार के स्थिर और गतिशील द्विआधारी अनुवाद हैं। अनुवाद हार्डवेयर (उदाहरण के लिए, सीपीयू में परिपथ द्वारा) या सॉफ्टवेयर में (जैसे कार्यावधि इंजन, स्थैतिक पुन: संयोजित, प्रतिद्वंद्वी) किया जा सकता है।
अभिप्रेरण
द्विआधारी अनुवाद लक्ष्य प्लेटफॉर्म के लिए द्विआधारी की कमी, लक्ष्य प्लेटफॉर्म के लिए संकलित करने के लिए स्रोत कोड की कमी, या लक्ष्य प्लेटफॉर्म के लिए स्रोत को संकलित करने में अन्यथा कठिनाई से प्रेरित है।
जैसा कि प्रतिस्पर्धी ओवरहेड हटा दिया जाता है, सांख्यिकीय रूप से संकलित बायनेरिज़ अपने संबंधित बायनेरिज़ की तुलना में संभावित रूप से तेज़ी से चलती हैं। यह सामान्य रूप से व्याख्या किए गए और संकलित कार्यक्रमों के बीच प्रदर्शन के अंतर के समान है।
स्टैटिक द्विआधारी अवुवाद
स्टैटिक द्विआधारी अनुवाद का उपयोग करने वाले अनुवादक का उद्देश्य एक निष्पादन योग्य फ़ाइल के सभी कोड को कोड में बदलना है जो पहले कोड को चलाए बिना लक्ष्य आर्किटेक्चर पर चलता है, जैसा कि गतिशील द्विआधारी अनुवाद में किया जाता है। यह सही ढंग से करना बहुत कठिन है, क्योंकि अनुवादक द्वारा सभी कोड की खोज नहीं की जा सकती है। उदाहरण के लिए, निष्पादन योग्य के कुछ हिस्से केवल अप्रत्यक्ष शाखाओं के माध्यम से ही पहुंच योग्य हो सकते हैं, जिसका मूल्य केवल रन-टाइम पर ही जाना जाता है।
इस तरह का एक स्थिर द्विआधारी अनुवाद सार्वभौमिक सुपरऑप्टिमाइज़र पीपहोल अनुकूलन तकनीक (स्टैनफोर्ड विश्वविद्यालय से सौरव बंसल और एलेक्स ऐकेन द्वारा विकसित) का उपयोग संभावित रूप से कई स्रोत और लक्ष्य जोड़े के बीच कुशल अनुवाद करने के लिए करता है, जिसमें काफी कम विकास लागत और लक्ष्य द्विआधारी का उच्च प्रदर्शन होता है। पावरपीसी-से-x86 अनुवाद के प्रयोगों में, कुछ बायनेरिज़ ने मूल संस्करणों से भी बेहतर प्रदर्शन किया, लेकिन औसतन वे दो-तिहाई मूल गति से ही चले सके।[1]
स्थैतिक द्विआधारी अनुवाद के उदाहरण
हनीवेल ने अपने हनीवेल 200 श्रृंखला के कंप्यूटरों के लिए लिबरेटर (हनीवेल) नामक एक कार्यक्रम प्रदान किया, यह आईबीएम 1400 श्रृंखला के कंप्यूटरों के कार्यक्रमों को हनीवेल 200 श्रृंखला के कार्यक्रमों में अनुवाद कर सकता है।[2]
2014 में, 1998 के वीडियो गेम स्टार्क्रैफ्ट का एक एआरएम आर्किटेक्चर संस्करण स्थिर पुनर्संयोजन और मूल x86 संस्करण के अतिरिक्त रिवर्स इंजीनियरिंग द्वारा उत्पन्न किया गया था।[3][4] पेंडोरा हैंडहेल्ड समुदाय अपने दम पर आवश्यक उपकरण[5] विकसित करने और इस तरह के अनुवादों को कई बार सफलतापूर्वक प्राप्त करने में सक्षम था।[6][7]
उदाहरण के लिए, 2014 में वीडियो गेम क्यूब विश्व की प्रक्रियात्मक पीढ़ी के लिए एक सफल x86-से-x64 स्थिर पुनर्संकलन उत्पन्न किया गया था।[8]
एक अन्य उदाहरण एनएसई -से-x86 वीडियोगेम सुपर मारियो ब्रदर्स का स्थिर रूप से पुन: संकलित संस्करण है, जिसे 2013 में एलएलवीएम के उपयोग के तहत उत्पन्न किया गया था।[9]
2004 में निंटेंडो में स्कॉट इलियट और फिलिप आर हचिंसन ने गेम बॉय द्विआधारी से सी कोड उत्पन्न करने के लिए एक उपकरण विकसित किया जिसे तब एक नए प्लेटफॉर्म के लिए संकलित किया जा सकता था और एयरलाइन मनोरंजन प्रणालियों में उपयोग के लिए एक हार्डवेयर लाइब्रेरी से जोड़ा जा सकता था।[10]
1995 में बेल संचार अनुसंधान में नॉर्मन रैमसे और प्रिंसटन विश्वविद्यालय के कंप्यूटर साइंस विभाग में मैरी एफ. फर्नांडीज ने द न्यू जर्सी मशीन-कोड टूलकिट विकसित किया, जिसमें स्टैटिक असेंबली अनुवाद के लिए बुनियादी उपकरण थे।[11]
गतिशील द्विआधारी अनुवाद
गतिशील द्विआधारी अनुवाद (डीबीटी) कोड के एक छोटे अनुक्रम को देखता है - आमतौर पर एक मूल ब्लॉक के क्रम में - फिर इसका अनुवाद करता है और परिणामी अनुक्रम को कैश करता है। कोड का केवल अनुवाद किया जाता है क्योंकि जब संभव हो तब यह पाया जाता है, कि शाखा निर्देश पहले से अनुवादित और सहेजे गए कोड (ज्ञापन) को इंगित करने के लिए बनाए जाते हैं।
गतिशील द्विआधारी अनुवाद सरल प्रतिस्पर्धी से अलग है (एमुलेटर के मुख्य रीड-डीकोड-एक्ज़ीक्यूट लूप को खत्म करना - एक प्रमुख प्रदर्शन अड़चन), अनुवाद समय के दौरान बड़े ओवरहेड द्वारा इसके लिए भुगतान करना। इस ओवरहेड को उम्मीद से परिशोधित किया गया है क्योंकि अनुवादित कोड अनुक्रमों को कई बार निष्पादित किया जाता है।
अधिक उन्नत गतिशील अनुवादक गतिशील पुनर्संकलन का उपयोग करते हैं जहां अनुवादित कोड को यह पता लगाने के लिए यंत्रीकृत किया जाता है कि किन भागों को बड़ी संख्या में निष्पादित किया जाता है, और इन भागों को आक्रामक रूप से अनुकूलित किया जाता है। यह तकनीक एक जेआईटी संकलक की याद दिलाती है, और वास्तव में ऐसे संकलक (जैसे सन माइक्रोसिस्टम्स की हॉटस्पॉट (जावा) तकनीक) को एक आभासी निर्देश सेट (बाईटकोड) से एक वास्तविक अनुवादक के रूप में देखा जा सकता है।
सॉफ्टवेयर में गतिशील द्विआधारी अनुवाद के उदाहरण
- एप्पल कंप्यूटर ने मैकितोश कंप्यूटर की पावरपीसी लाइन में M68K कोड के लिए एक गतिशील अनुवाद एम्यूलेटर लागू किया,[12] जिसने विश्वसनीयता, प्रदर्शन और अनुकूलता के बहुत उच्च स्तर हासिल किए (मैक 68K एमुलेटर देखें)। इसने एप्पल को केवल आंशिक रूप से मूल संचालन प्रणाली के साथ बाज़ार में लाने की अनुमति दी, ताकि अंतिम उपयोगकर्ता सॉफ़्टवेयर में अपने निवेश को जोखिम में डाले बिना नए, तेज़ आर्किटेक्चर को अपना सकते थे। आंशिक रूप से क्योंकि एमुलेटर इतना सफल था, इसलिय संचालन प्रणाली के कई हिस्से अनुकरणीय बने रहे। 2001 में मैक ओएस एक्स (10.0) के प्रकशित होने तक पावरपीसी मूल संचालन प्रणाली (ओएस) में पूर्ण परिवर्तन नहीं किया गया था। (मैक ओएस एक्स "क्लासिक" रनटाइम एनवायरनमेंट ने मैक ओएस एक्स 10.5 तक पावरपीसी मैक पर इस अनुकरण क्षमता की पेशकश जारी रखी।)
- इंटेल-आधारित मैक के लिए मैक ओएस एक्स 10.4.4 ने ऐप्पल के पीपीसी-आधारित हार्डवेयर से x86 में संक्रमण को आसान बनाने के लिए रोसेटा गतिशील अनुवाद परत पेश की। सकर्मक निगम द्वारा एप्पल के लिए विकसित किया गया, रोसेटा सॉफ़्टवेयर सकर्मक के त्वरित पारगमन समाधान का कार्यान्वयन है।
- अपने उत्पाद जीवन काल के दौरान त्वरित पारगमन ने स्पार्क→x86, x86→पावरपीसी और एमआईपीएस → इटेनियम 2 अनुवाद समर्थन भी प्रदान किया।
- डिजिटल उपकरण निगम ने अपने अनुवाद उपकरणों के साथ समान सफलता हासिल की ताकि उपयोगकर्ताओं को जटिल निर्देश सेट कंप्यूटर वीएएक्स आर्किटेक्चर से डीईसी अल्फा आरईएससी आर्किटेक्चर में स्थानांतरित करने में मदद मिल सके।[citation needed]
- हेवलेट-पैकर्ड एआरआईएस (स्वचालित पुनः अंतरण एंड और एकीकृत एनवायरनमेंट अनुरूपण) एक सॉफ्टवेयर है[13] गतिशील द्विआधारी अनुवाद सिस्टम जो एचपीई इंटीग्रिटी सर्वर के लिए एचपी-यूएक्स 11i पर एचपी 9000 एचपी-यूएक्स अनुप्रयोगों को पारदर्शी और सटीक रूप से निष्पादित करने के लिए दो चरण के गतिशील अनुवाद के साथ फास्ट कोड व्याख्या को जोड़ता है।[14] एआरआईएस तेज़ दुभाषिया बिना किसी उपयोगकर्ता हस्तक्षेप के गैर-विशेषाधिकार प्राप्त पीए-आरआईएससी निर्देशों के एक पूर्ण सेट का अनुकरण करता है। व्याख्या के दौरान, यह एप्लिकेशन के निष्पादन पैटर्न पर नज़र रखता है और रनटाइम पर केवल अक्सर निष्पादित कोड को मूल इटेनियम कोड में अनुवादित करता है। एआरआईएस दो चरण के गतिशील अनुवाद को लागू करता है, एक ऐसी तकनीक जिसमें पहले चरण में अनुवादित कोड रनटाइम प्रोफ़ाइल जानकारी एकत्र करता है जिसका उपयोग दूसरे चरण के अनुवाद के दौरान अनुवादित कोड को और अधिक अनुकूलित करने के लिए किया जाता है। एआरआईएस गतिशील रूप से अनुवादित कोड को मेमोरी बफर में संग्रहीत करता है जिसे कोड कैश कहा जाता है। अनुवादित मूल ब्लॉकों के आगे के संदर्भ सीधे कोड कैश में निष्पादित होते हैं और अतिरिक्त व्याख्या या अनुवाद की आवश्यकता नहीं होती है। ज्यादातर समय कोड कैश में निष्पादन सुनिश्चित करने के लिए अनुवादित कोड ब्लॉक के लक्ष्यों को बैक-पैच किया जाता है। अनुकरण के अंत में, एआरआईएस मूल एप्लिकेशन को संशोधित किए बिना सभी अनुवादित कोड को हटा देता है। एआरआईएस प्रतिस्पर्धी इंजन पर्यावरण प्रतिस्पर्धी को भी लागू करता है जो एचपी 9000 एचपी-युएक्स एप्लिकेशन के प्रणाली कॉल, सिग्नल डिलीवरी, अपवाद प्रबंधन, थ्रेड प्रबंधन, दोषमार्जन के लिए एचपी जीडीबी के प्रतिस्पर्धी और एप्लिकेशन के लिए कोर फ़ाइल निर्माण का अनुकरण करता है।
- डीईसी ने x86 एप्लिकेशन को अल्फा एप्लिकेशन में बदलने के लिए ऍफ़एक्स!32 द्विआधारी अनुवाद बनाया।[12]
- सन माइक्रोसिस्टम्स के वाबी (सॉफ्टवेयर) सॉफ्टवेयर में x86 से स्पार्क निर्देशों के लिए गतिशील अनुवाद सम्मिलित था।
- जनवरी 2000 में, ट्रांसमेटा कॉर्पोरेशन ने क्रूसो नामक एक नावेल प्रोसेसर प्रारूप की घोषणा की।[15] [16] उनकी वेब साइट पर अक्सर पूछे जाने वाले प्रश्न[17] से ,
एक स्मार्ट माइक्रोप्रोसेसर में इंजन के रूप में एक हार्डवेयर वीएलआईडब्ल्यू कोर और एक सॉफ्टवेयर परत होती है जिसे कोड मॉर्फिंग सॉफ्टवेयर कहा जाता है। कोड मॉर्फिंग सॉफ्टवेयर x86 निर्देशों को मूल क्रूसो निर्देशों में बदलने या अनुवाद करने के लिए शेल [...] के रूप में कार्य करता है। इसके अलावा, कोड मॉर्फिंग सॉफ़्टवेयर में डायनेमिक कंपाइलर और कोड ऑप्टिमाइज़र सम्मिलित हैं [...] जिसके परिणामस्वरूप न्यूनतम शक्ति पर प्रदर्शन में वृद्धि हुई है। […] [यह] सॉफ्टवेयर अनुप्रयोगों के विशाल आधार को प्रभावित किए बिना ट्रांसमेटा को वीएलआईडब्ल्यू हार्डवेयर और कोड मॉर्फिंग सॉफ़्टवेयर को अलग-अलग विकसित करने की अनुमति देता है।
- इंटेल कॉर्पोरेशन ने आईए-32 निष्पादन परत विकसित और कार्यान्वित किया - इटेनियम-आधारित प्रणाली पर आईए-32 अनुप्रयोगों का समर्थन करने के लिए प्रारूप किया गया एक गतिशील द्विआधारी अनुवादक है, जिसे इटेनियम आर्किटेक्चर के लिए माइक्रोसॉफ्ट विंडोज सर्वर में सम्मिलित किया गया था, साथ ही रेड हैट और एसयूएसई Linux के कई फ्लेवर में भी सम्मिलित किया गया था। इसने आईए-32 अनुप्रयोगों को इटेनियम प्रोसेसर पर मूल आईए-32 मोड का उपयोग करने की तुलना में तेज़ी से चलाने की अनुमति दी।
- डॉल्फिन (गेम क्यूब/डब्ल्यूआईआई के लिए एक एमुलेटर) जेआईटी x86 और एएआरसीएच64 के लिए पावरपीसी कोड को फिर से संकलित करता है।
हार्डवेयर में गतिशील द्विआधारी अनुवाद के उदाहरण
- चूंकि पेंटियम प्रो x86 इंटेल सीपीयू जटिल सीआईएससी x86 निर्देशों को अधिक आरआईएससी-जैसे आंतरिक सूक्ष्म संचालनो में अनुवादित करता है।
- एनवीडिया टेग्रा K1 डेनवर स्लो हार्डवेयर डिकोडर पर एआरएम निर्देशों को उनके मूल माइक्रोकोड निर्देशों में अनुवादित करता है और हॉट कोड के लिए एक सॉफ्टवेयर द्विआधारी अनुवादक का उपयोग करता है।[citation needed]
यह भी देखें
- द्विआधारी अनुकूलन
- द्विआधारी पुनःसंयोजन
- गतिशील पुनःसंयोजन
- समय पर संकलन
- निर्देश सेट अनुरूपक
- प्रतिद्वंद्वी
- वर्चुअल मशीन
- प्लेटफॉर्म वर्चुअलाइजेशन सॉफ्टवेयर की तुलना
- शैडो मेमोरी
संदर्भ
- ↑ Bansal, Sorav; Aiken, Alex (December 2008). "Binary Translation Using Peephole Superoptimizers" (PDF). Proceedings of the 8th USENIX conference on Operating systems design and implementation. pp. 177–192.
- ↑ Honeywell Series 200 Summary Description (PDF). Honeywell. February 1966. p. 11.
For example, the instruction repertoire of Series 200 processors is similar enough to those of several other processing systcms, viz., the IBM 1400 series, to allow automated, one-time translation of programs written for these competitive systems to a form suitable for execution on higher-performance Series 200 systems.
- ↑ Steinlechner, Peter (March 10, 2014). "Starcraft für ARM-Handheld kompiliert" (in Deutsch). 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. 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.
- ↑ US 7765539, Elliott, Scott & Hutchinson, Phillip, "System and method for trans-compiling video games", issued 2010
- ↑ Ramsey, Norman; Fernandez, Mary F. (1995). "The New Jersey Machine-Code Toolkit". Proceeding TCON'95 Proceedings of the USENIX 1995 Technical Conference Proceedings. USENIX Association Berkeley, CA, USA. p. 24.
- ↑ 12.0 12.1 Wharton, John Harrison (1994-08-01). "Gary Kildall, industry pioneer, dead at 52: created first microcomputer languages, disk operating systems". Microprocessor Report. MicroDesign Resources Inc. (MDR). 8 (10). Archived from the original on 2016-11-18. Retrieved 2016-11-18.
[…] Ironically, many of the techniques Gary pioneered are being rediscovered now, ten years later. Apple and DEC are touting binary recompilation as a "new" technology for porting existing software to the PowerPC or Alpha architecture. Actually, DRI introduced an 8080-to-8086 binary recompiler in the early 1980s. […]
- ↑ Carlson, Jim; Huck, Jerry (2003). Itanium Rising: Breaking Through Moore's Second Law of Computing Power. Prentice Hall PTR. ISBN 978-0-13046415-6. Retrieved 2015-01-09.
- ↑ "HP ARIES Dynamic Binary Translator". HP. Archived from the original on 2015-01-10. 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.
अग्रिम पठन
- Haber, Gadi (2010). "Introduction to Binary Translation" (PDF). Intel. Archived from the original (PDF) on March 9, 2016. Retrieved March 30, 2014.
- Bansal, Sorav; Aiken, Alex (December 2008). "Binary Translation Using Peephole Superoptimizers". Department of Computer Science and Engineering. Indian Institute of Technology Delhi. Retrieved 2014-03-30.
- Baraz, Leonid; Devor, Tevi; Etzion, Orna; Goldenberg, Shalom; Skaletsky, Alex; Wang, Yun; Zemach, Yigal (2003). "IA-32 Execution Layer: a two-phase dynamic translator designed to support IA-32 applications on Itanium-based systems". Proceedings of the 36th Annual IEEE/ACM International Symposium on Microarchitecture. MICRO 36. Washington, DC, USA: IEEE Computer Society. pp. 191–. ISBN 978-0-7695-2043-8.
- Toal, Graham. "An Emulator Writer's HOWTO for Static Binary Translation".
- Chernoff, Anton; Herdeg, Mark; Hookway, Ray; Reeve, Chris; Rubin, Norman; Tye, Tony; Yadavalli, S. Bharadwaj; Yates, John (1998). "FX!32: A Profile-Directed Binary Translator". IEEE Micro. 18 (2): 56–64. doi:10.1109/40.671403. ISSN 0272-1732.
- Souza, Maxwell; Nicácio, Daniel; Araújo, Guido (2010-06-23) [2010-06-19]. ISAMAP: Instruction Mapping Driven by Dynamic Translation. Computer Architecture - ISCA 2010 International Workshops. Saint-Malo, France. pp. 117–. ISBN 9783642243226.
- Chen, Yu-hsin (2009-06-20) [2009-06-18]. "Dynamic Binary Translation from x86-32 code to x86-64 code for Virtualization" (PDF). Massachusetts Institute of Technology.