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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

यह भी देखें

 * लिंकर (कंप्यूटिंग)
 * लाइब्रेरी (कम्प्यूटिंग)
 * आब्जेक्ट फ़ाइल
 * पूर्वबाध्यकारी
 * स्टेटिक लाइब्रेरी
 * स्व-स्थानांतरण
 * स्थिति-स्वतंत्र कोड (पीआईसी)
 * रिबेसिंग
 * कचरा संग्रह (कंप्यूटिंग)
 * तेज सूचक, सूचक परिवर्तन का वास्तविक प्रारूप
 * स्थानांतरित करने योग्य आब्जेक्ट मॉड्यूल प्रारूप

अग्रिम पठन

 * (3 pages) (NB. Describes a relocatable hex format by Mostek.)
 * (8 pages) (NB. Describes a relocatable hex format by TDL.)
 * . Originally presented at: (609 pages). (This "resize" method, named page boundary relocation, could be applied statically to a CP/M-80 disk image using MOVCPM in order to maximize the TPA for programs to run. It was also utilized dynamically by the CP/M debugger Dynamic Debugging Tool (DDT) to relocate itself into higher memory. The same approach was independently developed by Bruce H. Van Natta of IMS Associates to produce relocatable PL/M code. As paragraph boundary relocation, another variant of this method was later utilized by dynamically HMA self-relocating TSRs like KEYB, SHARE, and NLSFUNC under DR DOS 6.0 and higher. A much more sophisticated and byte-level granular method based on a somewhat similar approach was independently conceived and implemented by Matthias R. Paul and Axel C. Frinke for their dynamic dead-code elimination to dynamically minimize the runtime footprint of resident drivers and TSRs (like FreeKEYB).)
 * (33 pages)
 * (2+xiv+270+6 pages)
 * 
 * 
 * 
 * (2+xiv+270+6 pages)
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 


 * 
 * 
 * 
 * 
 *