लोडर (कंप्यूटिंग)

From Vigyanwiki

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

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

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

जिम्मेदारियां

यूनिक्स में, सिस्टम कॉल के लिए लोडर कॉलबैक (कंप्यूटर साइंस) है execve().[1] यूनिक्स लोडर के कार्यों में शामिल हैं:

  1. सत्यापन (अनुमतियां, स्मृति आवश्यकताएं आदि);
  2. मेमोरी-मैप्ड फ़ाइल | मेमोरी-मैपिंग निष्पादन योग्य वस्तु को डिस्क से मुख्य मेमोरी में;
  3. कमांड-लाइन तर्कों को वर्चुअल मेमोरी में कॉपी करना;
  4. इनिशियलाइज़िंग प्रोसेसर रजिस्टर (जैसे, स्टैक पॉइंटर);
  5. प्रोग्राम एंट्री पॉइंट पर कूदना (_start).

Microsoft Windows 7 और इसके बाद के संस्करण में, लोडर है LdrInitializeThunk ntdll.dll में निहित फ़ंक्शन, जो निम्न कार्य करता है:

  1. डीएलएल में ही संरचनाओं का आरंभीकरण (अर्थात महत्वपूर्ण खंड, मॉड्यूल सूची);
  2. लोड करने के लिए निष्पादन योग्य का सत्यापन;
  3. गतिशील स्मृति आवंटन का निर्माण (फ़ंक्शन के माध्यम से RtlCreateHeap);
  4. पर्यावरण चर ब्लॉक और पाथ ब्लॉक का आवंटन;
  5. निष्पादन योग्य और एनटीडीएलएल को मॉड्यूल सूची में जोड़ना (एक दोगुनी-लिंक्ड सूची);
  6. उदाहरण के लिए, कई महत्वपूर्ण कार्यों को प्राप्त करने के लिए KERNEL32.DLL को लोड करना BaseThreadInitThunk;
  7. निष्पादन योग्य के आयात की लोडिंग (यानी डायनामिक-लिंक लाइब्रेरी | डायनेमिक-लिंक लाइब्रेरी) पुनरावर्ती रूप से (आयात के आयात, उनके आयात आदि की जांच करें);
  8. डिबग मोड में, सिस्टम ब्रेकप्वाइंट को ऊपर उठाना;
  9. डीएलएल की शुरूआत;
  10. कचरा संग्रहण;
  11. बुला रहा है NtContinue लोडर फ़ंक्शन को दिए गए संदर्भ पैरामीटर पर (यानी कूदना RtlUserThreadStart, जो निष्पादन योग्य प्रारंभ करेगा)

लोडर स्थानांतरित करना

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

ओएस/360 और डेरिवेटिव्स

OS/360 और डिसेंडेंट सिस्टम में, (विशेषाधिकार प्राप्त) ऑपरेटिंग सिस्टम सुविधा को IEWFETCH कहा जाता है,[2] और OS पर्यवेक्षक का एक आंतरिक घटक है, जबकि (गैर-विशेषाधिकार प्राप्त) LOADER एप्लिकेशन लिंकेज संपादक के साथ-साथ समान कार्यों में से कई कार्य कर सकता है, और OS पर्यवेक्षक के लिए पूरी तरह से बाहरी है (हालांकि यह निश्चित रूप से कई पर्यवेक्षक सेवाओं का उपयोग करता है) ).

IEWFETCH अत्यधिक विशिष्ट Channel_I/O#Channel_command_words का उपयोग करता है, और यह सैद्धांतिक रूप से 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 यह सुनिश्चित करता है कि यह सीमा यदि आवश्यक हो तो, अगले पाठ रिकॉर्ड से पहले, आवश्यकतानुसार अतिरिक्त स्थानांतरण रिकॉर्ड सम्मिलित करके अनुपालन किया जाता है; इस विशेष मामले में, रिकॉर्ड का क्रम हो सकता है: ..., पाठ रिकॉर्ड, स्थानांतरण रिकॉर्ड, ..., नियंत्रण रिकॉर्ड , टेक्स्ट रिकॉर्ड, ...).

स्थानांतरण और/या नियंत्रण रिकॉर्ड बफ़र के भीतर एक विशेष बाइट का उपयोग अक्षम बिट स्पिन संचार क्षेत्र के रूप में किया जाता है, और इसे एक अद्वितीय मान के लिए प्रारंभ किया जाता है। उस स्थानांतरण और/या नियंत्रण रिकॉर्ड के लिए रीड सीसीडब्ल्यू में प्रोग्राम नियंत्रित इंटरप्ट बिट सेट है। प्रोसेसर को तब अधिसूचित किया जाता है जब उस CCW को एक विशेष इनपुट/आउटपुट पर्यवेक्षक निकास के माध्यम से चैनल द्वारा एक्सेस किया जाता है। इस बिंदु पर प्रोसेसर अक्षम बिट स्पिन लूप (कभी-कभी दुनिया में सबसे छोटा लूप कहा जाता है) में प्रवेश करता है। एक बार जब वह बाइट अपने आरंभिक मूल्य से बदल जाता है, तो सीपीयू बिट स्पिन से बाहर निकल जाता है, और स्थानांतरण और/या नियंत्रण रिकॉर्ड और अगले पाठ रिकॉर्ड के बीच मीडिया के अंतराल के दौरान स्थानांतरण होता है। यदि स्थानांतरण अगले रिकॉर्ड से पहले समाप्त हो जाता है, तो रीड के बाद NOP CCW को TIC में बदल दिया जाएगा, और लोडिंग और स्थानांतरित करना अगले बफर का उपयोग करके आगे बढ़ेगा; यदि नहीं, तो चैनल NOP CCW पर तब तक रुकेगा, जब तक कि IEWFETCH द्वारा इसे अन्य विशेष IOS निकास के माध्यम से पुनः आरंभ नहीं किया जाता है। तीन बफ़र एक सतत गोलाकार कतार में हैं, प्रत्येक अपने अगले की ओर इशारा करता है, और अंतिम पहले की ओर इशारा करता है, और तीन बफ़र्स को लगातार लोडिंग और स्थानांतरित करने के रूप में पुन: उपयोग किया जाता है।

IEWFETCH, इस प्रकार, किसी भी व्यावहारिक आकार के लोड मॉड्यूल को लोड और स्थानांतरित कर सकता है, और न्यूनतम संभव समय में।

गतिशील लिंकर्स

डायनेमिक लिंकर एक अन्य प्रकार का लोडर है जो पहले से लोड चल रहे प्रोग्रामों के लिए साझा लाइब्रेरी (जैसे निष्पादन योग्य और लिंक करने योग्य प्रारूप|.so फ़ाइलें, डायनेमिक लिंक लाइब्रेरी|.dll फ़ाइलें या .dylib फ़ाइलें) को लोड और लिंक करता है।

यह भी देखें


संदर्भ

  1. "exec". The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition. The Open Group. Retrieved 2008-06-23.
  2. IBM Corporation (1972). IBM OS MVT Supervisor (PDF).
  3. IBM Corporation (1972). IBM OS Linkage Editor and Loader (PDF).