लिंकर और लोडर में अंतर (Difference Between Linker and Loader)
लिंकर और लोडर Utility Program हैं जो एक प्रोग्राम के निष्पादन (Execution) में एक प्रमुख भूमिका निभाते हैं। किसी प्रोग्राम का सोर्स कोड निष्पादन (Execution) से पहले संबंधित क्रम में कंपाइलर, असेम्बलर, लिंकर, लोडर से गुजरता है। एक तरफ, जहां लिंकर असेम्बलर द्वारा उत्पन्न ऑब्जेक्ट कोड को इंट्रैक्ट करता है और उन्हें निष्पादन (Execution) योग्य मॉड्यूल उत्पन्न करने के लिए संयोजित करता है। दूसरी ओर, लोडर इस निष्पादन (Execution) योग्य मॉड्यूल को निष्पादन (Execution) के लिए मुख्य मेमोरी में लोड करता है।
इस पोस्ट में आप जानेंगे-
- लिंकर और लोडर का तुलना चार्ट
- लिंकर और लोडर की परिभाषा
- लिंकर और लोडर में मुख्य अंतर
- निष्कर्ष
लिंकर और लोडर का तुलना चार्ट
तुलना का आधार |
लिंकर |
लोडर |
बेसिक | यह एक सोर्स प्रोग्राम के निष्पादन योग्य मॉड्यूल उत्पन्न करता है। | यह निष्पादन योग्य मॉड्यूल को मुख्य मेमोरी में लोड करता है। |
इनपुट | यह असेम्बलर द्वारा उत्पन्न वस्तु कोड को इनपुट के रूप में लेता है| | यह एक लिंकर द्वारा उत्पन्न निष्पादन योग्य मॉड्यूल लेता है। |
फंक्शन | यह एक निष्पादन योग्य मॉड्यूल उत्पन्न करने के लिए सोर्स कोड के सभी ऑब्जेक्ट मॉड्यूल को जोड़ती है। | यह निष्पादन के लिए मुख्य मेमोरी में एक निष्पादन योग्य मॉड्यूल के पते आवंटित करता है। |
प्रकार / दृष्टिकोण | Linkage Editor, Dynamic linker. | Absolute loading, Relocatable loading and Dynamic Run-time loading. |
लिंकर की परिभाषा
असेंबलर एक सोर्स प्रोग्राम का ऑब्जेक्ट कोड जेनरेट करता है और इसे लिंकर को सौंप देता है। लिंकर इस ऑब्जेक्ट कोड को लेता है और प्रोग्राम के लिए निष्पादन (Execution) योग्य कोड बनाता है, और इसे लोडर को सौंप देता है।
उच्च-स्तरीय भाषा, प्रोग्राम्स में कुछ अंतर्निहित (Built-in) लाइब्रेरी और हेडर फाइलें होती हैं। सोर्स प्रोग्राम में कुछ लाइब्रेरी फ़ंक्शंस हो सकते हैं जिनकी परिभाषा अंतर्निहित (Built-in) लाइब्रेरी में संग्रहीत की जाती है। लिंकर इन फ़ंक्शन को अंतर्निहित (Built-in) लाइब्रेरी से जोड़ता है।
कभी-कभी बड़े प्रोग्राम्स को उपप्रोग्राम में विभाजित किया जाता है जिन्हें मॉड्यूल कहा जाता है। जब ये मॉड्यूल कम्पाइल और असेम्ब होते हैं, तब सोर्स प्रोग्राम के ऑब्जेक्ट मॉड्यूल उत्पन्न होते हैं। लिंकर के पास सोर्स प्रोग्राम की एक निष्पादन (Execution) योग्य फ़ाइल उत्पन्न करने के लिए सभी ऑब्जेक्ट मॉड्यूल को combining/linking की जिम्मेदारी है। हमारे पास दो प्रकार के लिंकर हैं।
-
Linkage Editor
यह एक लिंकर है जो रिलोकेबल, एग्जीक्यूटेबल मॉड्यूल जनरेट करता है।
-
Dynamic Linker
यह लोड मॉड्यूल / निष्पादन (Execution) योग्य मॉड्यूल उत्पन्न होने तक कुछ बाहरी मॉड्यूल के लिंकेज को खराब / स्थगित करता है। यहां, लोडिंग टाइम या रन टाइम के दौरान लिंकिंग की जाती है।
लोडर की परिभाषा
वर्तमान में निष्पादित होने वाले प्रोग्राम को कंप्यूटर की मुख्य मेमोरी में रहना चाहिए। यह लोडर की जिम्मेदारी है, ऑपरेटिंग सिस्टम में एक प्रोग्राम है, जो प्रोग्रामर के निष्पादन (Execution) योग्य फ़ाइल / मॉड्यूल को लोड करने के लिए, लिंकर द्वारा उत्पन्न, निष्पादन (Execution) के लिए मुख्य मेमोरी में लोड करता है। यह मुख्य मेमोरी में निष्पादन (Execution) योग्य मॉड्यूल को मेमोरी स्पेस आवंटित करता है।
लोडर तीन प्रकार के होते हैं:
- Absolute loading
- Relocatable loading
- Dynamic run-time loading
-
Absolute loading
यह दृष्टिकोण हर बार एक प्रोग्राम की एक्ज़ीक्यूटेबल फ़ाइल को एक ही मुख्य मेमोरी लोकेशन में लोड करता है। लेकिन इसके कुछ नुकसान भी हैं जैसे एक प्रोग्रामर को मॉड्यूल को मुख्य मेमोरी में लोड करने के लिए असाइनमेंट रणनीति के बारे में पता होना चाहिए।
-
Relocatable loading
इस दृष्टिकोण में, कंपाइलर या असेंबलर वास्तविक मुख्य मेमोरी एड्रेस का उत्पादन नहीं करता है। यह रिलेटिव एड्रेस का उत्पादन करता है।
-
Dynamic run-time loading
इस दृष्टिकोण में, एक प्रोग्राम के लिए absolute address तब उत्पन्न होता है जब एक निष्पादन (Execution) योग्य मॉड्यूल का एक निर्देश वास्तव में निष्पादित होता है। यह बहुत लचीला होता है, इसमें लोड करने योग्य मॉड्यूल / निष्पादन (Execution) योग्य मॉड्यूल को मुख्य मेमोरी के किसी भी क्षेत्र में लोड किया जा सकता है। निष्पादन (Execution) प्रोग्राम बीच में बाधित हो सकता है और डिस्क पर वापस स्वैप किया जा सकता है और एक अलग मुख्य मेमोरी पते पर मुख्य मेमोरी में वापस आ सकता है।
लिंकर और लोडर के बीच महत्वपूर्ण अंतर
- लिंकर और लोडर के बीच मुख्य अंतर यह है कि लिंकर प्रोग्राम की निष्पादन (Execution) योग्य फ़ाइल बनाता है जबकि, लोडर निष्पादन (Execution) के लिए लिंकर से प्राप्त निष्पादन (Execution) योग्य फ़ाइल को मुख्य मेमोरी में लोड करता है।
- लिंकर असेम्बलर द्वारा उत्पन्न एक प्रोग्राम के ऑब्जेक्ट मॉड्यूल को इंटेक करता है। हालांकि, लोडर लिंकर द्वारा उत्पन्न निष्पादन (Execution) योग्य मॉड्यूल को एकीकृत करता है।
- लिंकर निष्पादन (Execution) योग्य मॉड्यूल उत्पन्न करने के लिए एक प्रोग्राम के सभी ऑब्जेक्ट मॉड्यूल को जोड़ता है यह ऑब्जेक्ट मॉड्यूल में लाइब्रेरी फ़ंक्शन को उच्च-स्तरीय प्रोग्रामिंग भाषा के अंतर्निहित (Built-in) लाइब्रेरी से जोड़ता है। दूसरी ओर, लोडर मुख्य मेमोरी में एक निष्पादन (Execution) योग्य मॉड्यूल को स्थान आवंटित करता है।
- लिंकर को linkage editor और dynamic linker के रूप में वर्गीकृत किया जा सकता है जबकि लोडर को absolute loader, relocatable loader और dynamic run-time loader के रूप में वर्गीकृत किया जा सकता है।
निष्कर्ष:
लिंकर असेम्बलर से प्रोग्राम के ऑब्जेक्ट मॉड्यूल लेता है और प्रोग्राम के निष्पादन (Execution) योग्य मॉड्यूल को उत्पन्न करने के लिए उन्हें एक साथ जोड़ता है। निष्पादन (Execution) योग्य मॉड्यूल लोडर द्वारा निष्पादन (Execution) के लिए मुख्य मेमोरी में लोड किया जाता है।