विषय-सूचि
मेमोरी मैनेजमेंट क्या है? (memory management in hindi)
मेमोरी मैनेजमेंट एक ऑपरेटिंग सिस्टम (operating system) का फंक्शन है जो प्राइमरी मेमोरी को हैंडल करता है और मैनेज करता है। इसके साथ ही ये प्रोसेस को execution के दौरान मेमोरी और और डिस्क के बीच घुमाने का काम भी करता है।
मेमोरी मैनेजमेंट सारे के सारे मेमोरी लोकेशन का ट्रैक रखता है; भले ही उन्हें किसी प्रोसेस को allocate किया गया हो या फिर वो खाली बैठे हों। ये इस बात की जांच भी करता है कि किस प्रोसेस को कितनी मेमोरी देने की जरूरत है।
कौन से प्रोसेस को किस समय पर मेमोरी दी जाएगी- ये तय करना भी मेमोरी मैनेजमेंट का ही कार्य होता है।
जब भी कोई मेमोरी फ्री होता है यानी किसी प्रोसेस को एक्सीक्यूट करने के बाद खाली होता है तो मेमोरी मैनेजमेंट उसी हिसाब से अपने रिकॉर्ड को अपडेट भी करता रहता है।
यहाँ हम मेमोरी मैनेजमेंट से जुडी जरूरी बातों के साथ-साथ साथ उसकी प्रक्रिया को भी अच्छी तरह से समझेंगे।
प्रोसेस एड्रेस स्पेस (process address space in hindi)
प्रोसेस एड्रेस स्पेस कुछ लॉजिकल एड्रेस का एक सेट है और ये वो एड्रेस होते हैं जिसका रिफरेन्स प्रोसेस के कोड में होता है।
उदाहरण के लिए जब जब 32 बिट एड्रेसिंग का प्रयोग किया जा रहा हो, तो एड्रेस का रेंज 0 से 0x7fffffff तक हो सकता है;यानी कि दो गीगाबीते के थ्योरेटिकल आकार के लिए 2^31 सम्भव संख्याएं हो सकती है।
ऑपरेटिंग सिस्टम प्रोग्राम में मेमोरी एलोकेशन के समय लॉजिकल एड्रेस को फिजिकल एड्रेस से मैप करने का भी ध्यान रखता है।
किसी भी प्रोग्राम में मेमोरी के एलोकेशन होने से पहले और बाद में कुल तीन तरह के एड्रेस का प्रयोग होता है:
S.N. | Memory Addresses & Description |
---|---|
1 | सिंबॉलिक एड्रेस इस एड्रेस को सोर्स कोड में प्रयोग किया जाता है। वेरिएबल के नाम, constraint, और इंस्ट्रक्शन लेबल्स- ये सिंबॉलिक एड्रेस के मूल एड्रेस स्पेस होते हैं। |
2 | रिलेटिव एड्रेस कंपाइलेशन वाली प्रक्रिया के समय पर एक कम्पाइलर सिंबॉलिक एड्रेस को रिलेटिव एड्रेस में बदलने का काम करता है। |
3 | फिजिकल एड्रेस लोडर इन एड्रेस को उस समय generate करता है जब प्रोग्राम मेमोरी के अंदर लोड होता है। |
कम्पाइल टाइम और लोड टाइम एड्रेस बिन्डिंग स्कीम के समय पर वर्चुअल और फिजिकल एड्रेस दोनों समान ही होते हैं। वहीं execution टाइम एड्रेस बिन्डिंग स्कीम के समय वर्चुअल और फिजिकल एड्रेस अलग-अलग होते हैं।
मेमोरी मैनेजमेंट यूनिट यानी MMU फिजिकल से वर्चुअल एड्रेस तक मेमोरी मैपिंग का कार्य करता है। ये एक हार्डवेयर डिवाइस होता है। वर्चुअल एड्रेस को फिजिकल एड्रेस में कन्वर्ट करने के लिए MMU निम्नलिखित मैकेनिज्म का प्रयोग करता है:
- बेस रजिस्टर में जो मान होता है उसे यूजर प्रोसेस द्वारा generate कियी गए सभी एड्रेस में जोड़ा जाता है। जब इसे मेमोरी को भजा जाता है जब इसे एक ऑफसेट की तरह देखा जाता है। उदाहरण के लिए, अगर बेस रजिस्टर में मान है 10000, तो अगर यूजर 100 एड्रेस लोकेशन का प्रयोग करना चाहता है तो तो उसे डायनामिक रूप से 10100 लोकेशन को allocate कर दिया जाएगा।
- यूजर प्रोग्राम वर्चुअल एड्रेस से डील करता है, ये कभी भी असली फिजिकल एड्रेस को नहीं देख पाता।
स्टैटिक और डायनामिक लोडिंग (static and dynamic loading)
जब कंप्यूटर का प्रोग्राम विकसित किया जा रहा होता है तभी स्टैटिक और डायनामिक लोडिंग के बीच से कोई एक चुनना पड़ता है।
अगर आपको अपने प्रोग्राम को स्टैटिक रूप से लोड करना है तो कंपाइलेशन के समय पूरे प्रोग्राम को compile किया जाएगा और बिना किसी बाहरी प्रोग्राम और मोडूले निर्भरता के ही इसे इए लिंक किया जाएगा।
लिंकर ऑब्जेक्ट प्रोग्राम को किसी और जरूरी ऑब्जेक्ट modules से absolute प्रोग्राम के अंदर लिंक करता है जिसमे लॉजिकल एड्रेस भी शामिल होता है।।
अगर आप डायनामिक रूप से लोड होने वाला प्रोग्राम लिख रहे हैं तो आपका कम्पाइलर सभी वैसे modules के लिए प्रोग्राम को compile करेगा जिनके आप dynamically जोड़ना चाहते हैं।
केवल रिफरेन्स दिया जाएगा और बांकी का काम execution के समय पर पूरा होगा।
जब लोडिंग हो रहा हो तब स्टैटिक लोडिंग के समय, absolute प्रोग्राम और डाटा को भी मेमोरी में लोड किया जाता है ताकि execution शुरू हो जाये।
अगर आप डायनामिक लोडिंग का प्रयोग कर रहे हैं तो लाइब्रेरी के डायनामिक रूटीन को एक डिस्क में ऐसे स्टोर किया जाएगा कि जब जरूरत पड़े तो उसे कहीं और फिर से लोकेट किया जा सके। उन्हें मेमोरी में तभी लोड किया जाता है जब प्रोग्राम को उनकी जरूरत हो।
स्टैटिक और डायनामिक लिंकिंग (static and dynamic linking)
जैसा कि आपने ऊपर देखा, जब स्टैटिक लिंकिंग का प्रयोग किया जाता है तब लिंकर प्रोग्राम को जिनकी जरूरत हो उन सारे modules को आपस में कंबाइन कर के एक ऐसा प्रोग्राम बना देता है जिसे एक्सीक्यूट किया जा सकी और इसे करने के पीछे का कारण होता है रनटाइम निर्भरता को हटाना।
वहीं दूसरी तरफ जब डायनामिक लिंकिंग का प्रयोग किया जाता है तब प्रोग्राम के साथ असली module या लाइब्रेरी को जोड़ने की कोई जरूरत नहीं होती।
इसके बजाय कंपाइलेशन और लिंकिंग के समय डायनामिक module का एक रिफरेन्स दे दिया जाता है। डायनामिक लाइब्रेरी के प्रमुख उदाहरण हैं- विंडोज में डायनामिक लिंक लाइब्रेरी (DLL) और यूनिक्स में शेयर्ड ऑब्जेक्ट्स।
स्वैपिंग (swapping in memory management in hindi)
स्वैपिंग एक ऐसा मैकेनिज्म है जिसमे किसी भी प्रोसेस को अस्थाई रूप मेन मेमोरी से सेकेंडरी स्टोरेज यानी कि डिस्क में स्वैप किया जा सकता है और उस मेमोरी को अन्य प्रोसेस के लिए उपलब्ध कराया जा सकता है। कुछ समय के बाद, सिस्टम फिर से प्रोसेस को डिस्क में से अपने मेन मेमोरी में वापस स्वैप कर लेता है।
वैसे तो स्वैपिंग की प्रक्रिया से सिस्टम के परफॉरमेंस पर असर पड़ता है लेकिन ये बड़े और एक से ज्यादा प्रोसेस को रन करने में मदद करता है। यही कारण है कि स्वैपिंग को मेमोरी compaction की तक्तिक भी कहा गया है।
स्वैपिंग प्रक्रिया द्वारा लिए गए कुल समय में इसके द्वारा मेन मेमोरी से डिस्क में प्रोसेस को मूव करने में जो समय लगता है वो भी शामिल होता है।
और साथ ही प्रोसेस को वापस सेकेंडरी डिस्क से मेन मेमोरी में कॉपी करने का समय भी इसमें शामिल होता है। मेमोरी को फिर से वापस गेन करने के समय को भी इसमें जोड़ा जाता है।
मान लीजिये कि यूजर प्रोसेस का आकार है 2048KB और वो एक ऐसे स्टैंडर्ड्स हार्ड डिस्क पर है जहां स्वैपिंग के पास डाटा ट्रान्सफर रेट 1Mbps है। अब हम कैलकुलेट करेंगे कि 1000K का सल में मेमोरी से या मेमोरी में ट्रान्सफर करने में कितना समय लगेगा।
2048KB / 1024KB per second = 2 seconds = 2000 milliseconds
अब इन और आउट टाइम को ध्यान में रखते हुए ये 4000 मिली सेकंड (और नया ओवरहेड जहां प्रोसेस मेमोरी को रगें करने की कोशिश करता है) का समय लेगा।
इस लेख से सम्बंधित यदि आपका कोई भी सवाल या सुझाव है, तो आप उसे नीचे कमेंट में लिख सकते हैं।
Thank you sir tell me for memory management