मेमोरी प्रबंधन: Difference between revisions

From Vigyanwiki
Line 4: Line 4:
{{More footnotes|date=April 2014}}
{{More footnotes|date=April 2014}}
{{OS}}
{{OS}}
स्मृति प्रबंधन कंप्यूटर स्मृति पर लागू [[संसाधन प्रबंधन (कंप्यूटिंग)]] का एक रूप है। [[स्मृति]] प्रबंधन की  मौलिक आवश्यकता कार्यक्रमों को उनके अनुरोध पर स्मृति के भागों को गतिशील रूप से निर्धारित करने के तरीके प्रदान करना है, और जब आवश्यकता नहीं होती है तो इसे पुन: उपयोग के लिए मुक्त करना है। यह किसी भी उन्नत कंप्यूटर प्रणाली के लिए महत्वपूर्ण है जहां किसी भी समय एक से अधिक [[प्रक्रिया (कंप्यूटिंग)]] चल रही हो सकती है।<ref name=":0" />
स्मृति प्रबंधन कंप्यूटर स्मृति पर लागू [[संसाधन प्रबंधन (कंप्यूटिंग)]] का एक रूप है। [[स्मृति]] प्रबंधन की  मौलिक आवश्यकता कार्यक्रमों को उनके अनुरोध पर स्मृति के भागों को गतिशील रूप से नियतन करने के तरीके प्रदान करना है, और जब आवश्यकता नहीं होती है तो इसे पुन: उपयोग के लिए मुक्त करना है। यह किसी भी उन्नत कंप्यूटर प्रणाली के लिए महत्वपूर्ण है जहां किसी भी समय एक से अधिक [[प्रक्रिया (कंप्यूटिंग)]] चल रही हो सकती है।<ref name=":0" />


कई तरीके प्रकल्पित किए गए हैं जो स्मृति प्रबंधन की प्रभावशीलता को बढ़ाते हैं। [[अप्रत्यक्ष स्मृति]] प्रणाली वास्तविक  एड्रेस से एक प्रक्रिया द्वारा उपयोग किए जाने वाले स्मृति एड्रेस  को अलग करता है, प्रक्रियाओं को अलग करने की स्वीकृति  देता है और [[यादृच्छिक अभिगम स्मृति|रैम]] की उपलब्ध मात्रा से अधिक [[आभासी पता स्थान|वर्चुअल एड्रेस स्पेस]] के आकार को पेजिंग या स्वैपिंग का उपयोग करके [[सहायक कोष|द्वितीयक भंडारण]] तक बढ़ाया जा सकता है। आभासी स्मृति मेनेजर की गुणवत्ता का समग्र प्रणाली कंप्यूटर के प्रदर्शन पर व्यापक प्रभाव पड़ सकता है।
कई तरीके प्रकल्पित किए गए हैं जो स्मृति प्रबंधन की प्रभावशीलता को बढ़ाते हैं। [[अप्रत्यक्ष स्मृति]] प्रणाली वास्तविक  एड्रेस से एक प्रक्रिया द्वारा उपयोग किए जाने वाले स्मृति एड्रेस  को अलग करता है, प्रक्रियाओं को अलग करने की स्वीकृति  देता है और [[यादृच्छिक अभिगम स्मृति|रैम]] की उपलब्ध मात्रा से अधिक [[आभासी पता स्थान|वर्चुअल एड्रेस स्पेस]] के आकार को पेजिंग या स्वैपिंग का उपयोग करके [[सहायक कोष|द्वितीयक भंडारण]] तक बढ़ाया जा सकता है। आभासी स्मृति मेनेजर की गुणवत्ता का समग्र प्रणाली कंप्यूटर के प्रदर्शन पर व्यापक प्रभाव पड़ सकता है।
Line 22: Line 22:
</ref> स्मृति ऑपरेटिंग सिस्टम द्वारा प्रबंधित की जाती है।{{NoteTag|However, the run-time environment for a language processor may subdivide the memory dynamically acquired from the operating system, e.g., to implement a stack.}} अन्य ऑपरेटिंग सिस्टम में, उदा. यूनिक्स की तरह ऑपरेटिंग सिस्टम, स्मृति को एप्लिकेशन स्तर पर प्रबंधित किया जाता है।
</ref> स्मृति ऑपरेटिंग सिस्टम द्वारा प्रबंधित की जाती है।{{NoteTag|However, the run-time environment for a language processor may subdivide the memory dynamically acquired from the operating system, e.g., to implement a stack.}} अन्य ऑपरेटिंग सिस्टम में, उदा. यूनिक्स की तरह ऑपरेटिंग सिस्टम, स्मृति को एप्लिकेशन स्तर पर प्रबंधित किया जाता है।


एड्रेस स्पेस के अंदर स्मृति प्रबंधन को सामान्यतः मैन्युअल स्मृति प्रबंधन या [[स्वचालित चर|स्वचालित स्मृति प्रबंधन]] के रूप में वर्गीकृत किया जाता है।
एड्रेस स्पेस के अंदर स्मृति प्रबंधन को सामान्यतः मैनुअल स्मृति प्रबंधन या [[स्वचालित चर|स्वचालित स्मृति प्रबंधन]] के रूप में वर्गीकृत किया जाता है।


== मैनुअल स्मृति प्रबंधन ==
== मैनुअल स्मृति प्रबंधन ==
Line 28: Line 28:
{{main|मैनुअल स्मृति प्रबंधन}}
{{main|मैनुअल स्मृति प्रबंधन}}


निर्धारण अनुरोध को पूरा करने के कार्य में पर्याप्त आकार की अप्रयुक्त स्मृति के अवरोध का पता लगाना सम्मिलित है। एक बड़े पूल से भाग निर्धारित करके स्मृति अनुरोध संतुष्ट होते हैं{{NoteTag|In some operating systems, e.g., [[OS/360]], the free storage may be subdivided in various ways, e.g., subpools in [[OS/360]], below the line, above the line and above the bar in [[z/OS]].}} स्मृति को संग्रह {{NoteTag|Not to be confused with the unrelated [[Heap (data structure)|heap]] data structure.}} या मुफ्त भंडार कहा जाता है। किसी भी समय, संग्रह के कुछ हिस्से उपयोग में होते हैं, जबकि कुछ मुफ्त (अप्रयुक्त) होते हैं और इस प्रकार भविष्य के निर्धारण के लिए उपलब्ध होते हैं।
नियतन अनुरोध को पूरा करने के कार्य में पर्याप्त आकार की अप्रयुक्त स्मृति के खंड का पता लगाना सम्मिलित है। एक बड़े समूह से भाग नियतन करके स्मृति अनुरोध संतुष्ट होते हैं{{NoteTag|In some operating systems, e.g., [[OS/360]], the free storage may be subdivided in various ways, e.g., subpools in [[OS/360]], below the line, above the line and above the bar in [[z/OS]].}} स्मृति को संग्रह {{NoteTag|Not to be confused with the unrelated [[Heap (data structure)|heap]] data structure.}} या मुफ्त भंडार कहा जाता है। किसी भी समय, संग्रह के कुछ भाग उपयोग में होते हैं, जबकि कुछ मुफ्त (अप्रयुक्त) होते हैं और इस प्रकार भविष्य के नियतन के लिए उपलब्ध होते हैं।


कई विषय कार्यान्वयन को जटिल बनाते हैं, जैसे बाहरी विखंडन, जो तब उत्पन्न होता है जब निर्धारित स्मृति ब्लॉक के बीच कई छोटे अंतराल होते हैं, जो निर्धारण  अनुरोध के लिए उनके उपयोग को अमान्य कर देता है। निर्धारण कर्ता का [[मेटाडेटा (कंप्यूटिंग)]] भी (व्यक्तिगत रूप से) छोटे निर्धारण के आकार को बढ़ा सकता है। इसे प्रायः चैंकिंग (कंप्यूटिंग) द्वारा प्रबंधित किया जाता है। स्मृति प्रबंधन प्रणाली को यह सुनिश्चित करने के लिए बकाया निर्धारण को ट्रैक करना चाहिए कि वे ओवरलैप न हों और कोई स्मृति कभी खो न जाए (यानी कि कोई [[स्मृति रिसाव]] न हो)।
कई विषय कार्यान्वयन को जटिल बनाते हैं, जैसे बाहरी विखंडन, जो तब उत्पन्न होता है जब नियतन स्मृति ब्लॉक (खंड) के बीच कई छोटे अंतराल होते हैं, जो नियतन अनुरोध के लिए उनके उपयोग को अमान्य कर देता है। नियतन का [[मेटाडेटा (कंप्यूटिंग)|मेटाडेटा]] भी (व्यक्तिगत रूप से) छोटे नियतन के आकार को बढ़ा सकता है। इसे प्रायः भागों (कंप्यूटिंग) द्वारा प्रबंधित किया जाता है। स्मृति प्रबंधन प्रणाली को यह सुनिश्चित करने के लिए उत्कृष्ट नियतन का पता करना चाहिए कि वे अतिव्याप्त न हों और कोई स्मृति कभी <nowiki>''नष्ट''</nowiki> हो जाए (अर्थात कि कोई [[स्मृति रिसाव|स्मृति]] प्रकट न हो)।


=== दक्षता ===
=== दक्षता ===
लागू किया गया विशिष्ट डायनेमिक स्मृति एलोकेशन एल्गोरिथम प्रदर्शन को महत्वपूर्ण रूप से प्रभावित कर सकता है। [[डिजिटल उपकरण निगम]] द्वारा 1994 में किए गए एक अध्ययन में विभिन्न प्रकार के आवंटकों के लिए सम्मिलित [[कम्प्यूटेशनल ओवरहेड]] को दिखाया गया है। एकल स्मृति स्लॉट निर्धारित करने के लिए न्यूनतम औसत निर्देश पथ लंबाई 52 थी (जैसा कि विभिन्न प्रकार के सॉफ़्टवेयर पर निर्देश स्तर की [[रूपरेखा (कंप्यूटर प्रोग्रामिंग)]] के साथ मापा जाता है)।<ref name=":0">{{Cite journal | doi = 10.1002/spe.4380240602| title = बड़े सी और सी ++ प्रोग्राम में मेमोरी आवंटन लागत| journal = Software: Practice and Experience| volume = 24| issue = 6| pages = 527–542| date=June 1994 | last1 = Detlefs | first1 = D. | last2 = Dosser | first2 = A. | last3 = Zorn | first3 = B. | url = http://www.eecs.northwestern.edu/~robby/uc-courses/15400-2008-spring/spe895.pdf| citeseerx = 10.1.1.30.3073| s2cid = 14214110}}</ref>
लागू किया गया विशिष्ट सक्रिय स्मृति नियतन एल्गोरिथम प्रदर्शन को महत्वपूर्ण रूप से प्रभावित कर सकता है। [[डिजिटल उपकरण निगम|डिजिटल उपकरण संस्था]] द्वारा 1994 में किए गए एक अध्ययन में विभिन्न प्रकार के आवंटकों के लिए सम्मिलित [[कम्प्यूटेशनल ओवरहेड|ओवरहेड]] को दिखाया गया है। एकल स्मृति स्लॉट नियतन करने के लिए न्यूनतम औसत निर्देश स्तर लंबाई 52 थी (जैसा कि विभिन्न प्रकार के सॉफ़्टवेयर पर निर्देश स्तर की [[रूपरेखा (कंप्यूटर प्रोग्रामिंग)]] के साथ मापा जाता है)।<ref name=":0">{{Cite journal | doi = 10.1002/spe.4380240602| title = बड़े सी और सी ++ प्रोग्राम में मेमोरी आवंटन लागत| journal = Software: Practice and Experience| volume = 24| issue = 6| pages = 527–542| date=June 1994 | last1 = Detlefs | first1 = D. | last2 = Dosser | first2 = A. | last3 = Zorn | first3 = B. | url = http://www.eecs.northwestern.edu/~robby/uc-courses/15400-2008-spring/spe895.pdf| citeseerx = 10.1.1.30.3073| s2cid = 14214110}}</ref>




=== कार्यान्वयन ===
=== कार्यान्वयन ===
चूंकि निर्धारण का सटीक स्थान पहले से ज्ञात नहीं है, स्मृति को अप्रत्यक्ष रूप से, सामान्यतः एक पॉइंटर (कंप्यूटर प्रोग्रामिंग) [[संदर्भ (कंप्यूटर विज्ञान)]] के माध्यम से एक्सेस किया जाता है। स्मृति क्षेत्र को व्यवस्थित करने और चंक्स को निर्धारित करने और हटाने के लिए उपयोग किया जाने वाला विशिष्ट एल्गोरिथ्म [[कर्नेल (ऑपरेटिंग सिस्टम)|कर्नेल (संचालन  प्रणाली)]] के साथ जुड़ा हुआ है, और निम्न विधियों में से किसी का भी उपयोग कर सकता है:
चूंकि नियतन का यथावत् स्थान पहले से ज्ञात नहीं है, स्मृति को अप्रत्यक्ष रूप से, सामान्यतः एक पॉइंटर [[संदर्भ (कंप्यूटर विज्ञान)]] के माध्यम से अभिगम्य किया जाता है। स्मृति क्षेत्र को व्यवस्थित करने और भागों को नियतन करने और हटाने के लिए उपयोग किया जाने वाला विशिष्ट एल्गोरिथ्म [[कर्नेल (ऑपरेटिंग सिस्टम)|कर्नेल]] के साथ जुड़ा हुआ है, और निम्न विधियों में से किसी का भी उपयोग कर सकता है:


==== {{Anchor|FIXED-SIZE}}निश्चित आकार ब्लॉक निर्धारण ====
==== निश्चित आकार ब्लॉक नियतन ====
{{main|Memory pool}}
{{main|स्मृति निकाय}}
फिक्स्ड-साइज ब्लॉक निर्धारण , जिसे स्मृति पूल निर्धारण  भी कहा जाता है, स्मृति के निश्चित आकार के ब्लॉक (प्रायः सभी समान आकार) की एक [[मुफ्त सूची]] का उपयोग करता है। यह सरल [[अंतः स्थापित प्रणाली]] के लिए अच्छी तरह से काम करता है जहां किसी बड़ी वस्तु को निर्धारित करने की आवश्यकता नहीं होती है, लेकिन [[विखंडन (कंप्यूटिंग)]] से पीड़ित होता है, विशेष रूप से लंबे स्मृति एड्रेस के साथ। हालांकि, महत्वपूर्ण रूप से कम ओवरहेड के कारण यह विधि उन वस्तुओं के प्रदर्शन में काफी सुधार कर सकती है जिन्हें प्रायः निर्धारण  / डी-निर्धारण  की आवश्यकता होती है और प्रायः [[वीडियो गेम]] में इसका उपयोग किया जाता है।


==== बडी ब्लॉक ====
निश्चित-आकार ब्लॉक नियतन, जिसे स्मृति पूल नियतन  भी कहा जाता है, स्मृति के निश्चित आकार के ब्लॉक (प्रायः सभी समान आकार) की एक [[मुफ्त सूची]] का उपयोग करता है। यह सरल [[अंतः स्थापित प्रणाली]] के लिए अच्छी तरह से काम करता है जहां किसी बड़ी वस्तु को नियतन करने की आवश्यकता नहीं होती है, लेकिन [[विखंडन (कंप्यूटिंग)]] से ग्रस्त है, विशेष रूप से लंबे स्मृति पतों के साथ। हालांकि, महत्वपूर्ण रूप से कम ओवरहेड के कारण यह विधि उन वस्तुओं के प्रदर्शन में अधिकतम सुधार कर सकती है जिन्हें प्रायः नियतन  / डी-नियतन  की आवश्यकता होती है और प्रायः [[वीडियो गेम]] में इसका उपयोग किया जाता है।
{{details|Buddy memory allocation}}
इस प्रणाली में, स्मृति को केवल एक के अतिरिक्त स्मृति के कई पूलों में निर्धारित किया जाता है, जहां प्रत्येक पूल आकार में दो की एक निश्चित शक्ति की स्मृति के ब्लॉक या किसी अन्य सुविधाजनक आकार की प्रगति के ब्लॉक का प्रतिनिधित्व करता है। एक विशेष आकार के सभी ब्लॉकों को एक क्रमबद्ध [[लिंक्ड सूची]] या ट्री डेटा संरचना में रखा जाता है और निर्धारण  के समय बनने वाले सभी नए ब्लॉक बाद में उपयोग के लिए उनके संबंधित स्मृति पूल में जोड़े जाते हैं। यदि उपलब्ध से छोटे आकार का अनुरोध किया जाता है, तो सबसे छोटा उपलब्ध आकार चुना जाता है और विभाजित किया जाता है। परिणामी भागों में से एक का चयन किया जाता है, और अनुरोध पूरा होने तक प्रक्रिया दोहराई जाती है। जब एक ब्लॉक निर्धारित किया जाता है, तो निर्धारण  अनावश्यक रूप से टूटने वाले ब्लॉक से बचने के लिए सबसे छोटे पर्याप्त बड़े ब्लॉक से प्रारंभ होगा। जब किसी ब्लॉक को मुक्त किया जाता है, तो उसकी तुलना उसके मित्र से की जाती है। यदि वे दोनों स्वतंत्र हैं, तो वे संयुक्त होते हैं और तदनुसार बड़े आकार की मित्र-ब्लॉक सूची में रखे जाते हैं।


==== स्लैब निर्धारण ====
==== बड्डी ब्लॉक ====
{{main|Slab allocation}}
{{details|बड्डी स्मृति नियतन}}
यह स्मृति एलोकेशन मैकेनिज्म एक निश्चित प्रकार या आकार की वस्तुओं को फिट करने के लिए उपयुक्त स्मृति चंक्स का पूर्व-निर्धारण  करता है।<ref name="silberschatz">{{cite book |first1 = Abraham |last1 = Silberschatz |author1-link = Abraham Silberschatz |first2 = Peter B. |last2 = Galvin |title = ऑपरेटिंग सिस्टम की अवधारणाएँ|publisher = Wiley |year = 2004 |isbn = 0-471-69466-5 }}</ref> इन चंक्स को कैश कहा जाता है और एलोकेटर को केवल फ्री कैश स्लॉट्स की सूची पर नज़र रखनी होती है। किसी वस्तु का निर्माण किसी भी मुफ्त कैश स्लॉट का उपयोग करेगा और किसी ऑब्जेक्ट को नष्ट करने से फ्री कैश स्लॉट सूची में एक स्लॉट वापस आ जाएगा। यह तकनीक स्मृति विखंडन को कम करती है और कुशल है क्योंकि स्मृति के उपयुक्त हिस्से की खोज करने की कोई आवश्यकता नहीं है, क्योंकि कोई भी खुला स्लॉट पर्याप्त होगा।


==== ढेर निर्धारण ====
इस प्रणाली में, स्मृति को केवल एक के अतिरिक्त स्मृति के कई निकाय में नियतन किया जाता है, जहां प्रत्येक  निकाय आकार में दो की एक निश्चित शक्ति की स्मृति के ब्लॉक या किसी अन्य सुविधाजनक आकार की प्रगति के ब्लॉक का प्रतिनिधित्व करता है। एक विशेष आकार के सभी ब्लॉकों को एक क्रमबद्ध [[लिंक्ड सूची]] या ट्री डेटा संरचना में रखा जाता है और नियतन  के समय बनने वाले सभी नए ब्लॉक बाद में उपयोग के लिए उनके संबंधित स्मृति निकाय में जोड़े जाते हैं। यदि उपलब्ध से छोटे आकार का अनुरोध किया जाता है, तो सबसे छोटा उपलब्ध आकार चुना जाता है और विभाजित किया जाता है। परिणामी भागों में से एक का चयन किया जाता है, और अनुरोध पूरा होने तक प्रक्रिया दोहराई जाती है। जब एक ब्लॉक नियतन किया जाता है, तो नियतन  अनावश्यक रूप से टूटने वाले ब्लॉक से बचने के लिए सबसे छोटे पर्याप्त बड़े ब्लॉक से प्रारंभ होगा। जब किसी ब्लॉक को मुक्त किया जाता है, तो उसकी तुलना उसके बड्डी से की जाती है। यदि वे दोनों स्वतंत्र हैं, तो वे संयुक्त होते हैं और तदनुसार बड़े आकार की बड्डी-ब्लॉक सूची में रखे जाते हैं।
{{main|Stack-based memory allocation}}
कई यूनिक्स-जैसी प्रणालियाँ और साथ ही [[माइक्रोसॉफ़्ट विंडोज़]]़ नामक एक कार्य को लागू करते हैं {{code|alloca}} स्टैक स्मृति को गतिशील रूप से हीप-आधारित के समान निर्धारित करने के लिए {{code|malloc}}. एक कंपाइलर सामान्यतः इसे स्टैक पॉइंटर में हेरफेर करने वाले इनलाइन निर्देशों में अनुवाद करता है।<ref>{{man|3|alloca|Linux}}</ref> हालाँकि इस तरह निर्धारित स्मृति को मैन्युअल रूप से मुक्त करने की कोई आवश्यकता नहीं है क्योंकि यह स्वचालित रूप से मुक्त हो जाता है जब फ़ंक्शन को कॉल किया जाता है {{code|alloca}} रिटर्न, वहाँ अतिप्रवाह का खतरा सम्मिलित है। और चूंकि एलोका एक तदर्थ विस्तार है जो कई प्रणालियों में देखा जाता है लेकिन पॉज़िक्स या सी मानक में कभी नहीं, स्टैक ओवरफ्लो के मामले में इसका व्यवहार अपरिभाषित है।


एलोका का एक सुरक्षित संस्करण कहा जाता है {{code|_malloca}}, जो त्रुटियों की रिपोर्ट करता है, Microsoft Windows पर सम्मिलित है। इसके उपयोग की आवश्यकता है {{code|_freea}}.<ref>{{cite web |title=_malloca|url=https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/malloca?view=vs-2019 |website=Microsoft CRT Documentation |language=en-us}}</ref> [[gnulib]] एक समतुल्य इंटरफ़ेस प्रदान करता है, यद्यपि अतिप्रवाह पर SEH अपवाद फेंकने के अतिरिक्त, यह बड़े आकार का एड्रेस चलने पर malloc को प्रतिनिधि करता है।<ref>{{cite web |title=gnulib/malloca.h|url=https://github.com/coreutils/gnulib/blob/master/lib/malloca.h |website=GitHub |access-date=24 November 2019}}</ref> इसी तरह की सुविधा को मैन्युअल लेखा और आकार-जांच का उपयोग करके अनुकरण किया जा सकता है, जैसे कि उपयोग में {{code|alloca_account}} ग्लिबैक में।<ref>{{cite web |title=glibc/include/alloca.h|url=https://github.com/bminor/glibc/blob/780684eb04298977bc411ebca1eadeeba4877833/include/alloca.h |publisher=Beren Minor's Mirrors |date=23 November 2019}}</ref>
==== खंड नियतन ====
{{main|खंड नियतन}}
 
यह स्मृति नियतन क्रियाविधि एक निश्चित प्रकार या आकार की वस्तुओं को उपयुक्त करने के लिए उपयुक्त स्मृति भाग का पूर्व-नियतन  करता है।<ref name="silberschatz">{{cite book |first1 = Abraham |last1 = Silberschatz |author1-link = Abraham Silberschatz |first2 = Peter B. |last2 = Galvin |title = ऑपरेटिंग सिस्टम की अवधारणाएँ|publisher = Wiley |year = 2004 |isbn = 0-471-69466-5 }}</ref> इन भाग को  गुप्‍त भंडार कहा जाता है और नियतन को केवल मुफ़्त गुप्‍त भंडार स्लॉट की सूची पर संपर्क रखना होता है। किसी वस्तु का निर्माण किसी भी मुफ्त गुप्त भंडार स्लॉट का उपयोग करेगा और किसी वस्तु को नष्ट करने से मुफ़्त गुप्त भंडार स्लॉट सूची में एक स्लॉट वापस आ जाएगा। यह तकनीक स्मृति विखंडन को कम करती है और कुशल है क्योंकि स्मृति के उपयुक्त भाग की खोज करने की कोई आवश्यकता नहीं है, क्योंकि कोई भी खुला स्लॉट पर्याप्त होगा।
 
==== स्टैक नियतन ====
{{main|स्टैक-आधारित स्मृति नियतन}}
कई यूनिक्स-जैसी प्रणालियाँ और साथ ही [[माइक्रोसॉफ़्ट विंडोज़]] नामक एक कार्य को लागू करते हैं {{code|alloca}} स्टैक स्मृति को गतिशील रूप से हीप-आधारित के समान नियतन करने के लिए {{code|malloc}}. एक कंपाइलर सामान्यतः इसे स्टैक पॉइंटर में कुशलतापूर्वक प्रयोग करने वाले पंक्तिबद्धता निर्देशों में अनुवाद करता है।<ref>{{man|3|alloca|Linux}}</ref> हालाँकि इस तरह नियतन स्मृति को मैन्युअल रूप से मुक्त करने की कोई आवश्यकता नहीं है क्योंकि यह स्वचालित रूप से मुक्त हो जाता है जब कार्य जिसे {{code|alloca}}  परावर्तन कहा जाता है, वहाँ अतिप्रवाह का जोखिम सम्मिलित है। और चूंकि एलोका एक तदर्थ विस्तार है जो कई प्रणालियों में देखा जाता है लेकिन POSIX या C मानक में कभी नहीं, स्टैक आधिक्य  की स्थिति में इसका व्यवहार अपरिभाषित है।
 
एलोका का एक सुरक्षित संस्करण जिसे {{code|_malloca}}कहा जाता है, जो त्रुटियों का वर्णन करता है, [[माइक्रोसॉफ़्ट विंडोज़]] पर सम्मिलित है। इसके {{code|_freea}}उपयोग की आवश्यकता है।<ref>{{cite web |title=_malloca|url=https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/malloca?view=vs-2019 |website=Microsoft CRT Documentation |language=en-us}}</ref> [[gnulib|ग्नुलिब]] एक समतुल्य इंटरफ़ेस प्रदान करता है, यद्यपि अतिप्रवाह पर SEH अपवाद प्रक्षेप के अतिरिक्त, यह बड़े आकार का पता चलने पर मॉलोक को प्रतिनिधि करता है।<ref>{{cite web |title=gnulib/malloca.h|url=https://github.com/coreutils/gnulib/blob/master/lib/malloca.h |website=GitHub |access-date=24 November 2019}}</ref> इसी तरह की सुविधा को मैन्युअल लेखा और आकार-जांच का उपयोग करके अनुकरण किया जा सकता है, जैसे कि उपयोग में {{code|alloca_account}} ग्लीबक में।<ref>{{cite web |title=glibc/include/alloca.h|url=https://github.com/bminor/glibc/blob/780684eb04298977bc411ebca1eadeeba4877833/include/alloca.h |publisher=Beren Minor's Mirrors |date=23 November 2019}}</ref>




== स्वचालित स्मृति प्रबंधन ==
== स्वचालित स्मृति प्रबंधन ==
{{see also|Automatic variable|Call stack}}
{{see also|Automatic variable|Call stack}}
कई प्रोग्रामिंग भाषा कार्यान्वयन में, कार्यक्रम के लिए रनटाइम वातावरण स्वचालित रूप से [[सबरूटीन]] के गैर-स्थैतिक [[स्थानीय चर]] के लिए [[कॉल स्टैक]] में स्मृति निर्धारित करता है, जिसे स्वचालित चर कहा जाता है, जब सबरूटीन को कॉल किया जाता है, और स्वचालित रूप से उस स्मृति को रिलीज़ करता है जब सबरूटीन बाहर निकलता है। विशेष घोषणाएं स्थानीय चरों को प्रक्रिया के आह्वान के बीच मूल्यों को बनाए रखने की स्वीकृति  दे सकती हैं, या स्थानीय चरों को अन्य सबरूटीन्स द्वारा एक्सेस करने की स्वीकृति  दे सकती हैं। स्थानीय चरों का स्वत: निर्धारण [[रिकर्सन (कंप्यूटर विज्ञान)]] को उपलब्ध स्मृति द्वारा सीमित गहराई तक संभव बनाता है।
कई प्रोग्रामिंग भाषा कार्यान्वयन में, कार्यक्रम के लिए रनटाइम वातावरण स्वचालित रूप से [[सबरूटीन]] के गैर-स्थैतिक [[स्थानीय चर]] के लिए [[कॉल स्टैक]] में स्मृति नियतन करता है, जिसे स्वचालित चर कहा जाता है, जब सबरूटीन को कॉल किया जाता है, और स्वचालित रूप से उस स्मृति को रिलीज़ करता है जब सबरूटीन बाहर निकलता है। विशेष घोषणाएं स्थानीय चरों को प्रक्रिया के आह्वान के बीच मूल्यों को बनाए रखने की स्वीकृति  दे सकती हैं, या स्थानीय चरों को अन्य सबरूटीन्स द्वारा एक्सेस करने की स्वीकृति  दे सकती हैं। स्थानीय चरों का स्वत: नियतन [[रिकर्सन (कंप्यूटर विज्ञान)]] को उपलब्ध स्मृति द्वारा सीमित गहराई तक संभव बनाता है।


=== कचरा संग्रह ===
=== कचरा संग्रह ===
{{main|Garbage collection (computer science)}}
{{main|Garbage collection (computer science)}}
कचरा संग्रह उन वस्तुओं को निर्धारित स्मृति का स्वचालित रूप से एड्रेस लगाने की एक रणनीति है जो अब किसी प्रोग्राम में उपयोग करने योग्य नहीं हैं, और उस निर्धारित स्मृति को मुक्त स्मृति स्थानों के पूल में लौटाते हैं। यह विधि मैन्युअल स्मृति प्रबंधन के विपरीत है जहां एक प्रोग्रामर स्पष्ट रूप से प्रोग्राम में स्मृति अनुरोधों और स्मृति रिलीज को कोड करता है। जबकि स्वत: कचरा संग्रहण में प्रोग्रामर वर्कलोड को कम करने और कुछ प्रकार की स्मृति निर्धारण बग को रोकने के फायदे हैं, कचरा संग्रह को स्वयं के स्मृति संसाधनों की आवश्यकता होती है, और प्रोसेसर समय के लिए अनुप्रयोग प्रोग्राम के साथ प्रतिस्पर्धा कर सकता है।
कचरा संग्रह उन वस्तुओं को नियतन स्मृति का स्वचालित रूप से एड्रेस लगाने की एक रणनीति है जो अब किसी प्रोग्राम में उपयोग करने योग्य नहीं हैं, और उस नियतन स्मृति को मुक्त स्मृति स्थानों के पूल में लौटाते हैं। यह विधि मैन्युअल स्मृति प्रबंधन के विपरीत है जहां एक प्रोग्रामर स्पष्ट रूप से प्रोग्राम में स्मृति अनुरोधों और स्मृति रिलीज को कोड करता है। जबकि स्वत: कचरा संग्रहण में प्रोग्रामर वर्कलोड को कम करने और कुछ प्रकार की स्मृति नियतन बग को रोकने के फायदे हैं, कचरा संग्रह को स्वयं के स्मृति संसाधनों की आवश्यकता होती है, और प्रोसेसर समय के लिए अनुप्रयोग प्रोग्राम के साथ प्रतिस्पर्धा कर सकता है।


== आभासी स्मृति  वाले प्रणाली ==
== आभासी स्मृति  वाले प्रणाली ==
Line 70: Line 73:
आभासी स्मृति  वास्तविक  हार्डवेयर से स्मृति संगठन को अलग करने की एक विधि है। अनुप्रयोग आभासी एड्रेस के माध्यम से स्मृति पर काम करते हैं। किसी विशेष आभासी स्मृति  एड्रेस तक पहुँचने के लिए अनुप्रयोग द्वारा प्रत्येक प्रयास के परिणाम स्वरूप आभासी स्मृति  एड्रेस को वास्तविक वास्तविक  एड्रेस में अनुवादित किया जाता है।<ref>{{cite book |last1=Tanenbaum |first1=Andrew S. |title=आधुनिक ऑपरेटिंग सिस्टम|date=1992 |publisher=Prentice-Hall |location=Englewood Cliffs, N.J. |isbn=0-13-588187-0 |page=90}}</ref> इस तरह आभासी स्मृति  के जुड़ने से स्मृति प्रणाली और एक्सेस के तरीकों पर बारीक नियंत्रण हो जाता है।
आभासी स्मृति  वास्तविक  हार्डवेयर से स्मृति संगठन को अलग करने की एक विधि है। अनुप्रयोग आभासी एड्रेस के माध्यम से स्मृति पर काम करते हैं। किसी विशेष आभासी स्मृति  एड्रेस तक पहुँचने के लिए अनुप्रयोग द्वारा प्रत्येक प्रयास के परिणाम स्वरूप आभासी स्मृति  एड्रेस को वास्तविक वास्तविक  एड्रेस में अनुवादित किया जाता है।<ref>{{cite book |last1=Tanenbaum |first1=Andrew S. |title=आधुनिक ऑपरेटिंग सिस्टम|date=1992 |publisher=Prentice-Hall |location=Englewood Cliffs, N.J. |isbn=0-13-588187-0 |page=90}}</ref> इस तरह आभासी स्मृति  के जुड़ने से स्मृति प्रणाली और एक्सेस के तरीकों पर बारीक नियंत्रण हो जाता है।


आभासी स्मृति  प्रणाली मेंऑपरेटिंग सिस्टम सीमित करता है कि कैसे एक प्रोसेस (कंप्यूटिंग) स्मृति तक पहुंच सकता है। [[स्मृति सुरक्षा]] नामक यह सुविधा, एक प्रोग्राम में दुर्भावनापूर्ण या खराबी कोड को दूसरे के संचालन में हस्तक्षेप करने से रोकने के लिए निर्धारित नहीं की गई स्मृति को पढ़ने या लिखने की प्रक्रिया को अस्वीकार करने के लिए उपयोग की जा सकती है।
आभासी स्मृति  प्रणाली मेंऑपरेटिंग सिस्टम सीमित करता है कि कैसे एक प्रोसेस (कंप्यूटिंग) स्मृति तक पहुंच सकता है। [[स्मृति सुरक्षा]] नामक यह सुविधा, एक प्रोग्राम में दुर्भावनापूर्ण या खराबी कोड को दूसरे के संचालन में हस्तक्षेप करने से रोकने के लिए नियतन नहीं की गई स्मृति को पढ़ने या लिखने की प्रक्रिया को अस्वीकार करने के लिए उपयोग की जा सकती है।


भले ही विशिष्ट प्रक्रियाओं के लिए निर्धारित स्मृति सामान्य रूप से पृथक होती है, प्रक्रियाओं को कभी-कभी जानकारी साझा करने में सक्षम होने की आवश्यकता होती है। साझा स्मृति (इंटरप्रोसेस कम्युनिकेशन) [[अंतःप्रक्रम संचार]] के लिए सबसे तेज़ तकनीकों में से एक है।
भले ही विशिष्ट प्रक्रियाओं के लिए नियतन स्मृति सामान्य रूप से पृथक होती है, प्रक्रियाओं को कभी-कभी जानकारी साझा करने में सक्षम होने की आवश्यकता होती है। साझा स्मृति (इंटरप्रोसेस कम्युनिकेशन) [[अंतःप्रक्रम संचार]] के लिए सबसे तेज़ तकनीकों में से एक है।


स्मृति को सामान्यतः [[प्रारंभिक भंडारण]] और सेकेंडरी स्टोरेज में एक्सेस रेट द्वारा वर्गीकृत किया जाता है। स्मृति प्रबंधन प्रणाली, अन्य कार्यों के बीच, स्मृति के इन दो स्तरों के बीच सूचना के स्थानांतरण को भी संभालती है।
स्मृति को सामान्यतः [[प्रारंभिक भंडारण]] और सेकेंडरी स्टोरेज में एक्सेस रेट द्वारा वर्गीकृत किया जाता है। स्मृति प्रबंधन प्रणाली, अन्य कार्यों के बीच, स्मृति के इन दो स्तरों के बीच सूचना के स्थानांतरण को भी संभालती है।
Line 81: Line 84:
OS/360 में विवरण इस बात पर निर्भर करते हुए भिन्न होते हैं कि प्रणाली कैसे [[सिस्टम जनरेशन|प्रणाली जनरेशन]] करता है, उदाहरण के लिए, OS/360 और आनुक्रमिक#PCP, OS/360 और आनुक्रमिक#MFT, OS/360 और आनुक्रमिक#MVT के लिए।
OS/360 में विवरण इस बात पर निर्भर करते हुए भिन्न होते हैं कि प्रणाली कैसे [[सिस्टम जनरेशन|प्रणाली जनरेशन]] करता है, उदाहरण के लिए, OS/360 और आनुक्रमिक#PCP, OS/360 और आनुक्रमिक#MFT, OS/360 और आनुक्रमिक#MVT के लिए।


OS/360 MVT में, नौकरी के क्षेत्र के अंदर उप-निर्धारण या साझा प्रणाली कतार क्षेत्र (SQA) सबपूल पर आधारित होता है, आकार में 2 KB के गुणक क्षेत्र—एक सुरक्षा कुंजी द्वारा संरक्षित क्षेत्र का आकार। उपपूलों की संख्या 0-255 है।{{sfn|OS360Sup|loc=|pages=[http://bitsavers.org/pdf/ibm/360/os/R21.7_Apr73/GC28-6646-7_Supervisor_Services_and_Macro_Instructions_Rel_21.7_Sep74.pdf#page=100 82]-85}} एक क्षेत्र के अंदर सबपूल को या तो कार्य की भंडारण सुरक्षा या पर्यवेक्षक की कुंजी, कुंजी 0 सौंपी जाती है। उपपूल 0–127 को कार्य की कुंजी प्राप्त होती है। प्रारंभ में केवल सबपूल शून्य बनाया जाता है, और सभी उपयोगकर्ता संग्रहण अनुरोध सबपूल 0 से संतुष्ट होते हैं, जब तक कि स्मृति अनुरोध में कोई अन्य निर्दिष्ट नहीं किया जाता है। सबपूल 250–255 कार्य की ओर से पर्यवेक्षक द्वारा स्मृति अनुरोधों द्वारा बनाए जाते हैं। इनमें से अधिकांश को कुंजी 0 दी गई है, हालांकि कुछ को कार्य की कुंजी मिलती है। एमएफटी में सबपूल नंबर भी प्रासंगिक हैं, हालांकि विवरण बहुत सरल हैं।{{sfn|OS360Sup|loc=|pages=[http://bitsavers.org/pdf/ibm/360/os/R21.7_Apr73/GC28-6646-7_Supervisor_Services_and_Macro_Instructions_Rel_21.7_Sep74.pdf#page=100 82]}} एमएफटी गतिशील क्षेत्रों के अतिरिक्त ऑपरेटर द्वारा पुन: परिभाषित निश्चित विभाजन का उपयोग करता है और पीसीपी में केवल एक ही विभाजन होता है।
OS/360 MVT में, नौकरी के क्षेत्र के अंदर उप-नियतन या साझा प्रणाली कतार क्षेत्र (SQA) सबपूल पर आधारित होता है, आकार में 2 KB के गुणक क्षेत्र—एक सुरक्षा कुंजी द्वारा संरक्षित क्षेत्र का आकार। उपपूलों की संख्या 0-255 है।{{sfn|OS360Sup|loc=|pages=[http://bitsavers.org/pdf/ibm/360/os/R21.7_Apr73/GC28-6646-7_Supervisor_Services_and_Macro_Instructions_Rel_21.7_Sep74.pdf#page=100 82]-85}} एक क्षेत्र के अंदर सबपूल को या तो कार्य की भंडारण सुरक्षा या पर्यवेक्षक की कुंजी, कुंजी 0 सौंपी जाती है। उपपूल 0–127 को कार्य की कुंजी प्राप्त होती है। प्रारंभ में केवल सबपूल शून्य बनाया जाता है, और सभी उपयोगकर्ता संग्रहण अनुरोध सबपूल 0 से संतुष्ट होते हैं, जब तक कि स्मृति अनुरोध में कोई अन्य निर्दिष्ट नहीं किया जाता है। सबपूल 250–255 कार्य की ओर से पर्यवेक्षक द्वारा स्मृति अनुरोधों द्वारा बनाए जाते हैं। इनमें से अधिकांश को कुंजी 0 दी गई है, हालांकि कुछ को कार्य की कुंजी मिलती है। एमएफटी में सबपूल नंबर भी प्रासंगिक हैं, हालांकि विवरण बहुत सरल हैं।{{sfn|OS360Sup|loc=|pages=[http://bitsavers.org/pdf/ibm/360/os/R21.7_Apr73/GC28-6646-7_Supervisor_Services_and_Macro_Instructions_Rel_21.7_Sep74.pdf#page=100 82]}} एमएफटी गतिशील क्षेत्रों के अतिरिक्त ऑपरेटर द्वारा पुन: परिभाषित निश्चित विभाजन का उपयोग करता है और पीसीपी में केवल एक ही विभाजन होता है।


प्रत्येक उपपूल को उपपूल के अंदर निर्धारित और मुक्त स्मृति ब्लॉकों की पहचान करने वाले नियंत्रण ब्लॉकों की एक सूची द्वारा मैप किया जाता है। स्मृति को पर्याप्त आकार का एक मुक्त क्षेत्र ढूंढकर, या कार्य के क्षेत्र आकार तक उपपूल में अतिरिक्त ब्लॉक निर्धारित करके निर्धारित किया जाता है। निर्धारित स्मृति क्षेत्र के सभी या हिस्से को मुक्त करना संभव है।<ref name="SupvrLogic">{{cite book |last1=IBM Corporation |title=प्रोग्राम लॉजिक: IBM सिस्टम/360 ऑपरेटिंग सिस्टम MVT सुपरवाइज़र|date=May 1973 |pages=107–137 |url=http://bitsavers.org/pdf/ibm/360/os/R21.7_Apr73/plm/GY28-6659-7_MVT_Supervisor_PLM_Rel_21.7_May73.pdf |access-date=Apr 3, 2019}}</ref>
प्रत्येक उपपूल को उपपूल के अंदर नियतन और मुक्त स्मृति ब्लॉकों की पहचान करने वाले नियंत्रण ब्लॉकों की एक सूची द्वारा मैप किया जाता है। स्मृति को पर्याप्त आकार का एक मुक्त क्षेत्र ढूंढकर, या कार्य के क्षेत्र आकार तक उपपूल में अतिरिक्त ब्लॉक नियतन करके नियतन किया जाता है। नियतन स्मृति क्षेत्र के सभी या भाग को मुक्त करना संभव है।<ref name="SupvrLogic">{{cite book |last1=IBM Corporation |title=प्रोग्राम लॉजिक: IBM सिस्टम/360 ऑपरेटिंग सिस्टम MVT सुपरवाइज़र|date=May 1973 |pages=107–137 |url=http://bitsavers.org/pdf/ibm/360/os/R21.7_Apr73/plm/GY28-6659-7_MVT_Supervisor_PLM_Rel_21.7_May73.pdf |access-date=Apr 3, 2019}}</ref>
OS/VS1 के विवरण समान हैं{{sfn|OSVS1Dig|loc=VS1 Storage Subpools|pages=[http://bitsavers.org/pdf/ibm/370/OS_VS1/GC24-5091-5_OS_VS1_Release_6_Programmers_Reference_Digest_197609.pdf#page=114 2.37]-2.39}} MFT और MVT के लिए; OS/VS2 के विवरण MVT के विवरण के समान हैं, सिवाय इसके कि पृष्ठ का आकार 4 KiB है। OS/VS1 और OS/VS2 दोनों के लिए साझा प्रणाली कतार क्षेत्र (SQA) अप्राप्य है।
OS/VS1 के विवरण समान हैं{{sfn|OSVS1Dig|loc=VS1 Storage Subpools|pages=[http://bitsavers.org/pdf/ibm/370/OS_VS1/GC24-5091-5_OS_VS1_Release_6_Programmers_Reference_Digest_197609.pdf#page=114 2.37]-2.39}} MFT और MVT के लिए; OS/VS2 के विवरण MVT के विवरण के समान हैं, सिवाय इसके कि पृष्ठ का आकार 4 KiB है। OS/VS1 और OS/VS2 दोनों के लिए साझा प्रणाली कतार क्षेत्र (SQA) अप्राप्य है।



Revision as of 16:30, 20 December 2022

स्मृति प्रबंधन कंप्यूटर स्मृति पर लागू संसाधन प्रबंधन (कंप्यूटिंग) का एक रूप है। स्मृति प्रबंधन की मौलिक आवश्यकता कार्यक्रमों को उनके अनुरोध पर स्मृति के भागों को गतिशील रूप से नियतन करने के तरीके प्रदान करना है, और जब आवश्यकता नहीं होती है तो इसे पुन: उपयोग के लिए मुक्त करना है। यह किसी भी उन्नत कंप्यूटर प्रणाली के लिए महत्वपूर्ण है जहां किसी भी समय एक से अधिक प्रक्रिया (कंप्यूटिंग) चल रही हो सकती है।[1]

कई तरीके प्रकल्पित किए गए हैं जो स्मृति प्रबंधन की प्रभावशीलता को बढ़ाते हैं। अप्रत्यक्ष स्मृति प्रणाली वास्तविक एड्रेस से एक प्रक्रिया द्वारा उपयोग किए जाने वाले स्मृति एड्रेस को अलग करता है, प्रक्रियाओं को अलग करने की स्वीकृति देता है और रैम की उपलब्ध मात्रा से अधिक वर्चुअल एड्रेस स्पेस के आकार को पेजिंग या स्वैपिंग का उपयोग करके द्वितीयक भंडारण तक बढ़ाया जा सकता है। आभासी स्मृति मेनेजर की गुणवत्ता का समग्र प्रणाली कंप्यूटर के प्रदर्शन पर व्यापक प्रभाव पड़ सकता है।

कुछ ऑपरेटिंग सिस्टम में, उदाहरण OS/360 और आनुक्रमिक,[2] स्मृति ऑपरेटिंग सिस्टम द्वारा प्रबंधित की जाती है।[note 1] अन्य ऑपरेटिंग सिस्टम में, उदा. यूनिक्स की तरह ऑपरेटिंग सिस्टम, स्मृति को एप्लिकेशन स्तर पर प्रबंधित किया जाता है।

एड्रेस स्पेस के अंदर स्मृति प्रबंधन को सामान्यतः मैनुअल स्मृति प्रबंधन या स्वचालित स्मृति प्रबंधन के रूप में वर्गीकृत किया जाता है।

मैनुअल स्मृति प्रबंधन

बाहरी विखंडन का एक उदाहरण

नियतन अनुरोध को पूरा करने के कार्य में पर्याप्त आकार की अप्रयुक्त स्मृति के खंड का पता लगाना सम्मिलित है। एक बड़े समूह से भाग नियतन करके स्मृति अनुरोध संतुष्ट होते हैं[note 2] स्मृति को संग्रह [note 3] या मुफ्त भंडार कहा जाता है। किसी भी समय, संग्रह के कुछ भाग उपयोग में होते हैं, जबकि कुछ मुफ्त (अप्रयुक्त) होते हैं और इस प्रकार भविष्य के नियतन के लिए उपलब्ध होते हैं।

कई विषय कार्यान्वयन को जटिल बनाते हैं, जैसे बाहरी विखंडन, जो तब उत्पन्न होता है जब नियतन स्मृति ब्लॉक (खंड) के बीच कई छोटे अंतराल होते हैं, जो नियतन अनुरोध के लिए उनके उपयोग को अमान्य कर देता है। नियतन का मेटाडेटा भी (व्यक्तिगत रूप से) छोटे नियतन के आकार को बढ़ा सकता है। इसे प्रायः भागों (कंप्यूटिंग) द्वारा प्रबंधित किया जाता है। स्मृति प्रबंधन प्रणाली को यह सुनिश्चित करने के लिए उत्कृष्ट नियतन का पता करना चाहिए कि वे अतिव्याप्त न हों और कोई स्मृति कभी ''नष्ट'' न हो जाए (अर्थात कि कोई स्मृति प्रकट न हो)।

दक्षता

लागू किया गया विशिष्ट सक्रिय स्मृति नियतन एल्गोरिथम प्रदर्शन को महत्वपूर्ण रूप से प्रभावित कर सकता है। डिजिटल उपकरण संस्था द्वारा 1994 में किए गए एक अध्ययन में विभिन्न प्रकार के आवंटकों के लिए सम्मिलित ओवरहेड को दिखाया गया है। एकल स्मृति स्लॉट नियतन करने के लिए न्यूनतम औसत निर्देश स्तर लंबाई 52 थी (जैसा कि विभिन्न प्रकार के सॉफ़्टवेयर पर निर्देश स्तर की रूपरेखा (कंप्यूटर प्रोग्रामिंग) के साथ मापा जाता है)।[1]


कार्यान्वयन

चूंकि नियतन का यथावत् स्थान पहले से ज्ञात नहीं है, स्मृति को अप्रत्यक्ष रूप से, सामान्यतः एक पॉइंटर संदर्भ (कंप्यूटर विज्ञान) के माध्यम से अभिगम्य किया जाता है। स्मृति क्षेत्र को व्यवस्थित करने और भागों को नियतन करने और हटाने के लिए उपयोग किया जाने वाला विशिष्ट एल्गोरिथ्म कर्नेल के साथ जुड़ा हुआ है, और निम्न विधियों में से किसी का भी उपयोग कर सकता है:

निश्चित आकार ब्लॉक नियतन

निश्चित-आकार ब्लॉक नियतन, जिसे स्मृति पूल नियतन भी कहा जाता है, स्मृति के निश्चित आकार के ब्लॉक (प्रायः सभी समान आकार) की एक मुफ्त सूची का उपयोग करता है। यह सरल अंतः स्थापित प्रणाली के लिए अच्छी तरह से काम करता है जहां किसी बड़ी वस्तु को नियतन करने की आवश्यकता नहीं होती है, लेकिन विखंडन (कंप्यूटिंग) से ग्रस्त है, विशेष रूप से लंबे स्मृति पतों के साथ। हालांकि, महत्वपूर्ण रूप से कम ओवरहेड के कारण यह विधि उन वस्तुओं के प्रदर्शन में अधिकतम सुधार कर सकती है जिन्हें प्रायः नियतन / डी-नियतन की आवश्यकता होती है और प्रायः वीडियो गेम में इसका उपयोग किया जाता है।

बड्डी ब्लॉक

इस प्रणाली में, स्मृति को केवल एक के अतिरिक्त स्मृति के कई निकाय में नियतन किया जाता है, जहां प्रत्येक निकाय आकार में दो की एक निश्चित शक्ति की स्मृति के ब्लॉक या किसी अन्य सुविधाजनक आकार की प्रगति के ब्लॉक का प्रतिनिधित्व करता है। एक विशेष आकार के सभी ब्लॉकों को एक क्रमबद्ध लिंक्ड सूची या ट्री डेटा संरचना में रखा जाता है और नियतन के समय बनने वाले सभी नए ब्लॉक बाद में उपयोग के लिए उनके संबंधित स्मृति निकाय में जोड़े जाते हैं। यदि उपलब्ध से छोटे आकार का अनुरोध किया जाता है, तो सबसे छोटा उपलब्ध आकार चुना जाता है और विभाजित किया जाता है। परिणामी भागों में से एक का चयन किया जाता है, और अनुरोध पूरा होने तक प्रक्रिया दोहराई जाती है। जब एक ब्लॉक नियतन किया जाता है, तो नियतन अनावश्यक रूप से टूटने वाले ब्लॉक से बचने के लिए सबसे छोटे पर्याप्त बड़े ब्लॉक से प्रारंभ होगा। जब किसी ब्लॉक को मुक्त किया जाता है, तो उसकी तुलना उसके बड्डी से की जाती है। यदि वे दोनों स्वतंत्र हैं, तो वे संयुक्त होते हैं और तदनुसार बड़े आकार की बड्डी-ब्लॉक सूची में रखे जाते हैं।

खंड नियतन

यह स्मृति नियतन क्रियाविधि एक निश्चित प्रकार या आकार की वस्तुओं को उपयुक्त करने के लिए उपयुक्त स्मृति भाग का पूर्व-नियतन करता है।[3] इन भाग को गुप्‍त भंडार कहा जाता है और नियतन को केवल मुफ़्त गुप्‍त भंडार स्लॉट की सूची पर संपर्क रखना होता है। किसी वस्तु का निर्माण किसी भी मुफ्त गुप्त भंडार स्लॉट का उपयोग करेगा और किसी वस्तु को नष्ट करने से मुफ़्त गुप्त भंडार स्लॉट सूची में एक स्लॉट वापस आ जाएगा। यह तकनीक स्मृति विखंडन को कम करती है और कुशल है क्योंकि स्मृति के उपयुक्त भाग की खोज करने की कोई आवश्यकता नहीं है, क्योंकि कोई भी खुला स्लॉट पर्याप्त होगा।

स्टैक नियतन

कई यूनिक्स-जैसी प्रणालियाँ और साथ ही माइक्रोसॉफ़्ट विंडोज़ नामक एक कार्य को लागू करते हैं alloca स्टैक स्मृति को गतिशील रूप से हीप-आधारित के समान नियतन करने के लिए malloc. एक कंपाइलर सामान्यतः इसे स्टैक पॉइंटर में कुशलतापूर्वक प्रयोग करने वाले पंक्तिबद्धता निर्देशों में अनुवाद करता है।[4] हालाँकि इस तरह नियतन स्मृति को मैन्युअल रूप से मुक्त करने की कोई आवश्यकता नहीं है क्योंकि यह स्वचालित रूप से मुक्त हो जाता है जब कार्य जिसे alloca परावर्तन कहा जाता है, वहाँ अतिप्रवाह का जोखिम सम्मिलित है। और चूंकि एलोका एक तदर्थ विस्तार है जो कई प्रणालियों में देखा जाता है लेकिन POSIX या C मानक में कभी नहीं, स्टैक आधिक्य की स्थिति में इसका व्यवहार अपरिभाषित है।

एलोका का एक सुरक्षित संस्करण जिसे _mallocaकहा जाता है, जो त्रुटियों का वर्णन करता है, माइक्रोसॉफ़्ट विंडोज़ पर सम्मिलित है। इसके _freeaउपयोग की आवश्यकता है।[5] ग्नुलिब एक समतुल्य इंटरफ़ेस प्रदान करता है, यद्यपि अतिप्रवाह पर SEH अपवाद प्रक्षेप के अतिरिक्त, यह बड़े आकार का पता चलने पर मॉलोक को प्रतिनिधि करता है।[6] इसी तरह की सुविधा को मैन्युअल लेखा और आकार-जांच का उपयोग करके अनुकरण किया जा सकता है, जैसे कि उपयोग में alloca_account ग्लीबक में।[7]


स्वचालित स्मृति प्रबंधन

कई प्रोग्रामिंग भाषा कार्यान्वयन में, कार्यक्रम के लिए रनटाइम वातावरण स्वचालित रूप से सबरूटीन के गैर-स्थैतिक स्थानीय चर के लिए कॉल स्टैक में स्मृति नियतन करता है, जिसे स्वचालित चर कहा जाता है, जब सबरूटीन को कॉल किया जाता है, और स्वचालित रूप से उस स्मृति को रिलीज़ करता है जब सबरूटीन बाहर निकलता है। विशेष घोषणाएं स्थानीय चरों को प्रक्रिया के आह्वान के बीच मूल्यों को बनाए रखने की स्वीकृति दे सकती हैं, या स्थानीय चरों को अन्य सबरूटीन्स द्वारा एक्सेस करने की स्वीकृति दे सकती हैं। स्थानीय चरों का स्वत: नियतन रिकर्सन (कंप्यूटर विज्ञान) को उपलब्ध स्मृति द्वारा सीमित गहराई तक संभव बनाता है।

कचरा संग्रह

कचरा संग्रह उन वस्तुओं को नियतन स्मृति का स्वचालित रूप से एड्रेस लगाने की एक रणनीति है जो अब किसी प्रोग्राम में उपयोग करने योग्य नहीं हैं, और उस नियतन स्मृति को मुक्त स्मृति स्थानों के पूल में लौटाते हैं। यह विधि मैन्युअल स्मृति प्रबंधन के विपरीत है जहां एक प्रोग्रामर स्पष्ट रूप से प्रोग्राम में स्मृति अनुरोधों और स्मृति रिलीज को कोड करता है। जबकि स्वत: कचरा संग्रहण में प्रोग्रामर वर्कलोड को कम करने और कुछ प्रकार की स्मृति नियतन बग को रोकने के फायदे हैं, कचरा संग्रह को स्वयं के स्मृति संसाधनों की आवश्यकता होती है, और प्रोसेसर समय के लिए अनुप्रयोग प्रोग्राम के साथ प्रतिस्पर्धा कर सकता है।

आभासी स्मृति वाले प्रणाली

आभासी स्मृति वास्तविक हार्डवेयर से स्मृति संगठन को अलग करने की एक विधि है। अनुप्रयोग आभासी एड्रेस के माध्यम से स्मृति पर काम करते हैं। किसी विशेष आभासी स्मृति एड्रेस तक पहुँचने के लिए अनुप्रयोग द्वारा प्रत्येक प्रयास के परिणाम स्वरूप आभासी स्मृति एड्रेस को वास्तविक वास्तविक एड्रेस में अनुवादित किया जाता है।[8] इस तरह आभासी स्मृति के जुड़ने से स्मृति प्रणाली और एक्सेस के तरीकों पर बारीक नियंत्रण हो जाता है।

आभासी स्मृति प्रणाली मेंऑपरेटिंग सिस्टम सीमित करता है कि कैसे एक प्रोसेस (कंप्यूटिंग) स्मृति तक पहुंच सकता है। स्मृति सुरक्षा नामक यह सुविधा, एक प्रोग्राम में दुर्भावनापूर्ण या खराबी कोड को दूसरे के संचालन में हस्तक्षेप करने से रोकने के लिए नियतन नहीं की गई स्मृति को पढ़ने या लिखने की प्रक्रिया को अस्वीकार करने के लिए उपयोग की जा सकती है।

भले ही विशिष्ट प्रक्रियाओं के लिए नियतन स्मृति सामान्य रूप से पृथक होती है, प्रक्रियाओं को कभी-कभी जानकारी साझा करने में सक्षम होने की आवश्यकता होती है। साझा स्मृति (इंटरप्रोसेस कम्युनिकेशन) अंतःप्रक्रम संचार के लिए सबसे तेज़ तकनीकों में से एक है।

स्मृति को सामान्यतः प्रारंभिक भंडारण और सेकेंडरी स्टोरेज में एक्सेस रेट द्वारा वर्गीकृत किया जाता है। स्मृति प्रबंधन प्रणाली, अन्य कार्यों के बीच, स्मृति के इन दो स्तरों के बीच सूचना के स्थानांतरण को भी संभालती है।

== OS/360 और आनुक्रमिक == में स्मृति प्रबंधन आईबीएम प्रणाली/360 आभासी स्मृति का समर्थन नहीं करता है।[note 4] नौकरी (कंप्यूटिंग) का स्मृति आइसोलेशन वैकल्पिक रूप से स्मृति प्रोटेक्शन#प्रोटेक्शन कीज का उपयोग करके पूरा किया जाता है, प्रत्येक जॉब के लिए स्टोरेज को एक अलग कुंजी, पर्यवेक्षक के लिए 0 या 1-15 असाइन किया जाता है। OS/360 और उत्तराधिकारियों में स्मृति प्रबंधन | OS/360 एक पर्यवेक्षी कार्यक्रम कार्य है। भंडारण का उपयोग करने का अनुरोध किया गया है GETMAIN मैक्रो और का उपयोग कर मुक्त FREEMAIN मैक्रो, जिसके परिणामस्वरूप ऑपरेशन करने के लिए पर्यवेक्षक (पर्यवेक्षक कॉल निर्देश) को कॉल किया जाता है।

OS/360 में विवरण इस बात पर निर्भर करते हुए भिन्न होते हैं कि प्रणाली कैसे प्रणाली जनरेशन करता है, उदाहरण के लिए, OS/360 और आनुक्रमिक#PCP, OS/360 और आनुक्रमिक#MFT, OS/360 और आनुक्रमिक#MVT के लिए।

OS/360 MVT में, नौकरी के क्षेत्र के अंदर उप-नियतन या साझा प्रणाली कतार क्षेत्र (SQA) सबपूल पर आधारित होता है, आकार में 2 KB के गुणक क्षेत्र—एक सुरक्षा कुंजी द्वारा संरक्षित क्षेत्र का आकार। उपपूलों की संख्या 0-255 है।[9] एक क्षेत्र के अंदर सबपूल को या तो कार्य की भंडारण सुरक्षा या पर्यवेक्षक की कुंजी, कुंजी 0 सौंपी जाती है। उपपूल 0–127 को कार्य की कुंजी प्राप्त होती है। प्रारंभ में केवल सबपूल शून्य बनाया जाता है, और सभी उपयोगकर्ता संग्रहण अनुरोध सबपूल 0 से संतुष्ट होते हैं, जब तक कि स्मृति अनुरोध में कोई अन्य निर्दिष्ट नहीं किया जाता है। सबपूल 250–255 कार्य की ओर से पर्यवेक्षक द्वारा स्मृति अनुरोधों द्वारा बनाए जाते हैं। इनमें से अधिकांश को कुंजी 0 दी गई है, हालांकि कुछ को कार्य की कुंजी मिलती है। एमएफटी में सबपूल नंबर भी प्रासंगिक हैं, हालांकि विवरण बहुत सरल हैं।[10] एमएफटी गतिशील क्षेत्रों के अतिरिक्त ऑपरेटर द्वारा पुन: परिभाषित निश्चित विभाजन का उपयोग करता है और पीसीपी में केवल एक ही विभाजन होता है।

प्रत्येक उपपूल को उपपूल के अंदर नियतन और मुक्त स्मृति ब्लॉकों की पहचान करने वाले नियंत्रण ब्लॉकों की एक सूची द्वारा मैप किया जाता है। स्मृति को पर्याप्त आकार का एक मुक्त क्षेत्र ढूंढकर, या कार्य के क्षेत्र आकार तक उपपूल में अतिरिक्त ब्लॉक नियतन करके नियतन किया जाता है। नियतन स्मृति क्षेत्र के सभी या भाग को मुक्त करना संभव है।[11] OS/VS1 के विवरण समान हैं[12] MFT और MVT के लिए; OS/VS2 के विवरण MVT के विवरण के समान हैं, सिवाय इसके कि पृष्ठ का आकार 4 KiB है। OS/VS1 और OS/VS2 दोनों के लिए साझा प्रणाली कतार क्षेत्र (SQA) अप्राप्य है।

MVS में एड्रेस स्पेस में एक अतिरिक्त पेजेबल शेयर्ड एरिया, सामान्य भंडारण क्षेत्र (CSA) और एक अतिरिक्त प्राइवेट एरिया, प्रणाली कार्य क्षेत्र (SWA) सम्मिलित होता है। साथ ही, भंडारण कुंजी 0-7 सभी विशेषाधिकार प्राप्त कोड द्वारा उपयोग के लिए आरक्षित हैं।

यह भी देखें

टिप्पणियाँ

  1. However, the run-time environment for a language processor may subdivide the memory dynamically acquired from the operating system, e.g., to implement a stack.
  2. In some operating systems, e.g., OS/360, the free storage may be subdivided in various ways, e.g., subpools in OS/360, below the line, above the line and above the bar in z/OS.
  3. Not to be confused with the unrelated heap data structure.
  4. Except on the Model 67


संदर्भ

  1. 1.0 1.1 Detlefs, D.; Dosser, A.; Zorn, B. (June 1994). "बड़े सी और सी ++ प्रोग्राम में मेमोरी आवंटन लागत" (PDF). Software: Practice and Experience. 24 (6): 527–542. CiteSeerX 10.1.1.30.3073. doi:10.1002/spe.4380240602. S2CID 14214110.
  2. "Main Storage Allocation" (PDF). IBM Operating System/360 Concepts and Facilities (PDF). 1965. p. 74. Retrieved Apr 3, 2019. {{cite book}}: |work= ignored (help)
  3. Silberschatz, Abraham; Galvin, Peter B. (2004). ऑपरेटिंग सिस्टम की अवधारणाएँ. Wiley. ISBN 0-471-69466-5.
  4. alloca(3) – Linux Programmer's Manual – Library Functions
  5. "_malloca". Microsoft CRT Documentation (in English).
  6. "gnulib/malloca.h". GitHub. Retrieved 24 November 2019.
  7. "glibc/include/alloca.h". Beren Minor's Mirrors. 23 November 2019.
  8. Tanenbaum, Andrew S. (1992). आधुनिक ऑपरेटिंग सिस्टम. Englewood Cliffs, N.J.: Prentice-Hall. p. 90. ISBN 0-13-588187-0.
  9. OS360Sup, pp. 82-85.
  10. OS360Sup, pp. 82.
  11. IBM Corporation (May 1973). प्रोग्राम लॉजिक: IBM सिस्टम/360 ऑपरेटिंग सिस्टम MVT सुपरवाइज़र (PDF). pp. 107–137. Retrieved Apr 3, 2019.
  12. OSVS1Dig, pp. 2.37-2.39, VS1 Storage Subpools.
OS360Sup
OS Release 21 IBM System/360 Operating System Supervisor Services and Macro Instructions (PDF). September 1974. GC28-6646-7. {{cite book}}: |work= ignored (help)
OSVS1Dig
OS/VS1 Programmer's Reference Digest Release 6 (PDF). November 1975. GC24-5091-5. {{cite book}}: |work= ignored (help)


अग्रिम पठन


इस पेज में लाएड्रेस आंतरिक लिंक की सूची

  • स्मृति एड्रेस
  • कंप्यूटर का प्रदर्शन
  • UNIX- जैसे
  • मैनुअल स्मृति प्रबंधन
  • चंकिंग (कंप्यूटिंग)
  • निर्देश पथ की लंबाई
  • सूचक (कंप्यूटर प्रोग्रामिंग)
  • वृक्ष डेटा संरचना
  • दो की शक्ति
  • साझा स्मृति (इंटरप्रोसेस संचार)

बाहरी संबंध