2010-06-21 11 views
10

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

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

हार्डवेयर का उपयोग ग्राफिक्स परिचालन में तेजी लाने, नेटवर्क स्टैक के विभिन्न हिस्सों को ऑफ़लोड करने, और क्रिप्टोग्राफिक एल्गोरिदम और ऑडियो/वीडियो कोडेक्स को हार्डवेयर में अक्सर लागू किया जाता है, क्यों उच्च स्तरीय मेमोरी प्रबंधन के लिए ब्लॉक नहीं बना सकते? ऐसा लगता है कि यह सर्वव्यापी है, फिर भी मुझे कोई हार्डवेयर-समर्थित कार्यान्वयन नहीं पता है।

यह मेरे लिए एक संदिग्ध क्षेत्र का एक सा हार्डवेयर ज्ञान की मेरी कमी को देखते हुए, लेकिन मैं सुनने के लिए इच्छुक हूँ

  1. अगर वहाँ सब पर ऐसी बात (कम से कम अनुसंधान स्तर पर) है, या
  2. पारंपरिक मेमोरी प्रबंधन, या वैकल्पिक रूप से
  3. पर कोई लाभ नहीं देगा या नहीं, हार्डवेयर में ऐसी चीज बनाने के लिए क्यों संभव नहीं है?

उत्तर

5

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

अब तक ज्ञान की वर्तमान स्थिति यह है कि समय-समय पर विशेष सुविधाओं को जोड़ने के बजाय सीपीयू के सामान्य उद्देश्य के उपयोग के लिए अनुकूलित करना बेहतर होता है।

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

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

मेमोरी प्रबंधन सुधारों के लिए अभी भी बहुत सी जगह है जो कुछ उच्च स्तर के कचरा संग्रहण सुविधाओं के लिए अधिक महत्वपूर्ण हैं।

10

सिद्धांत में आप हार्डवेयर में स्मृति प्रबंधन समेत एक पूर्ण जावा वीएम लागू कर सकते हैं, और मेरा मानना ​​है कि कुछ शोध परियोजनाएं हैं (कोशिश करें) ऐसा करें। लेकिन वहाँ कई अच्छे कारण हैं नहीं हार्डवेयर में सामान लागू करने के लिए:

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

अंत में, प्रत्येक सुविधा के लिए, आपको इन लागतों के बीच व्यापार-बंद करना होगा, और आपके पास लाभ (तेज़ या निचला संचालित निष्पादन) होगा।

स्मृति प्रबंधन के लिए, जो आमतौर पर जटिल एल्गोरिदम होते हैं लेकिन यह अक्सर नहीं चलते हैं, लाभ छोटे होंगे (आप 10x तक कचरा संग्रहण तेज करने में सक्षम हो सकते हैं, लेकिन अगर इसमें केवल 1% शुरू करने के लिए निष्पादन समय, परेशान क्यों?) दूसरी तरफ, लागत एक बड़ी चिप होगी जहां अधिकांश क्षेत्र बर्बाद हो गया है क्योंकि यह ज्यादातर समय निष्क्रिय है ...

+1

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

+1

पीएस जबकि मैं सहमत हूं कि सभी प्रकार के सिस्टमों को इसकी आवश्यकता नहीं हो सकती है (उदा। कुछ मोबाइल, या कम अंत एम्बेडेड सिस्टम)। –

+1

वह 1% कहानियों वाला था, मुझे वास्तविक संख्या नहीं पता ;-) मुझे लगता है कि महत्वपूर्ण पथों में malloc() से बचने का कारण यह तथ्य है कि वे असफल हो सकते हैं, या स्वैपिंग या अन्य गैर-निर्धारक व्यवहार का नेतृत्व कर सकते हैं, बल्कि शुद्ध प्रदर्शन से। – Wim

4

हां, कई थे सीपीयू जिनमें मेमोरी मैनेजमेंट और जीसी बनाया गया था। वन एन 320xx सीपीयू का एक कस्टम संस्करण था जिसने Ceres workstation संचालित किया था। यह 34 बिट मेमोरी (यानी 32 बिट डेटा + 2 बिट अतिरिक्त) का इस्तेमाल किया।

इसके कई कारण हैं, जिनके चलते वहाँ जीसी के लिए बहुत कम हार्डवेयर समर्थन आज:

  1. आप एक विशेष mainboard की जरूरत है -> महंगा
  2. आप एक विशेष सीपीयू की जरूरत है -> बहुत महंगा
  3. आप विशेष की जरूरत है सॉफ़्टवेयर जो सीपीयू और मेनबोर्ड
  4. की अतिरिक्त विशेषताओं का उपयोग कर सकता है, जीसी को और अधिक कुशल बनाने के तरीके पर अभी भी बहुत सारे शोध चल रहे हैं। यह एक बहुत ही सक्रिय क्षेत्र है, उस समय की तुलना में जब हम अलग-अलग पिक्सल सेट करके छवियां चित्रित कर रहे थे। जब हम सीखते हैं कि कौन से हिस्सों को मानकीकृत किया जा सकता है, तो इसके लिए हार्डवेयर बनाने का अर्थ होगा।
  5. यह सब प्रोग्राम जो इस सुविधा का उपयोग नहीं करते के लिए स्मृति बर्बाद होता

[संपादित करें] "सामान्य प्रयोजन CPUs" की अगली पीढ़ी शायद एक प्रोग्राम क्षेत्र के साथ आ जाएगा (FPGA) जहां नई परिभाषित कर सकते हैं "असेंबलर ओप-कोड"। इससे सॉफ़्टवेयर को इसकी विशिष्ट आवश्यकताओं के लिए सीपीयू को संशोधित करने की अनुमति मिल जाएगी। यहां हल करने की समस्या एफपीजीए की तेज़ी से लोड करना है ताकि इसकी सामग्री को उनकी प्रक्रियाओं के साथ स्विच किया जा सके।

यह वहाँ विशेषताएं जो आभासी स्मृति प्रबंधन का समर्थन कर रहे हैं

+0

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

+0

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

3

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

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

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

+1

जिस तरह से मैंने इसे कार्यान्वित किया है उसे पूरी तरह से CPU द्वारा नियंत्रित नहीं किया जाता है, बल्कि यह कि सीपीयू इसे लागू करने में मदद करने के लिए कुछ अच्छी तरह से परिभाषित निम्न-स्तरीय प्राइमेटिव प्रदान करता है (जैसे वर्चुअल मेमोरी को एक मोनोलिथिक में जादुई रूप से संभाला नहीं जाता है सीपीयू द्वारा मॉड्यूल, ओएस अभी भी काम करना है)। –

+0

बिल्कुल। प्रोसेसर वर्चुअल मेमोरी मैनेजमेंट का समर्थन करता है जिसमें अंतर्निहित एमएमयू (मेमोरी मैनेजमेंट यूनिट) होता है जो कम स्तरीय एपीआई प्रदान करता है जो ओएस को उच्च स्तरीय एपीआई लागू करने में सक्षम बनाता है। – codymanix

2

एम्बेडेड स्पेस में, अजीइल सिस्टम्स इंक, http://www.ajile.com/ एक चिप उत्पादों पर जेवीएम की एक श्रृंखला का उत्पादन करता है जिसमें वैकल्पिक जीसी है। वे एक एकाधिक जेवीएम सुविधा भी प्रदान करते हैं जहां जावा प्रक्रियाएं पूर्ण स्मृति सुरक्षा के साथ एक निर्धारित, समय-कटा हुआ अनुसूची में अपने स्वयं के वीएम पर स्वतंत्र रूप से निष्पादित होती हैं।

वे तीन जीसी एल्गोरिदम और एक ऑफ मोड की पेशकश करने लगते हैं। इसलिए चिप पर केवल एक चिप पर एक चिप पर एक ओएस की तरह नहीं, एक चिप पर।

+0

यह कुछ हद तक है जो मेरे मन में था, लेकिन सामान्य नहीं। –

1

इस समस्या के इतने सारे अलग-अलग एल्गोरिदम और दृष्टिकोण हैं कि किसी ने अभी तक उनके लिए कोई सामान्य प्राइमेटिव नहीं निकाला है।

+0

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