2011-11-14 17 views
7

के बगल में एक थ्रेड के लिए क्या है एक लिनक्स प्रक्रिया में, प्रत्येक थ्रेड का अपना ढेर होता है। इसके अलावा, प्रत्येक धागे के लिए स्थानीय क्या है। मैंने फाइल आवंटन तालिका, आदि जैसे चीजें पढ़ी हैं ... क्या कोई मुझे उन चीज़ों की एक सूची प्रदान कर सकता है जो थ्रेड के लिए विशिष्ट हैं और स्मृति में उन्हें कैसे व्यवस्थित किया जाता है।स्टैक

दूसरे, मैं देखा है कि जब मैं एक धागा करने के लिए एक ढेर आवंटित (नीचे दिए गए कोड को देखें), धागा समारोह में पहली चर का पता किसी भी तरह काफी बाइट्स ढेर पते जो मैं आवंटित (stackAddr) के बाद । मुझे लगता है कि ऐसा इसलिए है क्योंकि स्टैक का शीर्ष आवंटित स्टैक मेमोरी का अंतिम पता है, क्योंकि स्थानीय चर के पते के मूल्य में अंतर और आवंटित स्टैक लगभग स्टैक का आकार है (STACKSIZE)। दूसरे शब्दों में, ऐसा लगता है कि यह नीचे से ऊपर की तरफ बढ़ रहा है।

pthread_attr_init(&attr[tid]); 
stackAddr = malloc(STACKSIZE); 
pthread_attr_setstack(&attr, stackAddr, STACKSIZE); 
+2

हां, ढेर दूसरी दिशा में बढ़ता है, इसलिए आपने अपने प्रश्न का उत्तर दिया। –

+0

@yi_H, लेकिन मुझे किसी को अपने प्रश्न के पहले भाग का जवाब देने की आवश्यकता है: -पी! – MetallicPriest

उत्तर

6

पहला सवाल मैं के बारे में सोच सकते हैं के लिए:

  • धागा आईडी
  • ढेर
  • मशीन पंजीकृत करता
  • धागे-विशिष्ट चर (दोनों कुंजी/मान जोड़े pthread_setspecific द्वारा निर्धारित और __thread स्टोरेज क्लास)
  • signal mask
  • लंबित संकेतों के सेट
  • errno मूल्य

दूसरा, हाँ, तुम ठीक कह रहे, 86 पर ढेर पतों कम करने के लिए बढ़ता है। इसलिए, यदि आप pthread_attr_setstack का उपयोग कर रहे हैं तो क्षेत्र अंत से उपयोग शुरू हो जाएगा।

5
प्रति POSIX XBD 3.396

एक प्रक्रिया के भीतर नियंत्रण के एकल प्रवाह

। प्रत्येक थ्रेड की अपनी थ्रेड आईडी होती है, शेड्यूलिंग प्राथमिकता और नीति, इरनो वैल्यू, थ्रेड-विशिष्ट कुंजी/वैल्यू बाइंडिंग, और नियंत्रण के प्रवाह का समर्थन करने के लिए आवश्यक सिस्टम संसाधन। कुछ भी जिसका पता थ्रेड द्वारा निर्धारित किया जा सकता है, जिसमें स्थैतिक चर तक सीमित नहीं है, मॉलोक() के माध्यम से प्राप्त भंडारण, कार्यान्वयन-परिभाषित कार्यों के माध्यम से प्राप्त सीधे एड्रेसेबल स्टोरेज, और स्वचालित चर, एक ही प्रक्रिया में सभी धागे के लिए सुलभ हैं।

0

लिनक्स पर आवेदन प्रोग्रामर नियंत्रण का एक बड़ा सौदा है जिस पर संसाधनों प्रत्येक थ्रेड के लिए निजी हैं और अन्य धागे के साथ साझा कर रहे हैं जो वे pthreads कार्यान्वयन सूत्रण के बजाय देशी clone() एपीआई का उपयोग करना चाहते हैं नहीं है।

इसका मतलब है कि एक निश्चित उत्तर देना असंभव है - संसाधन जो थ्रेड-विशिष्ट हैं, पर निर्भर करता है कि थ्रेड बनाए जाने पर clone() पर झंडे पारित किए गए थे।

ध्यान दें कि इनमें से कई संसाधन उपयोगकर्ता स्पेस मेमोरी में बिल्कुल नहीं रहते हैं - सिग्नल मास्क जैसी चीजें कर्नेल के भीतर रखी जाती हैं।