मैं विश्वविद्यालय में ओएस सीख रहा हूं, और हमारी परियोजना हार्वर्ड द्वारा निर्मित OS/161 पर आधारित है। तो मेरा जवाब इस ओएस पर आधारित है।
ओएस/161 में, प्रत्येक थ्रेड में 2 स्टैक्स - उपयोगकर्ता/एप्लिकेशन प्रोग्राम के लिए एक, कर्नेल प्रोग्राम के लिए एक है।
1. उसी कार्यक्रम में दो अलग-अलग ढेर का उपयोग करने की क्या आवश्यकता है?
कहें कि हम केवल एप्लिकेशन मोड में स्टैक का उपयोग करते हैं। चूंकि मेमोरी स्पेस कई धागे से साझा किया गया है, यदि कुछ अन्य थ्रेड कर्नेल द्वारा उपयोग किए गए पते को गलती से ओवरराइट करते हैं, तो कर्नेल क्रैश हो सकता है, जो बहुत ही कमजोर ओएस की ओर जाता है।
2. उपयोगकर्ता स्टैक से कर्नेल स्टैक तक प्रोग्राम के वर्तमान ढेर को कैसे बदलता है?
ओएस/161 में, जाल को एप्लिकेशन प्रोग्राम से कर्नेल में स्थानांतरित करने के लिए उपयोग किया जाता है। तीन तंत्र हैं जो जाल का आह्वान कर सकते हैं: सिस्टम कॉल, अपवाद और इंटरप्ट्स। कर्नेल स्टैक में जाल फ्रेम का उपयोग मौजूदा थ्रेड संदर्भ को सहेजने के लिए किया जाता है।
बाद विस्तृत प्रक्रिया (lecture note of UWaterloo CS350 से) है:
जब ऊपर तंत्र में से एक होती है, हार्डवेयर सीपीयू विशेषाधिकार प्राप्त मोड में स्विच और स्थानान्तरण, एक पूर्वनिर्धारित स्थान को नियंत्रित जो एक कर्नेल पर हैंडलर स्थित होना चाहिए।
गिरी हैंडलर एक जाल फ्रेम बनाता है और इतना है कि हैंडलर कोड CPU पर क्रियान्वित किया जा सकता यह आवेदन धागा संदर्भ बचाता करने के लिए उपयोग करता है।
से ठीक पहले गिरी हैंडलर निष्पादित नहीं हो, यह जाल फ्रेम से आवेदन धागा संदर्भ पुनर्स्थापित करता है, आवेदन करने के लिए नियंत्रण लौटने से पहले।
3. सिस्टम कॉल को पूरा करने के बाद यह उपयोगकर्ता स्टैक पर कैसे वापस आ जाता है?
ऊपर दी गई प्रक्रिया इस प्रश्न पर भी स्पष्ट रूप से बताती है।
आप किस वास्तुकला का अध्ययन कर रहे हैं? – Gabe
http://www.cs.umb.edu/~eoneil/cs444_f06/class10.html: इस मुद्दे को स्पष्ट करने के लिए कुछ अच्छा है। एक विश्वविद्यालय की वेबसाइट से !! –
मैं 5 साल पहले विश्वविद्यालय से बाहर निकला था और यह सवाल अभी भी मुझे अपने स्नातक वर्षों की याद दिलाता है। हर बार जब मैं इस सवाल के लिए स्टैक ओवरफ्लो पर अधिसूचना प्राप्त करता हूं, तो मैं नॉस्टल्जिया से भरा हूं। – user609306