लोडर (कंप्यूटिंग): Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Part of an operating system}} | {{Short description|Part of an operating system}} | ||
[[कम्प्यूटिंग|परिकलक प्रणाली]] में एक लोडर (भारक) एक [[ऑपरेटिंग सिस्टम|प्रचालन]] [[कम्प्यूटिंग|प्रणाली]] का एक हिस्सा होता है जो [[कंप्यूटर प्रोग्राम|प्रोग्राम]] और [[कम्प्यूटिंग|परिकलक]] संग्रह को लोड करने के लिए उत्तरदायी होता है। यह एक प्रोग्राम शुरू करने की प्रक्रिया में आवश्यक चरणों में से एक है, क्योंकि यह प्रोग्राम को | [[कम्प्यूटिंग|परिकलक प्रणाली]] में एक लोडर (भारक) एक [[ऑपरेटिंग सिस्टम|प्रचालन]] [[कम्प्यूटिंग|प्रणाली]] का एक हिस्सा होता है जो [[कंप्यूटर प्रोग्राम|प्रोग्राम]] और [[कम्प्यूटिंग|परिकलक]] संग्रह को लोड करने के लिए उत्तरदायी होता है। यह एक प्रोग्राम शुरू करने की प्रक्रिया में आवश्यक चरणों में से एक है, क्योंकि यह प्रोग्राम को मेमोरी में रखता है और उन्हें निष्पादन के लिए तैयार करता है। किसी प्रोग्राम को लोड करने में [[कंप्यूटर प्रोग्राम|स्मृति- प्रतिचित्रण]] या मेमोरी में प्रोग्राम निर्देशों वाली [[कंप्यूटर प्रोग्राम|निष्पादन योग्य]] संचिका की सामग्री की प्रतिलिपि बनाना शामिल है और फिर निष्पादन योग्य को चलाने के लिए तैयार करने के लिए अन्य आवश्यक प्रारंभिक संचालन करना शामिल है। एक बार लोड हो जाने के बाद, [[ऑपरेटिंग सिस्टम|प्रचालन]] [[कम्प्यूटिंग|प्रणाली]] लोड किए गए प्रोग्राम कोड पर नियंत्रण पास करके प्रोग्राम शुरू करता हैI | ||
प्रोग्राम लोडिंग का समर्थन करने वाले सभी प्रचालन प्रणाली में लोडर होते हैं, अत्यधिक विशिष्ट परिकलक प्रणाली को छोड़कर, जिनके पास केवल विशेष प्रोग्राम का एक निश्चित सेट होता है। [[अंतः स्थापित प्रणाली|अंत:स्थापित प्रणाली]] में आमतौर पर लोडर नहीं होते हैं, और इसके | प्रोग्राम लोडिंग का समर्थन करने वाले सभी प्रचालन प्रणाली में लोडर होते हैं, अत्यधिक विशिष्ट परिकलक प्रणाली को छोड़कर, जिनके पास केवल विशेष प्रोग्राम का एक निश्चित सेट होता है। [[अंतः स्थापित प्रणाली|अंत:स्थापित प्रणाली]] में आमतौर पर लोडर नहीं होते हैं, और इसके जगह, कोड को सीधे ROM (रोम) या इसी तरह से निष्पादित किया जाता है। प्रचालन प्रणाली को स्वयं लोड करने के लिए, [[बूटिंग]] के भाग के रूप में, एक विशेष [[बूट लोडर|बूट]] लोडर का उपयोग किया जाता है। कई प्रचालन प्रणाली में, लोडर स्थायी रूप से मेमोरी में रहता है, हालांकि कुछ प्रचालन प्रणाली जो की [[आभासी मेमोरी|आभासी]] मेमोरी का समर्थन करते हैं, लोडर को मेमोरी के उस क्षेत्र में स्थित होने की अनुमति दे सकते हैं जो [[पेजिंग|पेजेबल]] होते है। | ||
वर्चुअल मेमोरी का समर्थन करने वाले प्रचालन प्रणाली के मामले में, लोडर वास्तव में निष्पादन योग्य फ़ाइलों की सामग्री को मेमोरी में प्रतिलिपि नहीं कर सकता है, बल्कि वर्चुअल मेमोरी सबसिस्टम को केवल यह घोषित कर सकता है कि चल रहे प्रोग्राम के कोड और संबंधित निष्पादन योग्य फ़ाइल की सामग्री को शामिल करने के लिए आवंटित मेमोरी के क्षेत्र के बीच मैपिंग है। ([[मेमोरी-मैप की गई फ़ाइल|स्मृति-प्रतिचित्र किया गया दस्तावेज़]] देखें।) वर्चुअल मेमोरी उपसमूह को तब अवगत कराया जाता है कि मेमोरी के उस क्षेत्र वाले पृष्ठों को मांग पर भरने की आवश्यकता होती है यदि और जब प्रोग्राम निष्पादन वास्तव में अपूर्ण मेमोरी के उन क्षेत्रों को हिट करता है। इसका मतलब यह हो सकता है कि प्रोग्राम के कोड के कुछ हिस्सों को वास्तव में मेमोरी में तब तक प्रतिलिपि नहीं किया जाता है जब तक कि उनका वास्तव में उपयोग नहीं किया जाता है, और अप्रयुक्त कोड को कभी भी मेमोरी में लोड नहीं किया जा सकता है। | |||
== जिम्मेदारियां == | == जिम्मेदारियां == | ||
[[यूनिक्स]] में, लोडर [[सिस्टम कॉल|प्रणाली | [[यूनिक्स]] में, लोडर [[सिस्टम कॉल|प्रणाली आह्वान]] <code>निष्पादन()</code>के लिये [[सिस्टम कॉल|प्रबंधकर्ता]] है।<ref>{{cite web |url=http://www.opengroup.org/onlinepubs/000095399/functions/exec.html |title=exec |publisher=The Open Group |work=The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition |access-date=2008-06-23}}</ref> यूनिक्स लोडर के कार्यों में शामिल हैं: | ||
# सत्यापन (अनुमतियां, | # सत्यापन (अनुमतियां, मेमोरी आवश्यकताएं आदि); | ||
# [[कंप्यूटर प्रोग्राम|स्मृति]]-[[कंप्यूटर प्रोग्राम|प्रतिचित्रण]] निष्पादन योग्य वस्तु डिस्क से [[कंप्यूटर प्रोग्राम|मुख्य | # [[कंप्यूटर प्रोग्राम|स्मृति]]-[[कंप्यूटर प्रोग्राम|प्रतिचित्रण]] निष्पादन योग्य वस्तु डिस्क से [[कंप्यूटर प्रोग्राम|मुख्य]] मेमोरी तक; | ||
# | # वर्चुअल मेमोरी में [[कमांड-लाइन तर्क|आदेश पंक्ति तर्कों]] की प्रतिलिपि बनाना; | ||
# आरंभ [[प्रोसेसर रजिस्टर|पंजिका]] (जैसे, क्रमबद्ध ढेर सूचक); | # आरंभ [[प्रोसेसर रजिस्टर|पंजिका]] (जैसे, क्रमबद्ध ढेर सूचक); | ||
# प्रोग्राम प्रवेश स्थान (<code>आरम्भ</code>) पर जाएं। | # प्रोग्राम प्रवेश स्थान (<code>आरम्भ</code>) पर जाएं। | ||
Line 17: | Line 17: | ||
[[Microsoft Windows|माइक्रोसॉफ्ट विंडोज़]] 7 और बाद में, लोडर ntdll.dll में <code>LdrInitializeThunk</code> निहित होता है, जो निम्न कार्य करता है: | [[Microsoft Windows|माइक्रोसॉफ्ट विंडोज़]] 7 और बाद में, लोडर ntdll.dll में <code>LdrInitializeThunk</code> निहित होता है, जो निम्न कार्य करता है: | ||
# डीएलएल (DLL) में ही संरचनाओं का | # डीएलएल (DLL) में ही संरचनाओं का आरंभीकरण (अर्थात [[महत्वपूर्ण खंड]], मॉड्यूल सूची)); | ||
# लोड करने के लिए निष्पादन योग्य का सत्यापन; | # लोड करने के लिए निष्पादन योग्य का सत्यापन; | ||
# एक [[गतिशील स्मृति आवंटन|ढेर]] | # एक [[गतिशील स्मृति आवंटन|ढेर]] का निर्माण (प्रकार्य <code>RtlCreateHeap</code>के माध्यम से); | ||
# पर्यावरण | # पर्यावरण चर ब्लॉक और पाथ ब्लॉक का आवंटन; | ||
# निष्पादन योग्य और | # निष्पादन योग्य और NTDLL को मॉड्यूल सूची में जोड़ना (एक [[कंप्यूटर प्रोग्राम|दोगुनी]]-[[कंप्यूटर प्रोग्राम|श्रृंखलित]] [[प्रोसेसर रजिस्टर|सूची]]); | ||
# कई महत्वपूर्ण कार्यों को प्राप्त करने के लिए [[कंप्यूटर प्रोग्राम|KERNEL32.DLL]] लोड करना, उदाहरण के लिए <code>BaseThreadInitThunk</code>; | # कई महत्वपूर्ण कार्यों को प्राप्त करने के लिए [[कंप्यूटर प्रोग्राम|KERNEL32.DLL]] लोड करना, उदाहरण के लिए <code>BaseThreadInitThunk</code>; | ||
# निष्पादन योग्य के आयात | # निष्पादन योग्य के आयात (यानी [[डायनामिक-लिंक लाइब्रेरी]]) को दोबारा लोड करना (आयात के आयात, उनके आयात आदि की जांच करें); | ||
# डिबग प्रणाली में, प्रणाली विराम बिंदु बढाएँ; | # डिबग प्रणाली में, प्रणाली विराम बिंदु बढाएँ; | ||
# डीएलएलएस (DLLs) की शुरूआत; | # डीएलएलएस (DLLs) की शुरूआत; | ||
# कचरा संग्रहण; | # कचरा संग्रहण; | ||
# लोडर कार्य को दिए गए संदर्भ मापदण्ड पर<code> | # लोडर कार्य को दिए गए संदर्भ मापदण्ड पर<code>NtContinu</code> आह्वान करना (यानी <code>RtlUserThreadStart</code> पर चले जाना, जो निष्पादन योग्य प्रारंभ करेगा) | ||
== लोडर स्थानांतरित करना == | == लोडर स्थानांतरित करना == | ||
कुछ प्रचालन प्रणाली को [[कंप्यूटर प्रोग्राम|लोडर को]] [[कंप्यूटर प्रोग्राम|स्थानांतरित]] करने की आवश्यकता होती है, | कुछ प्रचालन प्रणाली को [[कंप्यूटर प्रोग्राम|लोडर को]] [[कंप्यूटर प्रोग्राम|स्थानांतरित]] करने की आवश्यकता होती है, उस पते में भिन्नता की भरपाई के लिए जो निष्पादन योग्य में पतों (पॉइंटर्स) को समायोजित करता है, जिस पर लोडिंग शुरू होती है। प्रचालन प्रणाली जिन्हें लोडर स्थानांतरित करने की आवश्यकता होती है, वे हैं जिनमें एक प्रोग्राम हमेशा एक ही पता स्थान पर लोड नहीं होता है और जिसमें प्रोग्राम [[Index.php?title=आधार पता|आधार पता]] से अनुचित्रित होने के स्थान पर संकेत पूर्ण पते होते हैं। कुछ जाने-माने उदाहरण हैं IBM का OS/360 उनके सिस्टम/360 मेनफ्रेम के लिए, और इसके वंशज, जिनमें z/आर्किटेक्चर मेनफ्रेम के लिए z/OS शामिल है। | ||
===ओएस/360 और व्युत्पन्न | ===ओएस/360 और व्युत्पन्न === | ||
OS/360 और वंशज प्रणालियों में, (विशेषाधिकार प्राप्त) प्रचालन प्रणाली सुविधा को IEWFETCH कहा जाता है,<ref>{{cite book|last=IBM Corporation|title=IBM OS MVT Supervisor|year=1972|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/plm/GY28-6659-6_MVT_Supervisor_PLM_Release_21_Mar72.pdf}}</ref> और OS पर्यवेक्षक का एक आंतरिक घटक है, जबकि (गैर-विशेषाधिकार प्राप्त) लोडर | OS/360 और वंशज प्रणालियों में, (विशेषाधिकार प्राप्त) प्रचालन प्रणाली सुविधा को IEWFETCH कहा जाता है,<ref>{{cite book|last=IBM Corporation|title=IBM OS MVT Supervisor|year=1972|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/plm/GY28-6659-6_MVT_Supervisor_PLM_Release_21_Mar72.pdf}}</ref> और OS पर्यवेक्षक का एक आंतरिक घटक है, जबकि (गैर-विशेषाधिकार प्राप्त) लोडर एप्लिकेशन एक ही तरह के कई कार्य कर सकता है, साथ ही संयोजन सम्पादक के भी, और OS पर्यवेक्षक के लिए पूरी तरह से बाहरी है (हालांकि यह निश्चित रूप से कई पर्यवेक्षक सेवाओं का उपयोग करता है)। | ||
IEWFETCH | IEWFETCH अत्यधिक विशिष्ट [[चैनल प्रोग्राम]] का उपयोग करता है, और सैद्धांतिक रूप से DASD मीडिया की एक क्रांति (लगभग 16.6 ms अधिकतम, 8.3 ms औसत, "लीगेसी" 3,600 rpm ड्राइव पर) के भीतर एक पूरे निष्पादन योग्य को लोड करना और स्थानांतरित करना संभव है। लोड मॉड्यूल के लिए जो आकार में एक प्रकार से अधिक है, मीडिया की क्रांति खोए बिना पूरे मॉड्यूल को लोड करना और स्थानांतरित करना भी संभव करते है। | ||
IEWFETCH में तथाकथित अधिचित्रित संरचनाओं के लिए | IEWFETCH में तथाकथित अधिचित्रित संरचनाओं के लिए सुविधाओं को भी शामिल करता है, और जो न्यूनतम मेमोरी अनुखंड में संभावित रूप से बहुत बड़े निष्पादन योग्य चलाने की सुविधा प्रदान करती हैं (OS के कुछ संस्करणों पर 44 KB जितना छोटा, लेकिन 88 KB और 128 KB अधिक सामान्य हैं)। | ||
OS का [[कर्नेल (ऑपरेटिंग सिस्टम)|केन्द्रक]] (पर्यवेक्षक का हमेशा निवासी हिस्सा) स्वयं इस तरह से स्वरूपित होता है जो IEWFETCH के एक अनावृत संस्करण के साथ संगत होता है। सामान्य निष्पादकों के विपरीत, OS का केन्द्रक "प्रकीर्ण भारित" है: केन्द्रक के कुछ हिस्सों को | OS का [[कर्नेल (ऑपरेटिंग सिस्टम)|केन्द्रक]] (पर्यवेक्षक का हमेशा निवासी हिस्सा) स्वयं इस तरह से स्वरूपित होता है जो IEWFETCH के एक अनावृत संस्करण के साथ संगत होता है। सामान्य निष्पादकों के विपरीत, OS का केन्द्रक "प्रकीर्ण भारित" है: केन्द्रक के कुछ हिस्सों को मेमोरी के विभिन्न भागों में लोड किया जाता है; विशेष रूप से, कुछ प्रणाली तालिकाओं को प्रारंभिक 64 KB के अंतर्गत होना चाहिए, जबकि अन्य तालिकाएँ और कोड कहीं और भी स्थित हो सकते हैं। | ||
प्रणाली के [[कंप्यूटर प्रोग्राम|संयोजन संपादक]] उपयोग का नाम IEWL है।<ref>{{cite book|last=IBM Corporation|title=IBM OS Linkage Editor and Loader|year=1972|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf}}</ref> IEWL का मुख्य कार्य लोड | प्रणाली के [[कंप्यूटर प्रोग्राम|संयोजन संपादक]] उपयोग का नाम IEWL है।<ref>{{cite book|last=IBM Corporation|title=IBM OS Linkage Editor and Loader|year=1972|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/ibm/360/os/R21.0_Mar72/GC28-6538-9_OS_Linkage_Editor_and_Loader_Release_21_Jan72.pdf}}</ref> IEWL का मुख्य कार्य लोड मॉड्यूल (निष्पादन योग्य प्रोग्राम) और उद्देश्य मॉड्यूल (जैसे, कोडांतरक और संकलक से निर्गत) को "स्वतः आह्वान" के साथ पुस्तकालयों (उच्च-स्तरीय भाषा "अंतर्निहित कार्य") में संबद्ध करना है, जिसे IEWFETCH द्वारा सबसे कुशलतापूर्वक लोड किया जा सकता है। बड़ी संख्या में संपादन विकल्प हैं, लेकिन एक पारंपरिक अनुप्रयोग के लिए इनमें से कुछ ही आमतौर पर नियोजित होते हैं। | ||
लोड | लोड मॉड्यूल प्रारूप में प्रारंभिक "पाठ अभिलेख" शामिल होता है, जिसके तुरंत बाद उस पाठ अभिलेख के लिए "स्थानांतरण और/या नियंत्रण अभिलेख" होता है, इसके बाद पाठ रिकॉर्ड और स्थानांतरण और/या नियंत्रण रिकॉर्ड जोड़े के अंत तक, मॉड्यूल के अंत तक होता है। | ||
पाठ अभिलेख | पाठ अभिलेख आमतौर पर बहुत बड़े होते हैं; स्थानांतरण और/या नियंत्रण रिकॉर्ड छोटे हैं क्योंकि IEWFETCH के तीन स्थानांतरण और/या नियंत्रण रिकॉर्ड बफ़र्स 260 बाइट्स पर तय किए गए हैं (छोटे स्थानांतरण और/या नियंत्रण रिकॉर्ड निश्चित रूप से संभव हैं, लेकिन 260 बाइट्स अधिकतम संभव हैं, और IEWL यह सुनिश्चित करता है कि यह अगले पाठ अभिलेख से पहले आवश्यकतानुसार अतिरिक्त स्थानांतरण अभिलेख सम्मिलित करके सीमा का अनुपालन किया जाता है; इस विशेष मामले में, अभिलेख का क्रम हो सकता है: पाठ अभिलेख, स्थानांतरण रिकॉर्ड, नियंत्रण अभिलेख, पाठ अभिलेख)। | ||
स्थानांतरण और/या नियंत्रण | स्थानांतरण और/या नियंत्रण रिकॉर्ड बफ़र के भीतर एक विशेष बाइट का उपयोग "अक्षम बिट स्पिन" संचार क्षेत्र के रूप में किया जाता है, और इसे एक अद्वितीय मान के लिए प्रारंभ किया जाता है। उस स्थानांतरण और/या नियंत्रण रिकॉर्ड के लिए रीड सीसीडब्ल्यू में प्रोग्राम नियंत्रित रूकावट बिट सेट है। संसाधक को सूचित किया जाता है जब उस सीसीडब्ल्यू को एक विशेष [[कंप्यूटर प्रोग्राम|आईओएस]] निकास के माध्यम से चैनल द्वारा अभिगम किया जाता है। इस बिंदु पर संसाधक "अक्षम अंश घुमाव" परिपथ (कभी-कभी "दुनिया में सबसे छोटा परिपथ" कहा जाता है) में प्रवेश करता है। एक बार जब वह बाइट अपने प्रारंभिक मूल्य से बदल जाता है, तो सीपीयू अंश घुमाव से बाहर निकल जाता है, और स्थानांतरण होता है और स्थानांतरण और/या नियंत्रण अभिलेख और अगले पाठ अभिलेख के बीच संचार माध्यम "अंतर" के दौरान होता है। यदि स्थानांतरण अगले अभिलेख से पहले समाप्त हो जाता है, तो पढ़नें के बाद NOP CCW को TIC में बदल दिया जाएगा, और लोडिंग और स्थानांतरित करना अगले बफर का उपयोग करके आगे बढ़ेगा; यदि नहीं, तो चैनल NOP CCW पर रुकेगा, जब तक कि IEWFETCH द्वारा इसे अन्य विशेष IOS निकास के माध्यम से पुनः आरंभ नहीं किया जाता है। तीन बफ़र एक सतत गोलाकार कतार में हैं, प्रत्येक अपने अगले की ओर इशारा करता है, और अंतिम पहले की ओर इशारा करता है, और तीन बफ़र्स को लगातार लोडिंग और स्थानांतरित करने के रूप में पुन: उपयोग किया जाता है। | ||
IEWFETCH, इस प्रकार, किसी भी व्यावहारिक आकार के लोड | IEWFETCH, इस प्रकार, किसी भी व्यावहारिक आकार के लोड मॉड्यूल को लोड और स्थानांतरित कर सकता है, और न्यूनतम संभव समय में। | ||
== गतिशील संयोजक == | == गतिशील संयोजक == | ||
[[गतिशील लिंकर|गतिशील]] [[गतिशील लिंकर|संयोजक]] लोडर एक अन्य प्रकार का लोडर है जो पहले से लोड चल रहे प्रोग्रामों के लिए साझा पुस्तकालय (जैसे .so दस्तावेजों .dll दस्तावेजों या .dylib दस्तावेजों) को लोड और संयोजित करता है। | [[गतिशील लिंकर|गतिशील]] [[गतिशील लिंकर|संयोजक]] लोडर एक अन्य प्रकार का लोडर है जो पहले से लोड चल रहे प्रोग्रामों के लिए साझा पुस्तकालय (जैसे .so दस्तावेजों .dll दस्तावेजों या .dylib दस्तावेजों) को लोड और संयोजित करता है। | ||
जहां इस तरह के साझा पुस्तकालयों को कई प्रक्रियाओं द्वारा साझा किया जा सकता है, साझा | जहां इस तरह के साझा पुस्तकालयों को कई प्रक्रियाओं द्वारा साझा किया जा सकता है, साझा कोड की केवल एक प्रति संभवतः प्रत्येक प्रक्रिया के पता स्थान में एक अलग (आभासी) पते पर दिखाई दे रही है, साझा पुस्तकालय में कोड को स्थानांतरित करने योग्य होना आवश्यक है, अर्थात पुस्तकालय संपूर्ण में केवल स्व-संबंधी या कूटखंड आधार-सापेक्ष आंतरिक पतों का उपयोग करना चाहिए। कुछ प्रोसेसर के पास निर्देश होते हैं जो इसे सुविधाजनक बनाने के लिए स्व-सापेक्ष कोड-संदर्भों का उपयोग कर सकते हैं। | ||
== यह भी देखें == | == यह भी देखें == | ||
Line 65: | Line 65: | ||
.[[गतिशील]] [[बन्धन|बन्धन (संगणन)]] | .[[गतिशील]] [[बन्धन|बन्धन (संगणन)]] | ||
.[[मृत|गतिशील मृत | .[[मृत|गतिशील मृत कोडउन्मूलन]] | ||
.[[गतिशील]] [[प्रेषण]] | .[[गतिशील]] [[प्रेषण]] |
Revision as of 19:40, 13 April 2023
परिकलक प्रणाली में एक लोडर (भारक) एक प्रचालन प्रणाली का एक हिस्सा होता है जो प्रोग्राम और परिकलक संग्रह को लोड करने के लिए उत्तरदायी होता है। यह एक प्रोग्राम शुरू करने की प्रक्रिया में आवश्यक चरणों में से एक है, क्योंकि यह प्रोग्राम को मेमोरी में रखता है और उन्हें निष्पादन के लिए तैयार करता है। किसी प्रोग्राम को लोड करने में स्मृति- प्रतिचित्रण या मेमोरी में प्रोग्राम निर्देशों वाली निष्पादन योग्य संचिका की सामग्री की प्रतिलिपि बनाना शामिल है और फिर निष्पादन योग्य को चलाने के लिए तैयार करने के लिए अन्य आवश्यक प्रारंभिक संचालन करना शामिल है। एक बार लोड हो जाने के बाद, प्रचालन प्रणाली लोड किए गए प्रोग्राम कोड पर नियंत्रण पास करके प्रोग्राम शुरू करता हैI
प्रोग्राम लोडिंग का समर्थन करने वाले सभी प्रचालन प्रणाली में लोडर होते हैं, अत्यधिक विशिष्ट परिकलक प्रणाली को छोड़कर, जिनके पास केवल विशेष प्रोग्राम का एक निश्चित सेट होता है। अंत:स्थापित प्रणाली में आमतौर पर लोडर नहीं होते हैं, और इसके जगह, कोड को सीधे ROM (रोम) या इसी तरह से निष्पादित किया जाता है। प्रचालन प्रणाली को स्वयं लोड करने के लिए, बूटिंग के भाग के रूप में, एक विशेष बूट लोडर का उपयोग किया जाता है। कई प्रचालन प्रणाली में, लोडर स्थायी रूप से मेमोरी में रहता है, हालांकि कुछ प्रचालन प्रणाली जो की आभासी मेमोरी का समर्थन करते हैं, लोडर को मेमोरी के उस क्षेत्र में स्थित होने की अनुमति दे सकते हैं जो पेजेबल होते है।
वर्चुअल मेमोरी का समर्थन करने वाले प्रचालन प्रणाली के मामले में, लोडर वास्तव में निष्पादन योग्य फ़ाइलों की सामग्री को मेमोरी में प्रतिलिपि नहीं कर सकता है, बल्कि वर्चुअल मेमोरी सबसिस्टम को केवल यह घोषित कर सकता है कि चल रहे प्रोग्राम के कोड और संबंधित निष्पादन योग्य फ़ाइल की सामग्री को शामिल करने के लिए आवंटित मेमोरी के क्षेत्र के बीच मैपिंग है। (स्मृति-प्रतिचित्र किया गया दस्तावेज़ देखें।) वर्चुअल मेमोरी उपसमूह को तब अवगत कराया जाता है कि मेमोरी के उस क्षेत्र वाले पृष्ठों को मांग पर भरने की आवश्यकता होती है यदि और जब प्रोग्राम निष्पादन वास्तव में अपूर्ण मेमोरी के उन क्षेत्रों को हिट करता है। इसका मतलब यह हो सकता है कि प्रोग्राम के कोड के कुछ हिस्सों को वास्तव में मेमोरी में तब तक प्रतिलिपि नहीं किया जाता है जब तक कि उनका वास्तव में उपयोग नहीं किया जाता है, और अप्रयुक्त कोड को कभी भी मेमोरी में लोड नहीं किया जा सकता है।
जिम्मेदारियां
यूनिक्स में, लोडर प्रणाली आह्वान निष्पादन()
के लिये प्रबंधकर्ता है।[1] यूनिक्स लोडर के कार्यों में शामिल हैं:
- सत्यापन (अनुमतियां, मेमोरी आवश्यकताएं आदि);
- स्मृति-प्रतिचित्रण निष्पादन योग्य वस्तु डिस्क से मुख्य मेमोरी तक;
- वर्चुअल मेमोरी में आदेश पंक्ति तर्कों की प्रतिलिपि बनाना;
- आरंभ पंजिका (जैसे, क्रमबद्ध ढेर सूचक);
- प्रोग्राम प्रवेश स्थान (
आरम्भ
) पर जाएं।
माइक्रोसॉफ्ट विंडोज़ 7 और बाद में, लोडर ntdll.dll में LdrInitializeThunk
निहित होता है, जो निम्न कार्य करता है:
- डीएलएल (DLL) में ही संरचनाओं का आरंभीकरण (अर्थात महत्वपूर्ण खंड, मॉड्यूल सूची));
- लोड करने के लिए निष्पादन योग्य का सत्यापन;
- एक ढेर का निर्माण (प्रकार्य
RtlCreateHeap
के माध्यम से); - पर्यावरण चर ब्लॉक और पाथ ब्लॉक का आवंटन;
- निष्पादन योग्य और NTDLL को मॉड्यूल सूची में जोड़ना (एक दोगुनी-श्रृंखलित सूची);
- कई महत्वपूर्ण कार्यों को प्राप्त करने के लिए KERNEL32.DLL लोड करना, उदाहरण के लिए
BaseThreadInitThunk
; - निष्पादन योग्य के आयात (यानी डायनामिक-लिंक लाइब्रेरी) को दोबारा लोड करना (आयात के आयात, उनके आयात आदि की जांच करें);
- डिबग प्रणाली में, प्रणाली विराम बिंदु बढाएँ;
- डीएलएलएस (DLLs) की शुरूआत;
- कचरा संग्रहण;
- लोडर कार्य को दिए गए संदर्भ मापदण्ड पर
NtContinu
आह्वान करना (यानीRtlUserThreadStart
पर चले जाना, जो निष्पादन योग्य प्रारंभ करेगा)
लोडर स्थानांतरित करना
कुछ प्रचालन प्रणाली को लोडर को स्थानांतरित करने की आवश्यकता होती है, उस पते में भिन्नता की भरपाई के लिए जो निष्पादन योग्य में पतों (पॉइंटर्स) को समायोजित करता है, जिस पर लोडिंग शुरू होती है। प्रचालन प्रणाली जिन्हें लोडर स्थानांतरित करने की आवश्यकता होती है, वे हैं जिनमें एक प्रोग्राम हमेशा एक ही पता स्थान पर लोड नहीं होता है और जिसमें प्रोग्राम आधार पता से अनुचित्रित होने के स्थान पर संकेत पूर्ण पते होते हैं। कुछ जाने-माने उदाहरण हैं IBM का OS/360 उनके सिस्टम/360 मेनफ्रेम के लिए, और इसके वंशज, जिनमें z/आर्किटेक्चर मेनफ्रेम के लिए z/OS शामिल है।
ओएस/360 और व्युत्पन्न
OS/360 और वंशज प्रणालियों में, (विशेषाधिकार प्राप्त) प्रचालन प्रणाली सुविधा को IEWFETCH कहा जाता है,[2] और OS पर्यवेक्षक का एक आंतरिक घटक है, जबकि (गैर-विशेषाधिकार प्राप्त) लोडर एप्लिकेशन एक ही तरह के कई कार्य कर सकता है, साथ ही संयोजन सम्पादक के भी, और OS पर्यवेक्षक के लिए पूरी तरह से बाहरी है (हालांकि यह निश्चित रूप से कई पर्यवेक्षक सेवाओं का उपयोग करता है)।
IEWFETCH अत्यधिक विशिष्ट चैनल प्रोग्राम का उपयोग करता है, और सैद्धांतिक रूप से DASD मीडिया की एक क्रांति (लगभग 16.6 ms अधिकतम, 8.3 ms औसत, "लीगेसी" 3,600 rpm ड्राइव पर) के भीतर एक पूरे निष्पादन योग्य को लोड करना और स्थानांतरित करना संभव है। लोड मॉड्यूल के लिए जो आकार में एक प्रकार से अधिक है, मीडिया की क्रांति खोए बिना पूरे मॉड्यूल को लोड करना और स्थानांतरित करना भी संभव करते है।
IEWFETCH में तथाकथित अधिचित्रित संरचनाओं के लिए सुविधाओं को भी शामिल करता है, और जो न्यूनतम मेमोरी अनुखंड में संभावित रूप से बहुत बड़े निष्पादन योग्य चलाने की सुविधा प्रदान करती हैं (OS के कुछ संस्करणों पर 44 KB जितना छोटा, लेकिन 88 KB और 128 KB अधिक सामान्य हैं)।
OS का केन्द्रक (पर्यवेक्षक का हमेशा निवासी हिस्सा) स्वयं इस तरह से स्वरूपित होता है जो IEWFETCH के एक अनावृत संस्करण के साथ संगत होता है। सामान्य निष्पादकों के विपरीत, OS का केन्द्रक "प्रकीर्ण भारित" है: केन्द्रक के कुछ हिस्सों को मेमोरी के विभिन्न भागों में लोड किया जाता है; विशेष रूप से, कुछ प्रणाली तालिकाओं को प्रारंभिक 64 KB के अंतर्गत होना चाहिए, जबकि अन्य तालिकाएँ और कोड कहीं और भी स्थित हो सकते हैं।
प्रणाली के संयोजन संपादक उपयोग का नाम IEWL है।[3] IEWL का मुख्य कार्य लोड मॉड्यूल (निष्पादन योग्य प्रोग्राम) और उद्देश्य मॉड्यूल (जैसे, कोडांतरक और संकलक से निर्गत) को "स्वतः आह्वान" के साथ पुस्तकालयों (उच्च-स्तरीय भाषा "अंतर्निहित कार्य") में संबद्ध करना है, जिसे IEWFETCH द्वारा सबसे कुशलतापूर्वक लोड किया जा सकता है। बड़ी संख्या में संपादन विकल्प हैं, लेकिन एक पारंपरिक अनुप्रयोग के लिए इनमें से कुछ ही आमतौर पर नियोजित होते हैं।
लोड मॉड्यूल प्रारूप में प्रारंभिक "पाठ अभिलेख" शामिल होता है, जिसके तुरंत बाद उस पाठ अभिलेख के लिए "स्थानांतरण और/या नियंत्रण अभिलेख" होता है, इसके बाद पाठ रिकॉर्ड और स्थानांतरण और/या नियंत्रण रिकॉर्ड जोड़े के अंत तक, मॉड्यूल के अंत तक होता है।
पाठ अभिलेख आमतौर पर बहुत बड़े होते हैं; स्थानांतरण और/या नियंत्रण रिकॉर्ड छोटे हैं क्योंकि IEWFETCH के तीन स्थानांतरण और/या नियंत्रण रिकॉर्ड बफ़र्स 260 बाइट्स पर तय किए गए हैं (छोटे स्थानांतरण और/या नियंत्रण रिकॉर्ड निश्चित रूप से संभव हैं, लेकिन 260 बाइट्स अधिकतम संभव हैं, और IEWL यह सुनिश्चित करता है कि यह अगले पाठ अभिलेख से पहले आवश्यकतानुसार अतिरिक्त स्थानांतरण अभिलेख सम्मिलित करके सीमा का अनुपालन किया जाता है; इस विशेष मामले में, अभिलेख का क्रम हो सकता है: पाठ अभिलेख, स्थानांतरण रिकॉर्ड, नियंत्रण अभिलेख, पाठ अभिलेख)।
स्थानांतरण और/या नियंत्रण रिकॉर्ड बफ़र के भीतर एक विशेष बाइट का उपयोग "अक्षम बिट स्पिन" संचार क्षेत्र के रूप में किया जाता है, और इसे एक अद्वितीय मान के लिए प्रारंभ किया जाता है। उस स्थानांतरण और/या नियंत्रण रिकॉर्ड के लिए रीड सीसीडब्ल्यू में प्रोग्राम नियंत्रित रूकावट बिट सेट है। संसाधक को सूचित किया जाता है जब उस सीसीडब्ल्यू को एक विशेष आईओएस निकास के माध्यम से चैनल द्वारा अभिगम किया जाता है। इस बिंदु पर संसाधक "अक्षम अंश घुमाव" परिपथ (कभी-कभी "दुनिया में सबसे छोटा परिपथ" कहा जाता है) में प्रवेश करता है। एक बार जब वह बाइट अपने प्रारंभिक मूल्य से बदल जाता है, तो सीपीयू अंश घुमाव से बाहर निकल जाता है, और स्थानांतरण होता है और स्थानांतरण और/या नियंत्रण अभिलेख और अगले पाठ अभिलेख के बीच संचार माध्यम "अंतर" के दौरान होता है। यदि स्थानांतरण अगले अभिलेख से पहले समाप्त हो जाता है, तो पढ़नें के बाद NOP CCW को TIC में बदल दिया जाएगा, और लोडिंग और स्थानांतरित करना अगले बफर का उपयोग करके आगे बढ़ेगा; यदि नहीं, तो चैनल NOP CCW पर रुकेगा, जब तक कि IEWFETCH द्वारा इसे अन्य विशेष IOS निकास के माध्यम से पुनः आरंभ नहीं किया जाता है। तीन बफ़र एक सतत गोलाकार कतार में हैं, प्रत्येक अपने अगले की ओर इशारा करता है, और अंतिम पहले की ओर इशारा करता है, और तीन बफ़र्स को लगातार लोडिंग और स्थानांतरित करने के रूप में पुन: उपयोग किया जाता है।
IEWFETCH, इस प्रकार, किसी भी व्यावहारिक आकार के लोड मॉड्यूल को लोड और स्थानांतरित कर सकता है, और न्यूनतम संभव समय में।
गतिशील संयोजक
गतिशील संयोजक लोडर एक अन्य प्रकार का लोडर है जो पहले से लोड चल रहे प्रोग्रामों के लिए साझा पुस्तकालय (जैसे .so दस्तावेजों .dll दस्तावेजों या .dylib दस्तावेजों) को लोड और संयोजित करता है।
जहां इस तरह के साझा पुस्तकालयों को कई प्रक्रियाओं द्वारा साझा किया जा सकता है, साझा कोड की केवल एक प्रति संभवतः प्रत्येक प्रक्रिया के पता स्थान में एक अलग (आभासी) पते पर दिखाई दे रही है, साझा पुस्तकालय में कोड को स्थानांतरित करने योग्य होना आवश्यक है, अर्थात पुस्तकालय संपूर्ण में केवल स्व-संबंधी या कूटखंड आधार-सापेक्ष आंतरिक पतों का उपयोग करना चाहिए। कुछ प्रोसेसर के पास निर्देश होते हैं जो इसे सुविधाजनक बनाने के लिए स्व-सापेक्ष कोड-संदर्भों का उपयोग कर सकते हैं।
यह भी देखें
संदर्भ
- ↑ "exec". The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. The Open Group. Retrieved 2008-06-23.
- ↑ IBM Corporation (1972). IBM OS MVT Supervisor (PDF).
- ↑ IBM Corporation (1972). IBM OS Linkage Editor and Loader (PDF).