क्या स्मृति प्रबंधन के लिए अभी भी एक प्रक्रिया को मारना बुरा माना जाता है?


18

इसलिए मैं स्मृति प्रबंधन के बारे में अपने बॉस के साथ थोड़ी चर्चा कर रहा हूं।

मुझे बताया गया है कि एक प्रक्रिया को मारना याददाश्त को नष्ट करने की अनुमति नहीं देता है। क्या यह अभी भी मामला है, या वह वर्षों पहले था?

हम यहां विंडोज और ओएस एक्स दोनों पर बात कर रहे हैं।


4
मान्य सवाल; फिर से खोलने के लिए वोट करें। ओपी ने ओएस (इस मामले में 2 ओएस) व्यवहार के बारे में विशिष्ट जानकारी के लिए पूछा, न कि अटकलें या बहस।
JRobert

वाह, कभी नहीं सोचा था कि इस सवाल पर इतना ध्यान दिया जाएगा कि तेज .. :) लेकिन हाँ, यह मूल रूप से एक "हाँ / नहीं, क्योंकि .." सवाल था।
जेफ

जवाबों:


7

मुझे इस सामान को सीखते हुए काफी समय हो गया है, लेकिन यहाँ जाता है।

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

यह सब ध्यान में रखते हुए ऑपरेटिंग सिस्टम प्रक्रियाओं पर लागू होता है। यदि आपके पास वर्चुअल मशीन का कुछ तरीका है, और यह एक ही बार में कई वर्चुअल प्रक्रियाएं चला रहा है, तो VM उन्हें आवंटित करने और उनसे निपटने का तरीका तय करने के लिए जिम्मेदार है। ओएस से, हालांकि, यह अभी भी एक प्रक्रिया की तरह दिखता है। तो इस एक मामले में, यदि आपके पास एक वीएम है जो कई प्रक्रियाएं चलाता है, और आप उनमें से एक को वीएम के भीतर मार देते हैं, तो आप शायद होस्ट ओएस में तुरंत मेमोरी वापस नहीं लेंगे। लेकिन आप इसे वीएम में वापस पा लेंगे। यदि आप वीएम को ऑपरेटिंग सिस्टम के भीतर मारते हैं, हालांकि, तो ओएस वीएम को मारने जा रहा है (जो अप्रत्यक्ष रूप से वीएम की प्रक्रियाओं को मारता है) और सभी मेमोरी को पुनः प्राप्त करता है (जिसे कचरा कलेक्टर, मुफ्त) से गुजरने की आवश्यकता नहीं होगी , हटाएँ, या कुछ और)।

अत्यधिक सट्टा:

यदि .NET उसी वीएम पर एक से अधिक .NET ऐप के साथ वर्चुअल मशीन के रूप में चलता है, तो .NET उस मेमोरी पर पकड़ बना सकता है जो अभी तक GCd नहीं है, जब तक कि वह GC को नहीं चलाती है, और Windows को लगता है कि .NET है यह वास्तव में है की तुलना में अधिक का उपयोग करना। (और यदि MS वास्तव में स्लीक था, तो Windows तब .NET को जीसी को तंग मेमोरी स्थितियों में बता सकता था, लेकिन इसका कोई मतलब नहीं है क्योंकि डिस्क स्वैप स्पेस इसके लिए है।)

अगर .NET ने इस तरह से काम किया है, तो OS अभी भी इसे OS उद्देश्यों के लिए एक प्रक्रिया के रूप में सोचेगा, जो यह तय करने की जिम्मेदारी लेता है कि क्या रखना है और क्या फेंकना है, और यह सामान्य रूप से विंडोज की समस्या नहीं है कि वह एक प्रक्रिया बताए जिसकी उसे आवश्यकता है मैमोरी डीलिंग शुरू करने के लिए। किस बिंदु पर यह अनुमान योग्य है कि MS .NET के लिए एक विशेष API का निर्माण करेगा ताकि .NET प्रक्रियाएँ Windows प्रक्रियाओं की तरह दिखें, सिवाय इसके कि वे नहीं हैं, यही वजह है कि लोग सोच सकते हैं कि प्रक्रिया मेमोरी डीलॉक्लेट नहीं हो रही थी। यह वाकई; यह सिर्फ इतना है कि आप गलत प्रक्रिया को देख रहे हैं।

मैं .NET के बारे में पर्याप्त नहीं जानता कि यह वास्तव में उस तरह से काम करता है; जावा वीएम निश्चित रूप से नहीं करता है।

अटकलों का अंत।

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


उत्कृष्ट जवाब; अभी भी मेरा पोस्ट किया है क्योंकि आप केवल कुछ सेकंड आगे थे। :)
साइमन रिक्टर

8

मेरे अनुभव में कोई समस्या नहीं है, मार डालो।

एक उदाहरण के रूप में, यदि आपके पास 4 जीबी रैम है, तो 3 जीबी जिसका उपयोग एक गेम द्वारा किया जाता है और आप गेम प्रक्रिया को मार देते हैं, आप गेम को बिना मुद्दों के पुनः आरंभ कर सकते हैं और इसमें फिर से प्रक्रिया पर 3 जीबी रैम होगा।


सहमत हैं, यह सही लगता है कि यह "क्लीन-अप" करने में सक्षम नहीं होगा, लेकिन मैंने देखा नहीं है कि एक समस्या के रूप में Sirex कहा गया है। NT में इन प्रक्रियाओं को अलग किया जाना चाहिए था, लेकिन win98 में भी यह समस्या नहीं थी। यदि आप इसे मार सकते हैं तो यह सबसे दूर चला जाएगा। तार्किक रूप से कोई व्यक्ति इसे बंद करने या पहले इसे बंद करने के लिए सिस्टम प्राप्त करने की कोशिश करेगा, और फिर इसे वास्तव में इसे दिए गए अंतिम अवसर के रूप में मारा जा सकता है।
Psycogeek

8

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

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

विशेष संसाधन हैं जो उन्हें बनाने वाली प्रक्रिया से बचते हैं, उदाहरण के लिए, निरंतर नाम साझा स्मृति आवंटन बनाना संभव है जो इंटरप्रोसेस संचार में उपयोग किया जा सकता है। ये शायद ही कभी इस्तेमाल किए जाते हैं, ठीक है क्योंकि ओएस यह निर्धारित नहीं कर सकता है कि क्या वे अभी भी आवश्यक हैं।

अन्य ऑपरेटिंग सिस्टम में, कभी-कभी कोई स्पष्ट प्रक्रिया अलग नहीं होती है; यह व्यक्तिगत अनुप्रयोगों पर सफाई का बोझ डालता है।

एक प्रक्रिया को जबरन बंद करने से प्रक्रिया को समाप्त करने के लिए इसे साफ करने का कोई मौका दिए बिना समाप्त कर दिया जाएगा; यदि OS में सभी संसाधनों की पूरी सूची है, तो इसका कोई प्रतिकूल प्रभाव नहीं है।


5

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.