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

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


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


कुछ [[ऑपरेटिंग सिस्टम]] में, उदा। OS/360 और उत्तराधिकारी,<ref>{{cite book
कुछ [[ऑपरेटिंग सिस्टम|संचालन  प्रणाली]] में, उदा। OS/360 और आनुक्रमिक,<ref>{{cite book
  |  publisher = IBM Corporation
  |  publisher = IBM Corporation
  |      title = IBM Operating System/360 Concepts and Facilities
  |      title = IBM Operating System/360 Concepts and Facilities
Line 20: Line 20:
  | 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.}} अन्य संचालन  प्रणाली में, उदा। यूनिक्स की तरह संचालन  प्रणाली, स्मृति को अनुप्रयोग स्तर पर प्रबंधित किया जाता है।


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


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


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


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


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


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


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


== वर्चुअल स्मृति वाले सिस्टम ==
== आभासी स्मृति वाले प्रणाली ==
{{main|Memory protection|Shared memory (interprocess communication)}}
{{main|Memory protection|Shared memory (interprocess communication)}}
वर्चुअल स्मृति भौतिक हार्डवेयर से स्मृति संगठन को अलग करने की एक विधि है। एप्लिकेशन वर्चुअल पतों के माध्यम से स्मृति पर काम करते हैं। किसी विशेष वर्चुअल स्मृति एड्रेस तक पहुँचने के लिए एप्लिकेशन द्वारा प्रत्येक प्रयास के परिणामस्वरूप वर्चुअल स्मृति एड्रेस को वास्तविक भौतिक पते में अनुवादित किया जाता है।<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 और आनुक्रमिक == में स्मृति प्रबंधन
आईबीएम सिस्टम/360 वर्चुअल स्मृति का समर्थन नहीं करता है।{{NoteTag|Except on the Model 67}} [[नौकरी (कंप्यूटिंग)]] का स्मृति आइसोलेशन वैकल्पिक रूप से स्मृति प्रोटेक्शन#प्रोटेक्शन कीज का उपयोग करके पूरा किया जाता है, प्रत्येक जॉब के लिए स्टोरेज को एक अलग कुंजी, पर्यवेक्षक के लिए 0 या 1-15 असाइन किया जाता है। OS/360 और उत्तराधिकारियों में स्मृति प्रबंधन | OS/360 एक [[पर्यवेक्षी कार्यक्रम]] कार्य है। भंडारण का उपयोग करने का अनुरोध किया गया है <code>GETMAIN</code> मैक्रो और का उपयोग कर मुक्त <code>FREEMAIN</code> मैक्रो, जिसके परिणामस्वरूप ऑपरेशन करने के लिए पर्यवेक्षक ([[पर्यवेक्षक कॉल निर्देश]]) को कॉल किया जाता है।
आईबीएम प्रणाली/360 आभासी स्मृति का समर्थन नहीं करता है।{{NoteTag|Except on the Model 67}} [[नौकरी (कंप्यूटिंग)]] का स्मृति आइसोलेशन वैकल्पिक रूप से स्मृति प्रोटेक्शन#प्रोटेक्शन कीज का उपयोग करके पूरा किया जाता है, प्रत्येक जॉब के लिए स्टोरेज को एक अलग कुंजी, पर्यवेक्षक के लिए 0 या 1-15 असाइन किया जाता है। OS/360 और उत्तराधिकारियों में स्मृति प्रबंधन | OS/360 एक [[पर्यवेक्षी कार्यक्रम]] कार्य है। भंडारण का उपयोग करने का अनुरोध किया गया है <code>GETMAIN</code> मैक्रो और का उपयोग कर मुक्त <code>FREEMAIN</code> मैक्रो, जिसके परिणामस्वरूप ऑपरेशन करने के लिए पर्यवेक्षक ([[पर्यवेक्षक कॉल निर्देश]]) को कॉल किया जाता है।


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) अप्राप्य है।


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


== यह भी देखें ==
== यह भी देखें ==

Revision as of 21:11, 19 December 2022

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

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

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

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

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

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

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

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

दक्षता

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


कार्यान्वयन

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

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

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

बडी ब्लॉक

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

स्लैब निर्धारण

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

ढेर निर्धारण

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

एलोका का एक सुरक्षित संस्करण कहा जाता है _malloca, जो त्रुटियों की रिपोर्ट करता है, Microsoft Windows पर सम्मिलित है। इसके उपयोग की आवश्यकता है _freea.[5] gnulib एक समतुल्य इंटरफ़ेस प्रदान करता है, यद्यपि अतिप्रवाह पर SEH अपवाद फेंकने के अतिरिक्त, यह बड़े आकार का पता चलने पर malloc को प्रतिनिधि करता है।[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- जैसे
  • मैनुअल स्मृति प्रबंधन
  • चंकिंग (कंप्यूटिंग)
  • निर्देश पथ की लंबाई
  • सूचक (कंप्यूटर प्रोग्रामिंग)
  • वृक्ष डेटा संरचना
  • दो की शक्ति
  • साझा स्मृति (इंटरप्रोसेस संचार)

बाहरी संबंध