वास्तव में, अपने आभासी ढेर आकार है 8388608 बाइट्स (8 एमबी)। बेशक, यह निष्कर्ष निकालना स्वाभाविक है कि यह सही नहीं हो सकता है, क्योंकि यह एक बड़ी मात्रा में हर थ्रेड के लिए मेमोरी का स्टैक के लिए उपभोग करने के लिए है जब 99% केबी के एक जोड़े को शायद सभी की आवश्यकता होती है।
अच्छी खबर यह है कि आपका धागा केवल भौतिक मेमोरी की मात्रा का उपयोग करता है जिसकी उसे वास्तव में आवश्यकता होती है। यह जादुई शक्तियों में से एक है जो आपके ओएस को आपके प्रोसेसर में हार्डवेयर मेमोरी मैनेजमेंट यूनिट (MMU) का उपयोग करने से मिलता है। यहाँ क्या होता है:
OS आपके थ्रेड के लिए MMU के पेज टेबल सेट करके आपके स्टैक के लिए 8 एमबी वर्चुअल मेमोरी आवंटित करता है। इसके लिए केवल पृष्ठ तालिका प्रविष्टियों को रखने के लिए बहुत कम RAM की आवश्यकता होती है।
जब आपका धागा चलता है और स्टैक पर एक वर्चुअल पते तक पहुंचने की कोशिश करता है जिसमें अभी तक एक भौतिक पृष्ठ नहीं है, तो एक हार्डवेयर अपवाद जिसे "पेज फॉल्ट" कहा जाता है, उसे MMU द्वारा ट्रिगर किया जाता है।
सीपीयू कोर पेज गलती अपवाद का जवाब देता है एक विशेषाधिकार प्राप्त निष्पादन मोड (जिसका अपना स्टैक है) पर स्विच करके और कर्नेल के अंदर पेज गलती अपवाद हैंडलर फ़ंक्शन को कॉल करके।
कर्नेल भौतिक RAM के एक पृष्ठ को उस वर्चुअल मेमोरी पेज पर आवंटित करता है और उपयोगकर्ता स्पेस थ्रेड पर वापस लौटता है।
उपयोगकर्ता स्पेस थ्रेड में से कोई भी काम नहीं देखता है। अपने दृष्टिकोण से, यह सिर्फ स्टैक का उपयोग करता है जैसे कि स्मृति सभी के साथ थी। इस बीच, धागा की आवश्यकताओं को पूरा करने के लिए स्टैक स्वचालित रूप से बढ़ता है (या नहीं)।
MMU आज के कंप्यूटर सिस्टम के हार्डवेयर का एक महत्वपूर्ण हिस्सा है। विशेष रूप से, यह सिस्टम में बहुत सारे "जादू" के लिए जिम्मेदार है, इसलिए मैं MMU क्या करता है, और सामान्य रूप से वर्चुअल मेमोरी के बारे में अधिक जानने की सलाह देता हूं। इसके अलावा, यदि आपका एप्लिकेशन संवेदनशील है और डेटा की एक महत्वपूर्ण राशि से संबंधित है, तो आपको यह समझना चाहिए कि TLB (MMU का पेज टेबल कैश) कैसे काम करता है और आप अपने TLB हिट रेट को अधिकतम करने के लिए अपने डेटा या अपने एल्गोरिदम का पुनर्गठन कैसे कर सकते हैं।
8388608 / 1024 = 8192
।