2013-08-21 7 views
15

जब मैं किसी प्रक्रिया से कई धागे बनाते हैं, तो क्या प्रत्येक थ्रेड का अपना ढेर होता है, या यह है कि वे अपनी मूल प्रक्रिया के ढेर को साझा करते हैं। क्या होता है जब थ्रेड सिस्टम कॉल करता है? क्या थ्रेड भी अपने कर्नेल स्टैक को प्रक्रियाओं की तरह बनाए रखते हैं?क्या प्रत्येक धागे का अपना ढेर होता है?

+1

हाँ धागा विशिष्ट ढेर !, वैश्विक मूल्य धागे के बीच साझा करने योग्य हैं (स्थानीय नहीं) –

+0

@GrijeshChauhan क्या होता है जब हम थ्रेड से सिस्टम कॉल करते हैं? उदाहरण के लिए –

+2

यदि आप फ़ाइल खोलने के लिए 'ओपन()' सिस्टम कॉल कहते हैं। 'int f = open()' का उपयोग करने के बाद पाठ्यक्रम 'f' थ्रेड के लिए स्थानीय है। लेकिन याद रखें कि फाइल डिस्क्रिप्टर धागे के बीच साझा किए जाते हैं। यदि आप 'f' के मान को जानते हैं तो आप उसी मान को एक्सेस करने के लिए अलग-अलग थ्रेड में उस मान का उपयोग कर सकते हैं (आपको फिर से खोलने की आवश्यकता नहीं है) –

उत्तर

9

हाँ धागे के अपने स्वयं के ढेर और उनके स्वयं के कर्नेल ढेर (जैसे लिनक्स) हैं।

जब कोई थ्रेड सिस्टम कॉल करता है, तो आप कर्नेल मोड (उपयोगकर्ता मोड से) में जाल करते हैं, तो आप कर्नेल को तर्क देते हैं, तर्क जांचते हैं, कर्नेल w/e को करने की आवश्यकता होती है (कर्नेल में स्टैक), अंतिम मान को थ्रेड पर वापस लौटाता है और आप उपयोगकर्ता मोड पर वापस जाते हैं।

+0

कर्नेल बिना किसी स्टैक के "डब्ल्यू/ई को करने की ज़रूरत है" कैसे करता है? – avakar

+0

मैं अपने उत्तर – Joohwan

+2

में स्पष्टीकरण दूंगा कर्नेल स्टैक केवल एक पूर्ववर्ती मॉडल पर सुरक्षा सुरक्षा सावधानी बरतनी है। मल्टीथ्रेडिंग के लिए एकाधिक ढेर एक शर्त हैं। संवेदनशील डेटा को लीक करने से रोकने के लिए कर्नेल अनिवार्य रूप से उपयोगकर्ता अंतरिक्ष में जो कुछ भी हो रहा है उसका समांतर संस्करण प्रदान करता है। – Potatoswatter

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

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