स्थानांतरण (कंप्यूटिंग): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(12 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Assigning or adjusting addresses at runtime}}
{{Short description|Assigning or adjusting addresses at runtime}}  
{{Distinguish|Renumbering}}
रिलोकेशन (स्थानांतरण ) स्थिति-निर्भर कोड और प्रोग्राम के डेटा के लिए लोड एड्रेस (भरण पता) निर्धारित करने और निर्धारित किए गए पता को प्रतिबिंबित करने के लिए कोड और डेटा को समायोजित करने की प्रक्रिया है।<ref name="Intel_iRMX"/><ref name="Levine_1999_CH1_CH3"/>मल्टीप्रोसेस प्रणाली के आने से पूर्व, और अभी भी कई एम्बेडेड प्रणाली में, वस्तुओं के पते ज्ञात स्थान से  प्रारम्भ होने वाले पूर्ण पते अधिकांशतः शून्य थे। चूंकि मल्टीप्रोसेसिंग प्रणाली गतिशील प्रकार से प्रोग्राम के बीच लिंक और स्विच करते हैं, इसलिए [[स्थिति-स्वतंत्र कोड]] का उपयोग करके वस्तुओं को स्थानांतरित करने में सक्षम होना आवश्यक हो गया है। [[लिंकर (कंप्यूटिंग)]] सामान्य तौर पर प्रतीक संकल्प के संयोजन के साथ स्थानांतरण करता है, प्रोग्राम चलाने से पूर्व प्राथमिक भंडारण में वास्तविक प्रयोग करने योग्य पतों के साथ प्रतीकात्मक संदर्भों या [[पुस्तकालय (कंप्यूटर विज्ञान)]] के नामों को बदलने के लिए फ़ाइलों और पुस्तकालयों को खोजने की प्रक्रिया होती है।


रिलोकेशन सामान्य तौर पर लिंकर द्वारा [[लिंक समय]] पर किया जाता है, परन्तु यह [[लोड होने का समय]] पर स्थानांतरित [[लोडर (कंप्यूटिंग)]], या रन टाइम (प्रोग्राम लाइफसाइकिल फेज (जीवनचक्र चरण)) पर चल रहे प्रोग्राम [[स्व-स्थानांतरण]] द्वारा भी किया जा सकता है। कुछ आर्किटेक्चर ( निर्माण ) रन टाइम के लिए एड्रेस  कार्यभार को स्थगित कर पूरी तरह से स्थानांतरण से बचते हैं; उदाहरण के लिए, स्टैक मशीनों में [[शून्य पता अंकगणित]] या कुछ खंडित निर्माण में जहां प्रत्येक संकलन इकाई को अलग खंड में लोड किया जाता है।
'''रिलोकेशन (स्थानांतरण )''' स्थिति-निर्भर कोड और प्रोग्राम के डेटा के लिए लोड एड्रेस निर्धारित करने और निर्धारित किए गए एड्रेस को प्रतिबिंबित करने के लिए कोड और डेटा को समायोजित करने की प्रक्रिया है।<ref name="Intel_iRMX" /><ref name="Levine_1999_CH1_CH3" />मल्टीप्रोसेस प्रणाली के आने से पूर्व, और अभी भी कई एम्बेडेड प्रणाली में, वस्तुओं के एड्रेस ज्ञात स्थान से प्रारम्भ होने वाले पूर्ण एड्रेस अधिकांशतः शून्य थे। चूंकि मल्टीप्रोसेसिंग प्रणाली गतिशील प्रकार से प्रोग्राम के बीच लिंक और स्विच करते हैं, इसलिए [[स्थिति-स्वतंत्र कोड]] का उपयोग करके वस्तुओं को स्थानांतरित करने में सक्षम होना आवश्यक हो गया है। [[लिंकर (कंप्यूटिंग)]] सामान्य तौर पर प्रतीक संकल्प के संयोजन के साथ स्थानांतरण करता है, प्रोग्राम चलाने से पूर्व प्राथमिक भंडारण में वास्तविक प्रयोग करने योग्य एड्रेस के साथ प्रतीकात्मक संदर्भों या [[पुस्तकालय (कंप्यूटर विज्ञान)]] के नामों को बदलने के लिए फ़ाइलों और पुस्तकालयों को ढूंढने की प्रक्रिया होती है।
 
रिलोकेशन सामान्य तौर पर लिंकर द्वारा [[लिंक समय]] पर किया जाता है, परन्तु यह [[लोड होने का समय]] पर स्थानांतरित [[लोडर (कंप्यूटिंग)]], या रन टाइम (प्रोग्राम लाइफसाइकिल फेज (जीवनचक्र चरण)) पर चल रहे प्रोग्राम [[स्व-स्थानांतरण]] द्वारा भी किया जा सकता है। कुछ आर्किटेक्चर (निर्माण) रन टाइम के लिए एड्रेस  कार्यभार को स्थगित कर पूरी तरह से स्थानांतरण से बचते हैं; उदाहरण के लिए, स्टैक मशीनों में [[शून्य पता अंकगणित|शून्य एड्रेस अंकगणित]] या कुछ खंडित निर्माण में जहां प्रत्येक संकलन इकाई को अलग खंड में लोड किया जाता है।


== विभाजन ==
== विभाजन ==
[[वस्तु फ़ाइल]] को विभिन्न [[स्मृति विभाजन]] प्रकारों में विभाजित किया गया है। उदाहरण सेगमेंट में कोड सेगमेंट|कोड सेगमेंट (.टेक्स्ट), डेटा सेगमेंट|इनिशियलाइज़्ड डेटा सेगमेंट (.डेटा), .bss|अनइनिशियलाइज़्ड डेटा सेगमेंट (.bss), या अन्य शामिल हैं।
ऑब्जेक्ट फाइल ([[वस्तु फ़ाइल|वस्तु फ़ाइल)]] को विभिन्न मेमोरी [[स्मृति विभाजन|विभाजन]] प्रकारों में विभाजित किया गया है। उदाहरण सेगमेंट (खंड) में कोड खंड (.टेक्स्ट) प्रारंभिक डेटा खंड (.डेटा), अप्रराम्भिक डेटा खंड (.बीएसएस) या अन्य उपस्थित हैं 






== स्थानांतरण तालिका ==
== स्थानांतरण तालिका ==
स्थानांतरण तालिका अनुवादक (एक [[संकलक]] या असेंबलर (कंप्यूटर प्रोग्रामिंग) #Assembler) द्वारा बनाई गई पॉइंटर (कंप्यूटर प्रोग्रामिंग) की एक सूची है और ऑब्जेक्ट या निष्पादन योग्य फ़ाइल में संग्रहीत है। तालिका में प्रत्येक प्रविष्टि, या फ़िक्सअप, ऑब्जेक्ट कोड में एक पूर्ण पते के लिए एक [[सूचक (कंप्यूटर प्रोग्रामिंग)]] है जिसे लोडर द्वारा प्रोग्राम को स्थानांतरित करने पर बदला जाना चाहिए ताकि यह सही स्थान को संदर्भित करे। फ़िक्सअप को एक पूर्ण इकाई के रूप में कार्यक्रम के स्थानांतरण का समर्थन करने के लिए डिज़ाइन किया गया है। कुछ मामलों में, तालिका में प्रत्येक फ़िक्सअप स्वयं शून्य के आधार पते के सापेक्ष होता है, इसलिए फ़िक्सअप स्वयं को बदलना चाहिए क्योंकि लोडर तालिका के माध्यम से आगे बढ़ता है।<ref name="Levine_1999_CH1_CH3"/>
स्थानांतरण तालिका अनुवादक ([[संकलक]] या असेंबलर (कंप्यूटर प्रोग्रामिंग)) द्वारा बनाई गई सूचक (कंप्यूटर प्रोग्रामिंग) की सूची है और बिषय या निष्पादन योग्य फ़ाइल में संग्रहीत है। तालिका में प्रत्येक प्रविष्टि, या फ़िक्सअप, बिषय कोड में पूर्ण पते के लिए [[सूचक (कंप्यूटर प्रोग्रामिंग)]] है जिसे लोडर द्वारा प्रोग्राम को स्थानांतरित करने पर बदला जाना चाहिए जिससे की यह सही स्थान को संदर्भित कर सकता है। फ़िक्सअप को पूर्ण इकाई के रूप में प्रोग्राम के स्थानांतरण का समर्थन करने के लिए डिज़ाइन किया गया है। कुछ कारणों में, तालिका में प्रत्येक फ़िक्सअप स्वयं शून्य के आधारित एड्रेस के सापेक्ष होता है, इसलिए फ़िक्सअप स्वयं को बदलना चाहिए क्योंकि लोडर तालिका के माध्यम से आगे बढ़ता है।<ref name="Levine_1999_CH1_CH3"/>


कुछ आर्किटेक्चर में एक फ़िक्सअप जो कुछ सीमाओं (जैसे खंड सीमा) को पार करता है या जो शब्द सीमा पर संरेखित नहीं है, अवैध है और लिंकर द्वारा त्रुटि के रूप में फ़्लैग किया गया है।<ref name="Borland_2007"/>
कुछ विषय में फ़िक्सअप जो कुछ सीमाओं (जैसे खंड सीमा) को पार करता है या जो शब्द सीमा पर संरेखित नहीं है, वह विरुद्ध है और लिंकर द्वारा त्रुटि के रूप में चिन्हित किया जाता है।<ref name="Borland_2007"/>






=== डॉस और 16-बिट विंडोज ===
=== डॉस और 16-बिट विंडोज ===
फार पॉइंटर ([[कंप्यूटर प्रोग्राम]]िंग) ([[x86 मेमोरी सेगमेंटेशन]] के साथ [[32-बिट]] पॉइंटर्स: ऑफ़सेट, DOS कंप्यूटर प्रोग्राम के लिए उपलब्ध 20-बिट 640 [[किलोबाइट]] [[कंप्यूटर भंडारण]] स्पेस को संबोधित करने के लिए उपयोग किया जाता है), जो DOS निष्पादन योग्य ([[EXE]]) के भीतर कोड या डेटा को इंगित करता है। , पूर्ण खंड नहीं हैं, क्योंकि कोड / डेटा का वास्तविक मेमोरी पता इस बात पर निर्भर करता है कि प्रोग्राम को मेमोरी में कहाँ लोड किया गया है और प्रोग्राम लोड होने तक यह ज्ञात नहीं है।
सूचक दूरी ([[कंप्यूटर प्रोग्राम|कंप्यूटर  प्रोग्रामिंग]]) (एक्स[[x86 मेमोरी सेगमेंटेशन|86 मेमोरी खंड]] के साथ [[32-बिट]] सूचक: ऑफ़सेट, डीओएस कंप्यूटर प्रोग्राम के लिए उपलब्ध 20-बिट 640 [[किलोबाइट]] [[कंप्यूटर भंडारण]] स्थान को संबोधित करने के लिए उपयोग किया जाता है), जो डीओएस निष्पादन योग्य (इएक्सइ) के भीतर कोड या डेटा को इंगित करता है। पूर्ण खंड नहीं हैं, क्योंकि कोड/डेटा का वास्तविक मेमोरी एड्रेस इस बात पर निर्भर करता है कि प्रोग्राम को मेमोरी में कहाँ भरा गया है और प्रोग्राम लोड होने तक यह ज्ञात नहीं है।


इसके बजाय, खंड DOS EXE फ़ाइल में सापेक्ष मान हैं। निष्पादन योग्य मेमोरी में लोड होने पर इन सेगमेंट को सही करने [[की]] आवश्यकता है। EXE लोडर (कंप्यूटिंग) उन खंडों को खोजने के लिए एक स्थानांतरण तालिका का उपयोग करता है जिन्हें समायोजित करने की आवश्यकता होती है।
इसके विपरीत, खंड डीओएस इएक्सइ फ़ाइल में सापेक्ष मान हैं। निष्पादन योग्य मेमोरी में भरे होने पर इन खंड को सही करने [[की]] आवश्यकता है। इएक्सइ लोडर (कंप्यूटिंग) उन खंडों को ढूंढने के लिए स्थानांतरण तालिका का उपयोग करता है जिन्हें समायोजित करने की आवश्यकता होती है।


=== 32-बिट विंडोज ===
=== 32-बिट विंडोज ===
32-बिट विंडोज ऑपरेटिंग सिस्टम के साथ, EXE फाइलों के लिए रिलोकेशन टेबल प्रदान करना अनिवार्य नहीं है, क्योंकि वे वर्चुअल एड्रेस स्पेस में लोड की गई पहली इमेज हैं और इस तरह उनके पसंदीदा बेस एड्रेस पर लोड की जाएंगी।
32-बिट विंडोज ऑपरेटिंग प्रणाली के साथ, इएक्सइ फाइलों के लिए स्थानांतरण टेबल प्रदान करना अनिवार्य नहीं है, क्योंकि वे आभासी एड्रेस के रिक्त स्थान में भरी  गई पहली इमेज हैं और इस तरह उनके पसंदीदा बेस एड्रेस पर भरी जाती है ।


[[डायनेमिक लिंक लाइब्रेरी]] और EXE दोनों के लिए जो [[एड्रेस स्पेस लेआउट रैंडमाइजेशन]] (ASLR) में ऑप्ट इन करते हैं, [[विंडोज विस्टा]] के साथ शुरू की गई एक [[शोषण (कंप्यूटर सुरक्षा)]] शमन तकनीक, एक बार फिर से स्थानांतरण तालिका अनिवार्य हो जाती है क्योंकि संभावना है कि बाइनरी को पहले गतिशील रूप से स्थानांतरित किया जा सकता है। निष्पादित किया जा रहा है, भले ही वे अभी भी वर्चुअल एड्रेस स्पेस में लोड की गई पहली चीज़ हैं।
[[डायनेमिक लिंक लाइब्रेरी]] और इएक्सइ दोनों के लिए जो [[एड्रेस स्पेस लेआउट रैंडमाइजेशन]] (एएसएलआर) में ऑप्ट इन करते हैं, [[विंडोज विस्टा]] के साथ प्रारम्भ की गई अपने कार्य में लेन वाला लघुकरण तकनीक, एक बार फिर से स्थानांतरण तालिका अनिवार्य हो जाती है क्योंकि संभावना है कि बाइनरी को पहले गतिशील प्रकार से स्थानांतरित किया जा सकता है। तथापि वे अभी भी आभासी एड्रेस स्थान में भरी गयी पहली चीज़ हैं।


=== 64-बिट विंडोज ===
=== 64-बिट विंडोज ===
Windows Vista और ऊपर के संस्करण पर नेटिव 64-बिट बायनेरिज़ चलाते समय, ASLR अनिवार्य है{{Citation needed|date=January 2014}}, और इस प्रकार स्थानांतरण अनुभागों को संकलक द्वारा छोड़ा नहीं जा सकता है।
विंडोज विस्टा और ऊपर के संस्करण पर नेटिव 64-बिट बायनेरिज़ चलाते समय, एएसएलआर अनिवार्य है, और इस प्रकार स्थानांतरण अनुभागों को संकलक द्वारा छोड़ा नहीं जा सकता है।


=== यूनिक्स जैसी प्रणाली ===
=== यूनिक्स जैसी प्रणाली ===
[[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] (ईएलएफ) निष्पादन योग्य प्रारूप और अधिकांश यूनिक्स जैसी प्रणालियों द्वारा उपयोग किए जाने वाले साझा पुस्तकालय प्रारूप में कई प्रकार के स्थानांतरण को परिभाषित करने की अनुमति मिलती है।<ref name="ELF"/>
[[निष्पादन योग्य और लिंक करने योग्य प्रारूप]] (ईएलएफ) और अधिकांशतः यूनिक्स जैसी प्रणालियों द्वारा उपयोग किए जाने वाले साझा पुस्तकालय प्रारूप में कई प्रकार के स्थानांतरण को परिभाषित करने की अनुमति मिलती है।<ref name="ELF"/>




== स्थानांतरण प्रक्रिया ==
== स्थानांतरण प्रक्रिया ==
लिंकर ऑब्जेक्ट फ़ाइलों में सेगमेंट की जानकारी और स्थानांतरण तालिका पढ़ता है और इसके द्वारा स्थानांतरण करता है:
लिंकर ऑब्जेक्ट फ़ाइलों में खंड की जानकारी और स्थानांतरण तालिका पढ़ता है और इसके द्वारा स्थानांतरित करता है:


* सामान्य प्रकार के सभी खंडों को उस प्रकार के एक खंड में विलय करना
* सामान्य प्रकार के सभी खंडों को उस प्रकार के खंड में विलय करना है।
* सभी कोड (फ़ंक्शंस) और डेटा (वैश्विक चर) अद्वितीय रन टाइम पते देते हुए, प्रत्येक अनुभाग और प्रत्येक प्रतीक के लिए अद्वितीय रन टाइम पते निर्दिष्ट करना  
* सभी कोड (फ़ंक्शंस) और डेटा (वैश्विक चर) अद्वितीय रन टाइम एड्रेस देते हुए, प्रत्येक अनुभाग और प्रत्येक प्रतीक के लिए अद्वितीय रन टाइम एड्रेस निर्दिष्ट करना है।
* स्थानांतरण तालिका को संशोधित करने की चर्चा करते हुए{{why|date=November 2016}} प्रतीक ताकि वे सही को इंगित करें रन टाइम पते।
* स्थानांतरण तालिका को संशोधित करने की चर्चा करते हुए प्रतीक जिससे की वे सही रन टाइम एड्रेस को इंगित करते हैं।


== उदाहरण ==
== उदाहरण ==
निम्नलिखित उदाहरण [[डोनाल्ड नुथ]] की [[मिक्स]] आर्किटेक्चर और मिक्सल असेंबली भाषा का उपयोग करता है। सिद्धांत किसी भी वास्तुकला के लिए समान हैं, हालांकि विवरण बदल जाएगा।
निम्नलिखित उदाहरण [[डोनाल्ड नुथ]] की [[मिक्स]] विषय और मिक्सल असेंबली भाषा का उपयोग करता है। सिद्धांत किसी भी वास्तुकला के लिए समान हैं, चूँकि विवरण बदल जाएगा।  
फ़ाइल: स्थानान्तरण example.tif|फ्रेमलेस|सही
* (ए) प्रोग्राम एसयुबीआर को ऑब्जेक्ट फ़ाइल (B) बनाने के लिए संकलित किया गया है, जो मशीन कोड और असेंबलर दोनों के प्रकार में दर्शाया गया है। संकलक संकलित कोड को स्वेच्छाचरित प्रकार से स्थान पर प्रारम्भ कर सकता है, जैसा कि अधिकांशतः स्थान 1 दिखाया गया है। स्थान 13 में स्थान 5 में कथन एसटी के लिए जंप निर्देश के लिए मशीन कोड सम्मिलित है।
* (ए) प्रोग्राम SUBR को ऑब्जेक्ट फ़ाइल (B) बनाने के लिए संकलित किया गया है, जो मशीन कोड और असेंबलर दोनों के रूप में दिखाया गया है। संकलक संकलित कोड को मनमाने ढंग से स्थान पर शुरू कर सकता है, जैसा कि दिखाया गया है अक्सर स्थान 1। स्थान 13 में स्थान 5 में कथन ST के लिए जंप निर्देश के लिए मशीन कोड शामिल है।
* (सी) यदि एसयुबीआर बाद में अन्य कोड से जुड़ा हुआ है तो इसे 1 के अतिरिक्त किसी अन्य स्थान पर संग्रहीत किया जा सकता है। इस उदाहरण में लिंकर इसे स्थान 120 पर रखता है। जंप इंस्ट्रक्शन (निर्देश) जो अब स्थान 133 पर है, कथन एसटी के लिए 125 कोड के नए स्थान को इंगित करने के लिए 'स्थानांतरित' किया जाना चाहिए। [निर्देश में दर्शाया गया 161 मिक्स मशीन कोड 125 का प्रतिनिधित्व है]।
* (सी) यदि SUBR बाद में अन्य कोड से जुड़ा हुआ है तो इसे 1 के अलावा किसी अन्य स्थान पर संग्रहीत किया जा सकता है। इस उदाहरण में लिंकर इसे स्थान 120 पर रखता है। कूद निर्देश में पता, जो अब स्थान 133 पर है, होना चाहिए कथन ST के लिए कोड के नए स्थान को इंगित करने के लिए 'स्थानांतरित', अब 125। [निर्देश में दिखाया गया 1 61 MIX मशीन कोड 125 का प्रतिनिधित्व है]।
* (डी) जब प्रोग्राम को चलाने के लिए मेमोरी में भरा जाता है तो इसे लिंकर द्वारा निर्दिष्ट स्थान के अतिरिक्त किसी अन्य स्थान पर भरा जा सकता है। यह उदाहरण   एसयुबीआर को अब स्थान 300 पर दर्शाता है। जंप निर्देश में एड्रेस, अब 313 पर, फिर से स्थानांतरित करने की आवश्यकता है जिससे की यह एसटी, 305 के अद्यतन स्थान की तरफ इंगित कर सकता है। [4 49 305 का मिक्स मशीन प्रतिनिधित्व है]।
* (डी) जब प्रोग्राम को चलाने के लिए मेमोरी में लोड किया जाता है तो इसे लिंकर द्वारा निर्दिष्ट स्थान के अलावा किसी अन्य स्थान पर लोड किया जा सकता है। यह उदाहरण SUBR को अब स्थान 300 पर दिखाता है। जंप निर्देश में पता, अब 313 पर, फिर से स्थानांतरित करने की आवश्यकता है ताकि यह ST, 305 के अद्यतन स्थान की ओर इशारा करे। [4 49 305 का मिक्स मशीन प्रतिनिधित्व है]।


== यह भी देखें ==
== यह भी देखें ==
* लिंकर (कंप्यूटिंग)
* लिंकर (कंप्यूटिंग)
* [[पुस्तकालय (कम्प्यूटिंग)]]
* [[स्टेटिक लाइब्रेरी|लाइब्रेरी]] (कम्प्यूटिंग)
* वस्तु फ़ाइल
* आब्जेक्ट फ़ाइल
* [[पूर्वबाध्यकारी]]
* [[पूर्वबाध्यकारी]]
* [[स्टेटिक लाइब्रेरी]]
* [[स्टेटिक लाइब्रेरी]]
* स्व-स्थानांतरण
* स्व-स्थानांतरण
* स्थिति-स्वतंत्र कोड (PIC)
* स्थिति-स्वतंत्र कोड (पीआईसी)
* [[रिबेसिंग]]
* [[रिबेसिंग]]
* [[कचरा संग्रह (कंप्यूटिंग)]]
* [[कचरा संग्रह (कंप्यूटिंग)]]
* [[सूचक झूल रहा है]], पॉइंटर मॉडिफिकेशन का एक आलसी रूप
* तेज सूचक, सूचक परिवर्तन का वास्तविक प्रारूप
* [[स्थानांतरित करने योग्य वस्तु मॉड्यूल प्रारूप]]
* [[स्थानांतरित करने योग्य वस्तु मॉड्यूल प्रारूप|स्थानांतरित करने योग्य आब्जेक्ट मॉड्यूल प्रारूप]]


== संदर्भ ==
== संदर्भ ==
Line 100: Line 99:
{{Application binary interface}}
{{Application binary interface}}
{{Executables}}
{{Executables}}
[[Category: कंप्यूटर पुस्तकालय]] [[Category: असाइनमेंट संचालन]]


[[Category: Machine Translated Page]]
[[Category:CS1 Deutsch-language sources (de)]]
[[Category:CS1 errors]]
[[Category:CS1 location test]]
[[Category:Citation Style 1 templates|M]]
[[Category:Collapse templates]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite magazine]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia fully protected templates|Cite magazine]]
[[Category:Wikipedia metatemplates]]
[[Category:असाइनमेंट संचालन]]
[[Category:कंप्यूटर पुस्तकालय]]

Latest revision as of 17:06, 29 August 2023

रिलोकेशन (स्थानांतरण ) स्थिति-निर्भर कोड और प्रोग्राम के डेटा के लिए लोड एड्रेस निर्धारित करने और निर्धारित किए गए एड्रेस को प्रतिबिंबित करने के लिए कोड और डेटा को समायोजित करने की प्रक्रिया है।[1][2]मल्टीप्रोसेस प्रणाली के आने से पूर्व, और अभी भी कई एम्बेडेड प्रणाली में, वस्तुओं के एड्रेस ज्ञात स्थान से प्रारम्भ होने वाले पूर्ण एड्रेस अधिकांशतः शून्य थे। चूंकि मल्टीप्रोसेसिंग प्रणाली गतिशील प्रकार से प्रोग्राम के बीच लिंक और स्विच करते हैं, इसलिए स्थिति-स्वतंत्र कोड का उपयोग करके वस्तुओं को स्थानांतरित करने में सक्षम होना आवश्यक हो गया है। लिंकर (कंप्यूटिंग) सामान्य तौर पर प्रतीक संकल्प के संयोजन के साथ स्थानांतरण करता है, प्रोग्राम चलाने से पूर्व प्राथमिक भंडारण में वास्तविक प्रयोग करने योग्य एड्रेस के साथ प्रतीकात्मक संदर्भों या पुस्तकालय (कंप्यूटर विज्ञान) के नामों को बदलने के लिए फ़ाइलों और पुस्तकालयों को ढूंढने की प्रक्रिया होती है।

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

विभाजन

ऑब्जेक्ट फाइल (वस्तु फ़ाइल) को विभिन्न मेमोरी विभाजन प्रकारों में विभाजित किया गया है। उदाहरण सेगमेंट (खंड) में कोड खंड (.टेक्स्ट) प्रारंभिक डेटा खंड (.डेटा), अप्रराम्भिक डेटा खंड (.बीएसएस) या अन्य उपस्थित हैं


स्थानांतरण तालिका

स्थानांतरण तालिका अनुवादक (संकलक या असेंबलर (कंप्यूटर प्रोग्रामिंग)) द्वारा बनाई गई सूचक (कंप्यूटर प्रोग्रामिंग) की सूची है और बिषय या निष्पादन योग्य फ़ाइल में संग्रहीत है। तालिका में प्रत्येक प्रविष्टि, या फ़िक्सअप, बिषय कोड में पूर्ण पते के लिए सूचक (कंप्यूटर प्रोग्रामिंग) है जिसे लोडर द्वारा प्रोग्राम को स्थानांतरित करने पर बदला जाना चाहिए जिससे की यह सही स्थान को संदर्भित कर सकता है। फ़िक्सअप को पूर्ण इकाई के रूप में प्रोग्राम के स्थानांतरण का समर्थन करने के लिए डिज़ाइन किया गया है। कुछ कारणों में, तालिका में प्रत्येक फ़िक्सअप स्वयं शून्य के आधारित एड्रेस के सापेक्ष होता है, इसलिए फ़िक्सअप स्वयं को बदलना चाहिए क्योंकि लोडर तालिका के माध्यम से आगे बढ़ता है।[2]

कुछ विषय में फ़िक्सअप जो कुछ सीमाओं (जैसे खंड सीमा) को पार करता है या जो शब्द सीमा पर संरेखित नहीं है, वह विरुद्ध है और लिंकर द्वारा त्रुटि के रूप में चिन्हित किया जाता है।[3]


डॉस और 16-बिट विंडोज

सूचक दूरी (कंप्यूटर प्रोग्रामिंग) (एक्स86 मेमोरी खंड के साथ 32-बिट सूचक: ऑफ़सेट, डीओएस कंप्यूटर प्रोग्राम के लिए उपलब्ध 20-बिट 640 किलोबाइट कंप्यूटर भंडारण स्थान को संबोधित करने के लिए उपयोग किया जाता है), जो डीओएस निष्पादन योग्य (इएक्सइ) के भीतर कोड या डेटा को इंगित करता है। पूर्ण खंड नहीं हैं, क्योंकि कोड/डेटा का वास्तविक मेमोरी एड्रेस इस बात पर निर्भर करता है कि प्रोग्राम को मेमोरी में कहाँ भरा गया है और प्रोग्राम लोड होने तक यह ज्ञात नहीं है।

इसके विपरीत, खंड डीओएस इएक्सइ फ़ाइल में सापेक्ष मान हैं। निष्पादन योग्य मेमोरी में भरे होने पर इन खंड को सही करने की आवश्यकता है। इएक्सइ लोडर (कंप्यूटिंग) उन खंडों को ढूंढने के लिए स्थानांतरण तालिका का उपयोग करता है जिन्हें समायोजित करने की आवश्यकता होती है।

32-बिट विंडोज

32-बिट विंडोज ऑपरेटिंग प्रणाली के साथ, इएक्सइ फाइलों के लिए स्थानांतरण टेबल प्रदान करना अनिवार्य नहीं है, क्योंकि वे आभासी एड्रेस के रिक्त स्थान में भरी गई पहली इमेज हैं और इस तरह उनके पसंदीदा बेस एड्रेस पर भरी जाती है ।

डायनेमिक लिंक लाइब्रेरी और इएक्सइ दोनों के लिए जो एड्रेस स्पेस लेआउट रैंडमाइजेशन (एएसएलआर) में ऑप्ट इन करते हैं, विंडोज विस्टा के साथ प्रारम्भ की गई अपने कार्य में लेन वाला लघुकरण तकनीक, एक बार फिर से स्थानांतरण तालिका अनिवार्य हो जाती है क्योंकि संभावना है कि बाइनरी को पहले गतिशील प्रकार से स्थानांतरित किया जा सकता है। तथापि वे अभी भी आभासी एड्रेस स्थान में भरी गयी पहली चीज़ हैं।

64-बिट विंडोज

विंडोज विस्टा और ऊपर के संस्करण पर नेटिव 64-बिट बायनेरिज़ चलाते समय, एएसएलआर अनिवार्य है, और इस प्रकार स्थानांतरण अनुभागों को संकलक द्वारा छोड़ा नहीं जा सकता है।

यूनिक्स जैसी प्रणाली

निष्पादन योग्य और लिंक करने योग्य प्रारूप (ईएलएफ) और अधिकांशतः यूनिक्स जैसी प्रणालियों द्वारा उपयोग किए जाने वाले साझा पुस्तकालय प्रारूप में कई प्रकार के स्थानांतरण को परिभाषित करने की अनुमति मिलती है।[4]


स्थानांतरण प्रक्रिया

लिंकर ऑब्जेक्ट फ़ाइलों में खंड की जानकारी और स्थानांतरण तालिका पढ़ता है और इसके द्वारा स्थानांतरित करता है:

  • सामान्य प्रकार के सभी खंडों को उस प्रकार के खंड में विलय करना है।
  • सभी कोड (फ़ंक्शंस) और डेटा (वैश्विक चर) अद्वितीय रन टाइम एड्रेस देते हुए, प्रत्येक अनुभाग और प्रत्येक प्रतीक के लिए अद्वितीय रन टाइम एड्रेस निर्दिष्ट करना है।
  • स्थानांतरण तालिका को संशोधित करने की चर्चा करते हुए प्रतीक जिससे की वे सही रन टाइम एड्रेस को इंगित करते हैं।

उदाहरण

निम्नलिखित उदाहरण डोनाल्ड नुथ की मिक्स विषय और मिक्सल असेंबली भाषा का उपयोग करता है। सिद्धांत किसी भी वास्तुकला के लिए समान हैं, चूँकि विवरण बदल जाएगा।

  • (ए) प्रोग्राम एसयुबीआर को ऑब्जेक्ट फ़ाइल (B) बनाने के लिए संकलित किया गया है, जो मशीन कोड और असेंबलर दोनों के प्रकार में दर्शाया गया है। संकलक संकलित कोड को स्वेच्छाचरित प्रकार से स्थान पर प्रारम्भ कर सकता है, जैसा कि अधिकांशतः स्थान 1 दिखाया गया है। स्थान 13 में स्थान 5 में कथन एसटी के लिए जंप निर्देश के लिए मशीन कोड सम्मिलित है।
  • (सी) यदि एसयुबीआर बाद में अन्य कोड से जुड़ा हुआ है तो इसे 1 के अतिरिक्त किसी अन्य स्थान पर संग्रहीत किया जा सकता है। इस उदाहरण में लिंकर इसे स्थान 120 पर रखता है। जंप इंस्ट्रक्शन (निर्देश) जो अब स्थान 133 पर है, कथन एसटी के लिए 125 कोड के नए स्थान को इंगित करने के लिए 'स्थानांतरित' किया जाना चाहिए। [निर्देश में दर्शाया गया 161 मिक्स मशीन कोड 125 का प्रतिनिधित्व है]।
  • (डी) जब प्रोग्राम को चलाने के लिए मेमोरी में भरा जाता है तो इसे लिंकर द्वारा निर्दिष्ट स्थान के अतिरिक्त किसी अन्य स्थान पर भरा जा सकता है। यह उदाहरण एसयुबीआर को अब स्थान 300 पर दर्शाता है। जंप निर्देश में एड्रेस, अब 313 पर, फिर से स्थानांतरित करने की आवश्यकता है जिससे की यह एसटी, 305 के अद्यतन स्थान की तरफ इंगित कर सकता है। [4 49 305 का मिक्स मशीन प्रतिनिधित्व है]।

यह भी देखें

संदर्भ

  1. "Types of Object Code". iRMX 86 Application Loader Reference Manual (PDF). Intel. pp. 1-2–1-3. Archived (PDF) from the original on 2020-01-11. Retrieved 2020-01-11. […] Absolute code, and an absolute object module, is code that has been processed by LOC86 to run only at a specific location in memory. The Loader loads an absolute object module only into the specific location the module must occupy. Position-independent code (commonly referred to as PIC) differs from absolute code in that PIC can be loaded into any memory location. The advantage of PIC over absolute code is that PIC does not require you to reserve a specific block of memory. When the Loader loads PIC, it obtains iRMX 86 memory segments from the pool of the calling task's job and loads the PIC into the segments. A restriction concerning PIC is that, as in the PL/M-86 COMPACT model of segmentation […], it can have only one code segment and one data segment, rather than letting the base addresses of these segments, and therefore the segments themselves, vary dynamically. This means that PIC programs are necessarily less than 64K bytes in length. PIC code can be produced by means of the BIND control of LINK86. Load-time locatable code (commonly referred to as LTL code) is the third form of object code. LTL code is similar to PIC in that LTL code can be loaded anywhere in memory. However, when loading LTL code, the Loader changes the base portion of pointers so that the pointers are independent of the initial contents of the registers in the microprocessor. Because of this fixup (adjustment of base addresses), LTL code can be used by tasks having more than one code segment or more than one data segment. This means that LTL programs may be more than 64K bytes in length. FORTRAN 86 and Pascal 86 automatically produce LTL code, even for short programs. LTL code can be produced by means of the BIND control of LINK86. […]
  2. 2.0 2.1 Levine, John R. (2000) [October 1999]. "Chapter 1: Linking and Loading & Chapter 3: Object Files". Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming (1 ed.). San Francisco, USA: Morgan Kaufmann. p. 5. ISBN 1-55860-496-0. OCLC 42413382. Archived from the original on 2012-12-05. Retrieved 2020-01-12. Code: [1][2] Errata: [3]
  3. Borland (1999-09-01) [1998-07-02]. "Borland article #15961: Coping with 'Fixup Overflow' messages". community.borland.com. Technical Information Database - Product: Borland C++ 3.1. TI961C.txt #15961. Archived from the original on 2008-07-07. Retrieved 2007-01-15.
  4. "Executable and Linkable Format (ELF)" (PDF). skyfree.org. Tool Interface Standards (TIS) Portable Formats Specification, Version 1.1. Archived (PDF) from the original on 2019-12-24. Retrieved 2018-10-01.


अग्रिम पठन