लिनक्स में, मेरे पास एक साझा लाइब्रेरी फ़ाइल है जिसे foo.so कहा जाता है जब मैं 2 अलग प्रक्रिया पी 1 निष्पादित करता हूं, p2 जो दोनों foo.so का उपयोग करते हैं। क्या यह foo.so उन 2 प्रक्रियाओं से ओवरलैप हो जाता है?लिनक्स में दो अलग-अलग प्रक्रियाओं द्वारा साझा की गई साझा लाइब्रेरी फ़ाइल कैसी है?
उत्तर
साझा लाइब्रेरी के लिए कोड को ऑपरेटिंग सिस्टम द्वारा स्मृति में कॉपी किया गया है (या अधिक सटीक, मैप किया गया)।
फिर ओएस प्रत्येक प्रक्रिया को स्मृति में उस प्रतिलिपि तक पहुंच प्रदान करता है।
यह संभव है कि प्रत्येक प्रक्रिया प्रतिलिपि को दूसरे की तुलना में एक अलग स्मृति पते पर "देखें"। यह सीपीयू की मेमोरी प्रबंधन इकाई द्वारा हल किया जाता है।
यह इस तुलना में अधिक जटिल हो सकता है, लेकिन यह है कि मूल रूप से कैसे चीजें लिनक्स और मैक ओएस एक्स जैसे अन्य यूनिक्स संबंधित ऑपरेटिंग सिस्टम में काम करते हैं
यूनिक्स आधारित सिस्टम (लिनक्स भी शामिल है) पर, code segment (.text) हो सकता है कई प्रक्रियाओं के बीच साझा किया गया क्योंकि यह अपरिवर्तनीय है। क्या आप इस ओवरलैपिंग का जिक्र करते हैं?
असल में, प्रत्येक साझा लाइब्रेरी जिसमें स्थैतिक डेटा (जैसे वैश्विक चर) शामिल है, में Global Offset Table (GOT) है। साझा पुस्तकालयों पर, स्थिर डेटा (वैश्विक युद्धों के बारे में सोच) के सभी संदर्भ जीओटी (वे अप्रत्यक्ष हैं) के माध्यम से होते हैं। इसलिए यदि कोड सेगमेंट को कई प्रक्रियाओं के बीच साझा किया जाता है, तो प्रत्येक प्रक्रिया में साझा लाइब्रेरी के अन्य सेगमेंट का अनन्य मैपिंग होता है, जिसमें संबंधित जीओटी भी शामिल है, जिनकी प्रविष्टियां तदनुसार स्थानांतरित की जाती हैं।
संक्षेप में, केवल कोड प्रक्रियाओं के बीच साझा किया जाता है, डेटा नहीं। हालांकि, मुझे लगता है कि संकलन झंडे के आधार पर स्थिरांक अपवाद हो सकता है।
मैं निम्नलिखित लेख की भी सिफारिश करता हूं: Dynamic Linking and Loading।
- 1. स्टेटिक लाइब्रेरी दो बार लोड की गई
- 2. साझा लाइब्रेरी की निर्भरता लिंकिंग
- 3. साझा लाइब्रेरी कन्स्ट्रक्टर
- 4. लिनक्स साझा पुस्तकालय सी ++
- 5. लिनक्स में अन्य साझा लाइब्रेरी के विरुद्ध साझा लाइब्रेरी को कैसे लिंक करें?
- 6. साझा लाइब्रेरी की कई प्रतियां लोड करें
- 7. पहली बार साझा की गई साझा प्राथमिकता फ़ाइल कब बनाई जाती है?
- 8. लिनक्स में साझा लाइब्रेरी का उपयोग करने वाली एक ही प्रक्रिया के उदाहरणों में साझा लाइब्रेरी (.so) में वैश्विक चर को कैसे साझा करें?
- 9. क्या CreateFileMapping/MapViewOfFile शून्य द्वारा प्रारंभ की गई साझा मेमोरी सरणी प्रारंभ की गई है?
- 10. प्रक्रियाओं को पुनरारंभ किए बिना साझा लाइब्रेरी अपडेट करें
- 11. साझा स्मृति फ़ाइल
- 12. साझा लाइब्रेरी नाम टकराव
- 13. समस्या किसी साझा लाइब्रेरी
- 14. रनटाइम पर पथ द्वारा साझा लाइब्रेरी लोड करें
- 15. सार्वजनिक रूप से साझा की गई फ़ाइल/फ़ोल्डर
- 16. साझा लाइब्रेरी मेमोरी स्पेस
- 17. Android साझा की गई सीमाएं सीमाएं?
- 18. फोरट्रान में साझा लाइब्रेरी, न्यूनतम उदाहरण
- 19. कंपाइलर त्रुटि - साझा की गई होस्टिंग
- 20. एंड्रॉइड, http: किसी साझा सर्वर द्वारा होस्ट की गई साइट पर फ़ाइल कैसे अपलोड करें?
- 21. सी ++ साझा लाइब्रेरी सी
- 22. अजगर साझा लाइब्रेरी
- 23. साझा साझा करने के उद्देश्य के लिए एक साझा लाइब्रेरी "समान" माना जाता है?
- 24. gdb: साझा लाइब्रेरी में तोड़ अजगर
- 25. जावा प्रक्रियाओं में ऑब्जेक्ट्स साझा करना
- 26. कैसे साझा आईआरक्यू दौड़ लिनक्स
- 27. साझा लाइब्रेरी के दो उदाहरण लोड हो रहे हैं
- 28. सी ++ साझा ऑब्जेक्ट फ़ाइल
- 29. साझा लाइब्रेरी में लाइब्रेरी फ़ंक्शंस का चुनिंदा स्टेटिक लिंकिंग
- 30. रूबी प्रक्रियाओं के बीच साझा परिवर्तनीय
इस बिंदु पर जोर देने के लिए, एक यूनिक्स सिस्टम या तो गतिशील लाइब्रेरी को साझा या साझा नहीं कर सकता है, लेकिन एप्लिकेशन के दृष्टिकोण से, कार्यान्वयन के बीच * कोई अवलोकन अंतर नहीं है *। लगभग सभी यूनिक्स जैसी प्रणालियों को प्रक्रियाओं के बीच कोड साझा करते हैं क्योंकि यह करना आसान है और लगभग किसी भी कीमत पर राम को बचाने के लिए एक शानदार तरीका नहीं है। दुर्लभ अपवाद कमजोर (या नहीं) एमएमयू के साथ हार्डवेयर पर पागल ऑपरेटिंग सिस्टम हैं, जैसे कि साझा 'टेक्स्ट' एक प्रक्रिया को किसी अन्य को दूषित करने की अनुमति दे सकता है। – SingleNegationElimination