लिनक्स स्मृति प्रबंधन अन्य प्रणालियों से अलग है। मुख्य सिद्धांत यह है कि स्मृति का उपयोग नहीं किया जा रहा है स्मृति स्मृति बर्बाद हो रही है। कई मायनों में, लिनक्स बेहतर प्रदर्शन में परिणामस्वरूप (अधिकांश समय) मेमोरी उपयोग को अधिकतम करने की कोशिश करता है।
यह नहीं है कि "लिनक्स में" कुछ भी काम नहीं करता है, लेकिन इसका व्यवहार अपेक्षा से थोड़ा अलग है।
जब स्मृति पृष्ठों को एमएमएपी फ़ाइल से खींचा जाता है, तो ऑपरेटिंग सिस्टम को यह तय करना होता है कि उपयोग करने के लिए कौन से भौतिक मेमोरी पेज रिलीज़ होंगे (या स्वैप आउट)। यह उन पृष्ठों की तलाश करेगा जो स्वैप करना आसान है (तत्काल डिस्क लिखने की आवश्यकता नहीं है) और फिर से उपयोग होने की संभावना कम है।
पागलवाइस() POSIX कॉल सिस्टम को यह बताने के लिए कार्य करता है कि आपका एप्लिकेशन पृष्ठों का उपयोग कैसे करेगा। लेकिन जैसा कि नाम कहता है, यह सलाह है ताकि ऑपरेटिंग सिस्टम पेजिंग और निर्णय लेने में बेहतर साधन हो। यह न तो नीति है और न ही एक आदेश है।
लिनक्स पर मैडवाइस() के प्रभावों का प्रदर्शन करने के लिए, मैंने अपने छात्रों को दिए गए अभ्यासों में से एक को संशोधित किया। complete source code here देखें। मेरा सिस्टम 64-बिट है और इसमें 2 जीबी रैम है, जो अब लगभग 50% उपयोग में है। 2 जीबी फ़ाइल को एमएमएपी करने के लिए प्रोग्राम का उपयोग करके, इसे अनुक्रमिक रूप से पढ़ें और सब कुछ छोड़ दें। यह आरएसएस उपयोग की रिपोर्ट करता है हर 200 एमबी पढ़ा जाता है।परिणाम madvice बिना():
<[email protected]> ~% ./madvtest file.dat n
0 : 3 MB
200 : 202 MB
400 : 402 MB
600 : 602 MB
800 : 802 MB
1000 : 1002 MB
1200 : 1066 MB
1400 : 1068 MB
1600 : 1078 MB
1800 : 1113 MB
2000 : 1113 MB
लिनक्स के आसपास 1 जीबी तक मेमोरी खत्म बातें धक्का पढ़ा गया था रखा। इसके बाद, इसने प्रक्रिया को स्वयं दबाया (क्योंकि अन्य 50% स्मृति अन्य प्रक्रियाओं द्वारा सक्रिय थी) और फ़ाइल के अंत तक स्थिर हो गई।
अब, madvice साथ():
<[email protected]> ~% ./madvtest file.dat y
0 : 3 MB
200 : 202 MB
400 : 402 MB
600 : 494 MB
800 : 501 MB
1000 : 518 MB
1200 : 530 MB
1400 : 530 MB
1600 : 530 MB
1800 : 595 MB
2000 : 788 MB
ध्यान दें कि लिनक्स प्रक्रिया करने के लिए पृष्ठों को आवंटित करने का फैसला किया है केवल जब तक यह लगभग 500 एमबी पर पहुंच गया, और भी जल्दी madvice बिना की तुलना में()। ऐसा इसलिए है क्योंकि उसके बाद, वर्तमान में स्मृति में मौजूद पृष्ठ उन पृष्ठों की तुलना में अधिक मूल्यवान लगते थे जिन्हें इस प्रक्रिया द्वारा अनुक्रमिक पहुंच के रूप में चिह्नित किया गया था। वीएमएम में एक सीमा है जो परिभाषित करती है कि खरीद से पुराने पृष्ठों को कब छोड़ना है।
आप पूछ सकते हैं कि क्यों लिनक्स 500 एमबी तक पृष्ठों को आवंटित करता रहा और जल्द से जल्द नहीं रुक गया, क्योंकि उन्हें अनुक्रमिक पहुंच के रूप में चिह्नित किया गया था। यह है कि या तो सिस्टम के पास पर्याप्त फ्री मेमोरी पेज थे, या अन्य निवासी पृष्ठ चारों ओर रखने के लिए बहुत पुराने थे। प्राचीन पृष्ठों को स्मृति में रखने के बीच जो अब उपयोगी नहीं लग रहा है, और चला रहे प्रोग्राम को सेवा देने के लिए और अधिक पृष्ठ लाने के लिए, लिनक्स दूसरा विकल्प चुनता है।
भले ही उन्हें अनुक्रमिक पहुंच के रूप में चिह्नित किया गया हो, यह केवल एक सलाह थी। एप्लिकेशन अभी भी उन पृष्ठों पर वापस जाना चाहता है और उन्हें फिर से पढ़ना चाहता है। या सिस्टम में एक और आवेदन। मैडवाइस() कॉल केवल यही कहता है कि एप्लिकेशन स्वयं क्या कर रहा है, लिनक्स बड़ी तस्वीर को ध्यान में रखता है।
यह प्रासंगिक हो सकता है या नहीं भी हो सकता है, लेकिन यह जानना उपयोगी होना चाहिए: क्या आप 32-बिट या 64-बिट सिस्टम का उपयोग कर रहे हैं? क्या आप जानते हैं कि आपको 32-बिट सिस्टम में 1 जीबी को एमएमएपी नहीं करना चाहिए? (भले ही आप 64-बिट सिस्टम का उपयोग कर रहे हों, आप पोर्टेबिलिटी के बारे में चिंतित हो सकते हैं)। – Juliano
सभी सिस्टम 64 बिट (64 बिट फ़ाइल पॉइंटर्स और ऑफ़सेट के साथ) हैं और मैं सफलतापूर्वक 40 जीबी फाइलों को मैप कर सकता हूं। मैंने पुनरुत्पादन के लिए समस्या को 1 जीबी तक उबाल दिया। – Dave
@ सेवन। ऐसे मामले हैं जब मेमोरी मैपिंग का उपयोग करना अपरिहार्य है, उदाहरण के लिए जब किसी लाइब्रेरी कॉल को फ़ाइल की बजाय मेमोरी क्षेत्र की आवश्यकता होती है। तो आपका सुझाव असहनीय है और सवाल का जवाब नहीं देता है। जवाब के रूप में, स्पष्ट रूप से लिनक्स MMAP_SEQUENTIAL पर बहुत अधिक * टूटा हुआ * है। पढ़ा गया आगे का हिस्सा काम करता है, पेज पुनः दावा करने वाला पृष्ठ नहीं है। और एकमात्र तरीका लिनक्स को सुझाव देता है कि वास्तव में ये पृष्ठ अच्छे उम्मीदवार हैं जो क्षेत्र को अनैप करके (और इसे दोबारा मैप कर रहे हैं)। –