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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

यह भी देखें

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

अग्रिम पठन

 * (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)
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 


 * 
 * 
 * 
 * 
 *