2010-06-13 11 views
5

docs से:मेमोरी पेज गलती क्या है?

नोट: कोर डाटा अवधि unfaulting से बचा जाता है, क्योंकि यह भ्रामक है। कोई वर्चुअल मेमोरी पेज गलती "अप्रत्यक्ष" नहीं है। पृष्ठ दोष ट्रिगर, कारण, निकाल दिया गया, या सामने आया। बेशक, आप विभिन्न तरीकों से कर्नेल में स्मृति को रिलीज़ कर सकते हैं ( vm_deallocate, munmap, या sbrk का उपयोग करके)। कोर डेटा इसका वर्णन करता है " ऑब्जेक्ट को गलती में बदलना"।

कोर डेटा में एक गलती अनिवार्य रूप से एक स्मृति पृष्ठ गलती है? मेरे पास स्मृति पृष्ठ क्या है इसके बारे में थोड़ा सा विचार है। मेरा मानना ​​है कि यह एक प्रकार का "स्मृति में कोड का टुकड़ा" है जिसे प्रक्रियाओं और सामानों को निष्पादित करने के लिए आवश्यक है, और जैसे ही ऐप चल रहा है, कोड के टुकड़े स्मृति में "पृष्ठों" के रूप में चूस जाते हैं और उन्हें फेंक दिया जाता है क्योंकि वे नहीं हैं अब और जरूरत है शायद 99% गलत;)

कोई भी?

उत्तर

7

मुझे स्मृति पृष्ठ क्या है इसके बारे में केवल थोड़ी सी जानकारी है। मेरा मानना ​​है कि यह एक प्रकार का "स्मृति में कोड का टुकड़ा" है जिसे प्रक्रियाओं और सामानों को निष्पादित करने के लिए आवश्यक है, और जैसे ही ऐप चल रहा है, कोड के टुकड़े स्मृति में "पृष्ठों" के रूप में चूस जाते हैं और उन्हें फेंक दिया जाता है क्योंकि वे नहीं हैं अब और जरूरत है

सामग्री (यानी कोड और डेटा) स्मृति में मौजूद है।

स्मृति में मौजूद प्रत्येक चीज में एक पता (एक स्मृति पता) है।

स्मृति पता स्थान (उदा। 32-बिट मशीन पर 4 जीबी) को 'पृष्ठों' में बांटा गया है, जहां प्रत्येक पृष्ठ स्मृति का एक संक्षिप्त हिस्सा है (उदाहरण के लिए प्रति पृष्ठ 4KB)।

पता स्थान मैप किया गया है (सीपीयू और ओ/एस द्वारा) रैम में (या संभवतः I/O बंदरगाहों में मैप किया गया है, लेकिन यह एक अलग कहानी है)।

पता स्थान (जैसे 4 जीबी) की तुलना में कम रैम स्थापित (उदाहरण के लिए 1 जीबी) हो सकता है, इसलिए कुछ सामान (जैसे कम से कम हाल ही में उपयोग की जाने वाली सामग्री) को स्वैप किया जा सकता है (ओ/एस द्वारा) डिस्क से एक पेज फ़ाइल पर रैम से। पूरे, अभिन्न पृष्ठ (उदा। 4 केबी भाग) जो स्वैप किए जाते हैं (व्यक्तिगत बाइट्स नहीं)।

जब एप्लिकेशन किसी ऐसे पते तक पहुंचने का प्रयास करता है जो वर्तमान में रैम पर मैप नहीं किया गया है, तो यह एक तथाकथित पृष्ठ गलती है। एक पृष्ठ दोष को संभालने के लिए, हे/एस हो सकता है:

  • नि: शुल्क कुछ रैम, (उदाहरण के लिए हाल ही सबसे कम प्रयोग किया जाता) राम से कुछ गमागमन डिस्क
  • मानचित्र कि नव मुक्त कर दिया करने के लिए अब उपलब्ध रैम के द्वारा वह पता जो एप्लिकेशन
  • डिस्क से रैम में स्वैप करें, जो डिस्क पर उस पते पर होना चाहिए (जिसे अतीत में उस पते से डिस्क में बदल दिया गया था)
  • फिर से शुरू करें एप्लिकेशन जहां यह छोड़ा गया था: एप्लिकेशन उस स्मृति पते तक पहुंचने के लिए फिर से प्रयास करता है, केवल इस बार किसी अन्य पृष्ठ की गलती के बिना।
+1

I आपको पूरी वर्चुअल मेमोरी चीज़ (जैसे मैंने किया) पर चमकते हुए ध्यान न दें, लेकिन आपके द्वारा दिए गए विवरण का स्तर दिया गया है, क्या आपको नहीं लगता कि आपको इसका जिक्र करना चाहिए? जिस तरह से आप इसका वर्णन करते हैं, ऐसा लगता है जैसे प्रत्येक एप्लिकेशन भौतिक स्मृति में मैपिंग कर रहा है। आम तौर पर, जो कुछ भी बदल जाता है वह भौतिक पते से जुड़ा हुआ नहीं है बल्कि आपके अपने आवेदन के दूसरे (आभासी) पृष्ठ है। किसी और के आवेदन को प्रभावित करने के लिए आपके एप्लिकेशन की स्मृति उपयोग विशेषताओं की आवश्यकता नहीं है। – tvanfosson

+1

@tvanfosson यह उल्लेख करने के लिए मेरे पास नहीं हुआ, और अब आपने यह सुझाव दिया है कि मुझे यकीन नहीं है कि इसे सारांशित कैसे किया जाए। लेकिन एक तरह से प्रत्येक एप्लिकेशन * भौतिक स्मृति में मैपिंग है: प्रत्येक एप्लिकेशन पूरे (या अधिकतर) पता स्थान को देखता है जैसे पता स्थान अकेले उस एप्लिकेशन के स्वामित्व में था, और ओ/एस मानचित्र जो रैम को स्थान संबोधित करते हैं । एकाधिक एप्लिकेशन एकाधिक पता स्थान उदाहरणों का तात्पर्य है, और विभिन्न उदाहरण रैम के लिए एक-दूसरे के साथ प्रतिस्पर्धा करते हैं। – ChrisW

+0

यह तय करना कि क्या स्वैप करना है (उदा। इस एप्लिकेशन द्वारा उपयोग किए जाने वाले किसी पृष्ठ को चुनना है या किसी अन्य एप्लिकेशन द्वारा) एक ओ/एस-विशिष्ट कार्यान्वयन विवरण है (और मुझे नहीं पता कि आईफोन के लिए विवरण क्या हैं)। – ChrisW

2

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

यह तंत्र ओएस कार्यान्वयन के अधीन है।
ऑपरेटिंग सिस्टम सिद्धांत की अधिक व्यापक खोज के लिए मैं ए.एस.टेनबेम द्वारा आधुनिक ऑपरेटिंग सिस्टम पुस्तक की सिफारिश करता हूं।

3

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

+0

तो पृष्ठ स्वचालित रूप से स्मृति में लोड हो जाता है, जब पॉइंटर उस स्थान पर इंगित करता है जो वर्तमान में लोड नहीं होता है? – dontWatchMyProfile

+0

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

+0

क्या तथाकथित "स्वैप फ़ाइल" से संबंधित है? – dontWatchMyProfile

संबंधित मुद्दे