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

From Vigyanwiki
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{short description|Computer memory management methodology}}
"स्मृति नियतन" यहां पुनर्निर्देश करता है। मस्तिष्क में स्मृति नियतन के लिए, [[तंत्रिका स्मृति नियतन]] देखें।
यह आलेख [[पता स्थान]] में स्मृति प्रबंधन के बारे में है। वास्तविक स्मृति के प्रबंधन के लिए, [[स्मृति प्रबंधन (ऑपरेटिंग सिस्टम)]] देखें।{{More footnotes|date=April 2014}}
{{OS}}
{{OS}}
'''''स्मृति प्रबंधन''''' कंप्यूटर स्मृति पर लागू [[संसाधन प्रबंधन (कंप्यूटिंग)]] का एक रूप है। [[स्मृति]] प्रबंधन की मौलिक आवश्यकता कार्यक्रमों को उनके अनुरोध पर स्मृति के भागों को गतिशील रूप से नियतन करने के तरीके प्रदान करना है, और जब आवश्यकता नहीं होती है तो इसे पुन: उपयोग के लिए मुक्त करना है। यह किसी भी उन्नत कंप्यूटर प्रणाली के लिए महत्वपूर्ण है जहां किसी भी समय एक से अधिक [[प्रक्रिया (कंप्यूटिंग)]] चल रही हो सकती है।<ref name=":0" />
'''''मेमोरी प्रबंधन''''' कंप्यूटर मेमोरी पर लागू [[संसाधन प्रबंधन (कंप्यूटिंग)]] का एक रूप है। [[स्मृति|मेमोरी]] प्रबंधन की मौलिक आवश्यकता कार्यक्रमों को उनके अनुरोध पर मेमोरी के भागों को गतिशील रूप से नियतन करने के तरीके प्रदान करना है, और जब आवश्यकता नहीं होती है तो इसे पुन: उपयोग के लिए मुक्त करना है। यह किसी भी उन्नत कंप्यूटर प्रणाली के लिए महत्वपूर्ण है जहां किसी भी समय एक से अधिक [[प्रक्रिया (कंप्यूटिंग)]] चल रही हो सकती है।<ref name=":0" />


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


कुछ ऑपरेटिंग सिस्टम में, उदाहरण OS/360 और आनुक्रमिक,<ref>{{cite book
कुछ ऑपरेटिंग सिस्टम में, उदाहरण OS/360 और आनुक्रमिक,<ref>{{cite book
Line 20: Line 16:
  | access-date = Apr 3, 2019
  | access-date = Apr 3, 2019
  }}
  }}
</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.}} अन्य ऑपरेटिंग सिस्टम में, उदा. यूनिक्स की तरह ऑपरेटिंग सिस्टम, मेमोरी को एप्लिकेशन स्तर पर प्रबंधित किया जाता है।


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


== मैनुअल स्मृति प्रबंधन ==
== मैनुअल मेमोरी प्रबंधन ==
[[File:External Fragmentation.svg|thumb|450px|बाहरी विखंडन का एक उदाहरण]]
[[File:External Fragmentation.svg|thumb|450px|बाहरी विखंडन का एक उदाहरण]]
{{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> न हो जाए (अर्थात कि कोई [[स्मृति रिसाव|स्मृति]] प्रकट न हो)।
कई विषय कार्यान्वयन को जटिल बनाते हैं, जैसे बाहरी विखंडन, जो तब उत्पन्न होता है जब नियतन मेमोरी ब्लॉक (खंड) के बीच कई छोटे अंतराल होते हैं, जो नियतन अनुरोध के लिए उनके उपयोग को अमान्य कर देता है। नियतन का [[मेटाडेटा (कंप्यूटिंग)|मेटाडेटा]] भी (व्यक्तिगत रूप से) छोटे नियतन के आकार को बढ़ा सकता है। इसे प्रायः भागों (कंप्यूटिंग) द्वारा प्रबंधित किया जाता है। मेमोरी प्रबंधन प्रणाली को यह सुनिश्चित करने के लिए उत्कृष्ट नियतन का एड्रेस करना चाहिए कि वे अतिव्याप्त न हों और कोई मेमोरी कभी <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>




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


==== निश्चित आकार ब्लॉक नियतन ====
==== निश्चित आकार ब्लॉक नियतन ====
{{main|स्मृति निकाय}}
{{main|स्मृति निकाय}}


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


==== बड्डी ब्लॉक ====
==== बड्डी ब्लॉक ====
{{details|बड्डी स्मृति नियतन}}
{{details|बड्डी स्मृति नियतन}}


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


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


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


=== अपशिष्ट संग्रह ===
=== अपशिष्ट संग्रह ===
{{main|अपशिष्ट संग्रह (कंप्यूटर विज्ञान)}}
{{main|अपशिष्ट संग्रह (कंप्यूटर विज्ञान)}}


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


== वास्तविक स्मृति वाली प्रणाली ==
== वास्तविक मेमोरी वाली प्रणाली ==
{{main|स्मृति सुरक्षा|साझा स्मृति ( अंत:प्रक्रम संचार)}}
{{main|स्मृति सुरक्षा|साझा स्मृति ( अंत:प्रक्रम संचार)}}


वास्तविक स्मृति भौतिक हार्डवेयर से स्मृति संगठन को अलग करने की एक विधि है। एप्लिकेशन वास्तविक पता के माध्यम से स्मृति पर काम करते हैं। किसी विशेष वास्तविक स्मृति पता तक पहुँचने के लिए एप्लिकेशन द्वारा प्रत्येक प्रयास के परिणाम स्वरूप वास्तविक स्मृति पता को वास्तविक पता में अनुवादित किया जाता है।<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> इस तरह वास्तविक मेमोरी के जुड़ने से मेमोरी प्रणाली और अभिगम्य के तरीकों पर कणमय नियंत्रण हो जाता है।


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


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


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


== OS/360 और आनुक्रमिक में स्मृति प्रबंधन ==
== OS/360 और आनुक्रमिक में मेमोरी प्रबंधन ==
IBM प्रणाली/360 वास्तविक स्मृति का समर्थन नहीं करता है।{{NoteTag|Except on the Model 67}} प्रकरण का स्मृति वियोजन वैकल्पिक रूप से स्मृति सुरक्षा कुंजी का उपयोग करके पूरा किया जाता है, प्रत्येक प्रकरण के लिए भंडारण को एक अलग कुंजी, पर्यवेक्षक के लिए 0 या 1-15 निर्दिष्ट किया जाता है। OS/360 में स्मृति प्रबंधन एक पर्यवेक्षक कार्य है।<code>GETMAIN</code> मैक्रो का उपयोग करके संग्रहण का अनुरोध किया जाता है और <code>FREEMAIN</code> मैक्रो का उपयोग करके मुक्त किया जाता है, जिसके परिणामस्वरूप संचालन करने के लिए पर्यवेक्षक (SVC) को निरीक्षण किया जाता है।
IBM प्रणाली/360 वास्तविक मेमोरी का समर्थन नहीं करता है।{{NoteTag|Except on the Model 67}} प्रकरण का मेमोरी वियोजन वैकल्पिक रूप से मेमोरी सुरक्षा कुंजी का उपयोग करके पूरा किया जाता है, प्रत्येक प्रकरण के लिए भंडारण को एक अलग कुंजी, पर्यवेक्षक के लिए 0 या 1-15 निर्दिष्ट किया जाता है। OS/360 में मेमोरी प्रबंधन एक पर्यवेक्षक कार्य है।<code>GETMAIN</code> मैक्रो का उपयोग करके संग्रहण का अनुरोध किया जाता है और <code>FREEMAIN</code> मैक्रो का उपयोग करके मुक्त किया जाता है, जिसके परिणामस्वरूप संचालन करने के लिए पर्यवेक्षक (SVC) को निरीक्षण किया जाता है।


OS/360 में विवरण इस बात पर निर्भर करता है कि प्रणाली कैसे उत्पन्न होती है, उदाहरण के लिए, PCP, MFT, MVT के लिए।
OS/360 में विवरण इस बात पर निर्भर करता है कि प्रणाली कैसे उत्पन्न होती है, उदाहरण के लिए, PCP, MFT, 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 दी गई है, हालांकि कुछ को कार्य की कुंजी मिलती है। MFT में उप-निकाय नंबर भी प्रासंगिक हैं, हालांकि विवरण बहुत सरल हैं।{{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]}} MFT गतिशील क्षेत्रों के अतिरिक्त संचालक द्वारा पुन: परिभाषित निश्चित विभाजन का उपयोग करता है और PCP में केवल एक ही विभाजन होता है।
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 दी गई है, हालांकि कुछ को कार्य की कुंजी मिलती है। MFT में उप-निकाय नंबर भी प्रासंगिक हैं, हालांकि विवरण बहुत सरल हैं।{{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]}} MFT गतिशील क्षेत्रों के अतिरिक्त संचालक द्वारा पुन: परिभाषित निश्चित विभाजन का उपयोग करता है और PCP में केवल एक ही विभाजन होता है।


प्रत्येक उप-निकाय को उप-निकाय के अंदर नियतन और मुक्त स्मृति ब्लॉकों की पहचान करने वाले नियंत्रण ब्लॉकों की एक सूची द्वारा मैप किया जाता है। स्मृति को पर्याप्त आकार का एक मुक्त क्षेत्र पता लगाकर, या कार्य के क्षेत्र आकार तक उप-निकाय में अतिरिक्त ब्लॉक नियतन करके नियतन किया जाता है। नियतन स्मृति क्षेत्र के सभी या भाग को मुक्त करना संभव है।<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) अप्राप्य है।


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


== यह भी देखें ==
== यह भी देखें ==
* [[गतिशील सरणी]]
* [[गतिशील सरणी]]
* [[कचरा संग्रह (कंप्यूटर विज्ञान)|अपशिष्ट संग्रह (कंप्यूटर विज्ञान)]]
* [[कचरा संग्रह (कंप्यूटर विज्ञान)|अपशिष्ट संग्रह (कंप्यूटर विज्ञान)]]
* [[स्मृति से बाहर]]
* [[स्मृति से बाहर|मेमोरी से बाहर]]
* [[क्षेत्र आधारित स्मृति प्रबंधन]]
* [[क्षेत्र आधारित स्मृति प्रबंधन|क्षेत्र आधारित मेमोरी प्रबंधन]]


== टिप्पणियाँ ==
== टिप्पणियाँ ==
Line 142: Line 138:
==इस पेज में लाएड्रेस आंतरिक लिंक की सूची==
==इस पेज में लाएड्रेस आंतरिक लिंक की सूची==


*स्मृति एड्रेस
*मेमोरी एड्रेस
*कंप्यूटर का प्रदर्शन
*कंप्यूटर का प्रदर्शन
*UNIX- जैसे
*UNIX- जैसे
*मैनुअल स्मृति प्रबंधन
*मैनुअल मेमोरी प्रबंधन
*चंकिंग (कंप्यूटिंग)
*चंकिंग (कंप्यूटिंग)
*निर्देश पथ की लंबाई
*निर्देश पथ की लंबाई
Line 151: Line 147:
*वृक्ष डेटा संरचना
*वृक्ष डेटा संरचना
*दो की शक्ति
*दो की शक्ति
*साझा स्मृति (इंटरप्रोसेस संचार)
*साझा मेमोरी (इंटरप्रोसेस संचार)
== बाहरी संबंध ==
== बाहरी संबंध ==
{{Wikibooks}}
{{Wikibooks}}
Line 169: Line 165:
{{Memory management navbox}}
{{Memory management navbox}}
{{Authority control}}
{{Authority control}}
[[Category:स्मृति प्रबंधन| ]]
[[Category:कंप्यूटर वास्तुकला]]


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 français-language sources (fr)]]
[[Category:CS1 maint]]
[[Category:CS1 Ελληνικά-language sources (el)]]
[[Category:Citation Style 1 templates|W]]
[[Category:Collapse templates]]
[[Category:Created On 14/12/2022]]
[[Category:Created On 14/12/2022]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite web]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates used by AutoWikiBrowser|Cite web]]
[[Category:Templates using TemplateData]]
[[Category:Webarchive template wayback links]]
[[Category:Wikipedia fully protected templates|Cite web]]
[[Category:Wikipedia metatemplates]]
[[Category:कंप्यूटर वास्तुकला]]
[[Category:स्मृति प्रबंधन| ]]

Latest revision as of 17:46, 22 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 और आनुक्रमिक में मेमोरी प्रबंधन

IBM प्रणाली/360 वास्तविक मेमोरी का समर्थन नहीं करता है।[note 4] प्रकरण का मेमोरी वियोजन वैकल्पिक रूप से मेमोरी सुरक्षा कुंजी का उपयोग करके पूरा किया जाता है, प्रत्येक प्रकरण के लिए भंडारण को एक अलग कुंजी, पर्यवेक्षक के लिए 0 या 1-15 निर्दिष्ट किया जाता है। OS/360 में मेमोरी प्रबंधन एक पर्यवेक्षक कार्य है।GETMAIN मैक्रो का उपयोग करके संग्रहण का अनुरोध किया जाता है और FREEMAIN मैक्रो का उपयोग करके मुक्त किया जाता है, जिसके परिणामस्वरूप संचालन करने के लिए पर्यवेक्षक (SVC) को निरीक्षण किया जाता है।

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

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

प्रत्येक उप-निकाय को उप-निकाय के अंदर नियतन और मुक्त मेमोरी ब्लॉकों की पहचान करने वाले नियंत्रण ब्लॉकों की एक सूची द्वारा मैप किया जाता है। मेमोरी को पर्याप्त आकार का एक मुक्त क्षेत्र एड्रेस लगाकर, या कार्य के क्षेत्र आकार तक उप-निकाय में अतिरिक्त ब्लॉक नियतन करके नियतन किया जाता है। नियतन मेमोरी क्षेत्र के सभी या भाग को मुक्त करना संभव है।[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- जैसे
  • मैनुअल मेमोरी प्रबंधन
  • चंकिंग (कंप्यूटिंग)
  • निर्देश पथ की लंबाई
  • सूचक (कंप्यूटर प्रोग्रामिंग)
  • वृक्ष डेटा संरचना
  • दो की शक्ति
  • साझा मेमोरी (इंटरप्रोसेस संचार)

बाहरी संबंध