मेमोरी प्रबंधन

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

 * गतिशील सरणी
 * कचरा संग्रह (कंप्यूटर विज्ञान)
 * स्मृति से बाहर
 * क्षेत्र आधारित स्मृति प्रबंधन

संदर्भ

 * OS360Sup
 * OSVS1Dig
 * OSVS1Dig

अग्रिम पठन

 * Donald Knuth. Fundamental Algorithms, Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4. Section 2.5: Dynamic Storage Allocation, pp. 435–456.
 * Simple Memory Allocation Algorithms (originally published on OSDEV Community)

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

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

बाहरी संबंध

 * "Generic Memory Manager" C++ library
 * Sample bit-mapped arena memory allocator in C
 * TLSF: a constant time allocator for real-time systems
 * Slides on Dynamic memory allocation
 * Inside A Storage Allocator
 * The Memory Management Reference
 * The Memory Management Reference, Beginner's Guide Allocation


 * Linux Memory Management
 * Memory Management For System Programmers
 * VMem - general malloc/free replacement. Fast thread safe C++ allocator
 * Operating System Memory Management