अंतर्निहित संसाधन अनुप्रयोग में उपयोग की गई RAM का नियंत्रण करते हैं

अंतर्निहित संसाधन अनुप्रयोग में उपयोग की गई RAM का नियंत्रण करते हैं



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

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

परिचय


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

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

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

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

आवेदन में रैम के अकुशल उपयोग के कारण विभिन्न कारक हैं, जो निम्नलिखित प्राथमिक घटनाओं की रचनाएं हैं:

  • रैम के प्लेसमेंट और रिलीज़ के लिए अनुरोधों का बेमेल होना ("लीक");
  • रैम के मुक्त क्षेत्रों के पुन: उपयोग का निम्न स्तर, जो नए क्षेत्रों (विखंडन) के लिए अनुरोधों की ओर जाता है।

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

नीचे इस दृष्टिकोण के संभावित कार्यान्वयन में से एक का एक उदाहरण है।

एंबेडेड कंट्रोल सॉफ्टवेयर


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



बैंड " बी " में मेमोरी को आवंटित करते समय घटनाओं का एक क्रम शामिल होता है जब अंतर्निहित नियंत्रण मोड चालू होता है। यह अनुक्रम पूरी तरह से पहले वर्णित के साथ मेल खाता है, इस अपवाद के साथ कि अनुरोधित मेमोरी को आवंटित करने के बाद, रजिस्टर_रेक्वेस्ट () फ़ंक्शन पर नियंत्रण पारित किया जाता है, जो किए गए अनुरोध के अनुसार आवंटित मेमोरी के पते और आकार के बारे में जानकारी बचाता है।

दरअसल, रैम संसाधनों के लिए अनुरोधों का अवरोधन और पंजीकरण मेमसुपरवाइजर ऑब्जेक्ट द्वारा किया जाता है, जिसे init_memSupervisor () कॉल करके एकल उदाहरण में बनाया जाता है और फिर इसे enable_emSupervisor () या disable_ memSupervisor () कॉल के माध्यम से क्रमशः चालू या बंद किया जा सकता है।
रैम संसाधनों के लिए अनुरोधों को बाधित करने की तकनीक GNU लाइब्रेरी के स्थिर चर के उपयोग पर आधारित है , जैसा कि निम्नलिखित निम्न टुकड़ों में दिखाया गया है।





रैम संसाधनों के लिए सभी संसाधित अनुरोध रिकॉर्ड की एक विशेष तालिका में पंजीकृत होते हैं, जिनमें से सामग्री मेमर्सयूपरवाइज़र.memRegister विशेषता में संग्रहीत की जाती हैं। प्रत्येक प्रविष्टि में निम्नलिखित जानकारी होती है:



तालिका में प्रत्येक रिकॉर्ड प्रोग्राम कोड के एक नियंत्रण बिंदु के साथ जुड़ा हुआ है, जिसके गुजरने के बाद मेमोरी आवंटित की जाती है और अनुरोध पंजीकृत होता है।

पाठ रिपोर्ट जनरेटर ( memSupervisor.genReport (file_name) ) तालिका डेटा का उपयोग करके एक रिपोर्ट और निर्दिष्ट पाठ फ़ाइल में जानकारी (या एप्लिकेशन कंसोल पर आउटपुट) उत्पन्न करता है। MS Excel तालिका में रिपोर्टिंग डेटा डाउनलोड करना और बाद की संगत सेटिंग आपको RAM संसाधनों के उपयोग पर रिपोर्ट डेटा का चित्रमय प्रतिनिधित्व प्राप्त करने की अनुमति देगा।

अंतर्निहित नियंत्रण के लिए इंटरफ़ेस


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



नीचे प्रोग्राम कोड का एक टुकड़ा है जो अंतर्निहित नियंत्रणों के उपयोग को दर्शाता है।







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



यह मॉडल RAM संसाधन प्रबंधन की निम्न समस्याओं की पहचान करने में मदद करता है:

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

नीचे दिए गए आरेख में उल्लिखित 'फू' एप्लीकेशन में मेमोरी प्रबंधन की समस्याएं दिखाई देती हैं।



संक्षिप्त निष्कर्ष


रैम संसाधनों के एकीकृत नियंत्रण के वर्णित साधनों का उपयोग उन मामलों में किया जा सकता है जहां संबंधित सॉफ़्टवेयर उत्पाद अनुपलब्ध हैं और किसी भी कारण से लागू नहीं हैं।

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

निष्कर्ष में, यह ध्यान दिया जाना चाहिए कि सॉफ्टवेयर अनुप्रयोगों में रैम संसाधनों के अंतर्निहित नियंत्रण के कार्यान्वयन के लिए वर्णित दृष्टिकोण में कोई नया समाधान नहीं है। दृष्टिकोण की उपयोगिता कार्यान्वयन की सादगी और व्यावहारिक अनुप्रयोग की उच्च दक्षता में निहित है।

Source: https://habr.com/ru/post/hi464919/


All Articles