मेमोरी प्रबंधन: 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
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}} मैनुअल मेमोरी प्रबंधन ==
== {{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>




== स्वचालित स्मृति प्रबंधन ==
== स्वचालित स्मृति प्रबंधन ==
{{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 सभी विशेषाधिकार प्राप्त कोड द्वारा उपयोग के लिए आरक्षित हैं।


== यह भी देखें ==
== यह भी देखें ==
Line 137: Line 137:
*कंप्यूटर का प्रदर्शन
*कंप्यूटर का प्रदर्शन
*UNIX- जैसे
*UNIX- जैसे
*मैनुअल मेमोरी प्रबंधन
*मैनुअल स्मृति प्रबंधन
*चंकिंग (कंप्यूटिंग)
*चंकिंग (कंप्यूटिंग)
*निर्देश पथ की लंबाई
*निर्देश पथ की लंबाई
Line 143: Line 143:
*वृक्ष डेटा संरचना
*वृक्ष डेटा संरचना
*दो की शक्ति
*दो की शक्ति
*साझा मेमोरी (इंटरप्रोसेस संचार)
*साझा स्मृति (इंटरप्रोसेस संचार)
== बाहरी संबंध ==
== बाहरी संबंध ==
{{Wikibooks}}
{{Wikibooks}}

Revision as of 17:43, 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- जैसे
  • मैनुअल स्मृति प्रबंधन
  • चंकिंग (कंप्यूटिंग)
  • निर्देश पथ की लंबाई
  • सूचक (कंप्यूटर प्रोग्रामिंग)
  • वृक्ष डेटा संरचना
  • दो की शक्ति
  • साझा स्मृति (इंटरप्रोसेस संचार)

बाहरी संबंध