2010-12-11 9 views
15

लिनक्स में, मेरे पास एक साझा लाइब्रेरी फ़ाइल है जिसे foo.so कहा जाता है जब मैं 2 अलग प्रक्रिया पी 1 निष्पादित करता हूं, p2 जो दोनों foo.so का उपयोग करते हैं। क्या यह foo.so उन 2 प्रक्रियाओं से ओवरलैप हो जाता है?लिनक्स में दो अलग-अलग प्रक्रियाओं द्वारा साझा की गई साझा लाइब्रेरी फ़ाइल कैसी है?

उत्तर

4

साझा लाइब्रेरी के लिए कोड को ऑपरेटिंग सिस्टम द्वारा स्मृति में कॉपी किया गया है (या अधिक सटीक, मैप किया गया)।

फिर ओएस प्रत्येक प्रक्रिया को स्मृति में उस प्रतिलिपि तक पहुंच प्रदान करता है।

यह संभव है कि प्रत्येक प्रक्रिया प्रतिलिपि को दूसरे की तुलना में एक अलग स्मृति पते पर "देखें"। यह सीपीयू की मेमोरी प्रबंधन इकाई द्वारा हल किया जाता है।

यह इस तुलना में अधिक जटिल हो सकता है, लेकिन यह है कि मूल रूप से कैसे चीजें लिनक्स और मैक ओएस एक्स जैसे अन्य यूनिक्स संबंधित ऑपरेटिंग सिस्टम में काम करते हैं

29

यूनिक्स आधारित सिस्टम (लिनक्स भी शामिल है) पर, code segment (.text) हो सकता है कई प्रक्रियाओं के बीच साझा किया गया क्योंकि यह अपरिवर्तनीय है। क्या आप इस ओवरलैपिंग का जिक्र करते हैं?

असल में, प्रत्येक साझा लाइब्रेरी जिसमें स्थैतिक डेटा (जैसे वैश्विक चर) शामिल है, में Global Offset Table (GOT) है। साझा पुस्तकालयों पर, स्थिर डेटा (वैश्विक युद्धों के बारे में सोच) के सभी संदर्भ जीओटी (वे अप्रत्यक्ष हैं) के माध्यम से होते हैं। इसलिए यदि कोड सेगमेंट को कई प्रक्रियाओं के बीच साझा किया जाता है, तो प्रत्येक प्रक्रिया में साझा लाइब्रेरी के अन्य सेगमेंट का अनन्य मैपिंग होता है, जिसमें संबंधित जीओटी भी शामिल है, जिनकी प्रविष्टियां तदनुसार स्थानांतरित की जाती हैं।

संक्षेप में, केवल कोड प्रक्रियाओं के बीच साझा किया जाता है, डेटा नहीं। हालांकि, मुझे लगता है कि संकलन झंडे के आधार पर स्थिरांक अपवाद हो सकता है।

मैं निम्नलिखित लेख की भी सिफारिश करता हूं: Dynamic Linking and Loading

+4

इस बिंदु पर जोर देने के लिए, एक यूनिक्स सिस्टम या तो गतिशील लाइब्रेरी को साझा या साझा नहीं कर सकता है, लेकिन एप्लिकेशन के दृष्टिकोण से, कार्यान्वयन के बीच * कोई अवलोकन अंतर नहीं है *। लगभग सभी यूनिक्स जैसी प्रणालियों को प्रक्रियाओं के बीच कोड साझा करते हैं क्योंकि यह करना आसान है और लगभग किसी भी कीमत पर राम को बचाने के लिए एक शानदार तरीका नहीं है। दुर्लभ अपवाद कमजोर (या नहीं) एमएमयू के साथ हार्डवेयर पर पागल ऑपरेटिंग सिस्टम हैं, जैसे कि साझा 'टेक्स्ट' एक प्रक्रिया को किसी अन्य को दूषित करने की अनुमति दे सकता है। – SingleNegationElimination

संबंधित मुद्दे

 संबंधित मुद्दे