2011-11-07 7 views
8

साझा मैं साझा लाइब्रेरी के बारे में अध्ययन कर रहा था जबकि हालांकि किसी साझा लाइब्रेरी के कोड को कई प्रक्रियाओं के बीच साझा किया जाता है मैं एक बयानपुस्तकालय पता स्थान

पढ़ा है, इसके चर नहीं हैं। प्रत्येक प्रक्रिया जो लाइब्रेरी का उपयोग करती है, उसकी वैश्विक और स्थैतिक चर की प्रतियां हैं जिन्हें लाइब्रेरी के भीतर परिभाषित किया गया है।

मुझे कुछ संदेह हैं।

  1. चाहे प्रत्येक प्रक्रिया का कोड भाग अलग पता स्थान पर हो?
  2. चाहे साझा-लाइब्रेरी कोड भाग कुछ वैश्विक (अद्वितीय) पता स्थान में हों।

मैं सिर्फ स्टार्टर हूं इसलिए कृपया मुझे समझने में सहायता करें।

धन्यवाद!

+0

यह "प्रक्रिया" है, न कि "प्रगति"। –

+2

इस लिंक को चेक करें: http: //duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory। यह स्मृति में कार्यक्रम के बारे में बहुत अच्छी तरह से बताता है। आप देख सकते हैं कि साझा पुस्तकालय आमतौर पर प्रक्रिया 'आभासी पता स्थान में मैप किए गए स्मृति होते हैं –

उत्तर

17

साझा पुस्तकालयों को प्रक्रिया के पते-स्थान के कुछ हिस्सों में फ़ाइल को मेमोरी-मैप करके एक प्रक्रिया में लोड किया जाता है। जब कई प्रक्रियाएं एक ही लाइब्रेरी को लोड करती हैं, तो ओएस बस उन्हें एक ही भौतिक RAM साझा करने देता है।

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

अपने विशिष्ट अंक उत्तर देने के लिए:

  1. सभी प्रक्रियाओं को अपने स्वयं पता स्थान है। प्रक्रियाओं के बीच भौतिक स्मृति का साझाकरण प्रत्येक प्रक्रिया के लिए अदृश्य है (जब तक कि वे एक साझा स्मृति API के माध्यम से जानबूझकर ऐसा नहीं करते)।
  2. सभी डेटा और कोड भौतिक RAM में रहते हैं, जो एक प्रकार का पता-स्थान है। हालांकि, संभवतया आपके द्वारा देखे जाने वाले अधिकांश पते वर्चुअल मेमोरी पते हैं जो एक प्रक्रिया या दूसरे के पता-स्थान से संबंधित हैं, भले ही वह "प्रक्रिया" कर्नेल है।
संबंधित मुद्दे