2012-04-25 17 views
5

32 बिट लिनक्स सिस्टम पर, एक प्रक्रिया 4 जीबी वर्चुअल एड्रेस स्पेस तक पहुंच सकती है; हालांकि, प्रक्रियाओं में से किसी एक को आरक्षित करने में अलग-अलग डिग्री में रूढ़िवादी प्रतीत होता है। तो एक प्रोग्राम जो मॉलोक का उपयोग करता है कभी-कभी एक सिस्कल sbrk/brk द्वारा अपना डेटा सेगमेंट बढ़ाएगा। यहां तक ​​कि उन पृष्ठों को भौतिक स्मृति में अभी तक दावा नहीं किया गया है। जो मैं पूरी तरह से समझ नहीं पा रहा हूं, यही कारण है कि हमें पहले स्थान पर क्यों जाना है, क्यों न केवल मुझे 4 जीबी एड्रेस स्पेस दें, जब तक कि हम उन ब्लॉकों को स्पर्श/दावा न करें, यह अनिवार्य रूप से एक नि: शुल्क ऑपरेशन सही है?वर्चुअल मेमोरी और एसआरबी

उत्तर

5

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

इसके अलावा, यह स्पष्ट (और कम स्पष्ट) दक्षता कारणों के संदर्भ के इलाके को बनाए रखने के लिए प्राथमिक है। अगर आपको अपने पता स्थान में किसी भी स्थान से लिखने और पढ़ने की अनुमति दी गई थी, तो आप शर्त लगा सकते हैं कि कुछ लोग ऐसा ही करेंगे।

+0

"साझा स्मृति (जो वास्तव में सिर्फ एक वास्तविक फ़ाइल के बिना एक फ़ाइल मैपिंग कर रहा है unmap करने के लिए यदि आप एक नया साझा लाइब्रेरी या mmap में लोड होगा) एक ही है। इसे कहीं जाना है, और ओएस को यह सुनिश्चित करना होगा कि यह कुछ ओवरराइट किए बिना इसे रख सके। "मैं देखता हूं कि आप क्या कह रहे हैं (मुझे लगता है), क्योंकि मॉलोक एमएमएपी (अज्ञात और निजी के साथ) कॉल करता है, मुझे विश्वास है और यह हो सकता है sbrk को कॉल न करें, लेकिन यदि प्रोग्राम init malloc ने ब्रैक (4 जीबी) किया है तो यह sscall को sbrk आदि को हटा देता है .. लेकिन आप अतिरिक्त मेमोरी मैप फ़ाइलों को मैप नहीं कर सकते हैं या अलग-अलग झंडे के साथ साझा मेमोरी बना सकते हैं। ठीक है ... मुझे लगता है कि मैं –

+0

को समझना शुरू कर रहा है "इसके अलावा, यह स्पष्ट (और कम स्पष्ट) दक्षता कारणों के संदर्भ के इलाके को बनाए रखने के लिए प्राथमिक है" लेकिन अगर मैं 1 जीबी से 4 जीबी ब्लॉक में कुछ मेमोरी लेता हूं और 4 जीबी ब्लॉक में 3.9 जीबी कहता हूं, तो शायद यह एक बार भौतिक स्मृति में बंद हो जाएं जब ताजा आवंटन सीजी में गलती हो जाती है (केवल सही शून्य से बाहर)? –

+0

ऐसा हो सकता है, ऐसा नहीं हो सकता है। आप नहीं जान सकते। – Damon

4

के कई कारण है कि मन के लिए आते हैं की एक जोड़ी है: जब तुच्छ स्मृति

  • Translation lookaside buffer (TLB) तक पहुँचने

    • अब आप segfaults मिलता था बड़ा हो सकता है, संभवतः यह स्थापित करने के लिए और अधिक समय की आवश्यकता होती है ऊपर
    • आपको लगता है कि स्मृति के कुछ वैसे भी() कुछ
  • संबंधित मुद्दे