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

From Vigyanwiki

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

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

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

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

यूनिक्स में, भारक प्रणाली कॉल निष्पादन()के लिये प्रबंधकर्ता है।[1] यूनिक्स भारण के कार्यों में शामिल हैं:

  1. सत्यापन (अनुमतियां, स्मृति आवश्यकताएं आदि);
  2. स्मृति-प्रतिचित्रण निष्पादन योग्य वस्तु से मुख्य स्मृति तक;
  3. आभासी स्मृति में कमांड-लाइन तर्को की प्रतिलिपि बनाना ;
  4. आरंभ पंजिका (जैसे, क्रमबद्ध ढेर सूचक);
  5. कार्यक्रम प्रवेश स्थान (आरम्भ) पर जाएं।

माइक्रोसॉफ्ट विंडोज़ 7 और बाद में, भारक ntdll.dll में LdrInitializeThunk प्रकार्य होता है, जो निम्न कार्य करता है:

  1. डीएलएल में ही संरचनाओं का आरंभ (यानी समीक्षात्मक खंड, अनुखंड सूची);
  2. भारण करने के लिए निष्पादन योग्य का सत्यापन;
  3. एक ढेर बनाना (प्रकार्य RtlCreateHeapके माध्यम से);
  4. पर्यावरण परिवर्तनीय विभाग और कार्यप्रणाली विभाग का आवंटन;
  5. निष्पादन योग्य और ntdll को अनुखंड सूची में जोड़ना (एक दोगुनी-श्रृंखलित सूची);
  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).