क्या सभी प्रक्रियाओं के लिए कर्नेल स्टैक साझा किया गया है या प्रत्येक प्रक्रिया के लिए एक अलग कर्नेल स्टैक है? यदि यह प्रत्येक प्रक्रिया के लिए पृथक है जहां यह स्टैक पॉइंटर संग्रहीत है? Task_struct में?लिनक्स प्रक्रिया के लिए कर्नेल स्टैक
उत्तर
केवल एक सामान्य कर्नेल मेमोरी है। इसमें प्रत्येक प्रक्रिया में इसका अपना कार्य_स्ट्रक्चर + कर्नेल स्टैक होता है (डिफ़ॉल्ट 8K द्वारा)।
एक संदर्भ में पुराने स्टैक पॉइंटर को कहीं सेव किया जाता है और वास्तविक स्टैक पॉइंटर को चलने वाली नई प्रक्रिया के स्टैक (या हार्डवेयर आर्किटेक्चर के आधार पर नीचे) के शीर्ष पर इंगित करने के लिए बनाया जाता है।
This old article कहता है कि प्रत्येक प्रक्रिया का अपना कर्नेल स्टैक होता है। टिप्पणियां देखें कि यह एक बहुत अच्छा डिजाइन क्यों प्रतीत होता है।
मैंने सुनिश्चित करने के लिए reading the current source की कोशिश की, लेकिन चूंकि कर्नेल स्टैक "अंतर्निहित" है, यह task_struct
में दिखाई नहीं दे रहा है। लेख में इसका उल्लेख है।
यह उत्तर टिप्पणियों से ज्ञान को शामिल करने के लिए संपादित किया गया था। धन्यवाद।
मुझे गंभीरता से संदेह है कि इसे बदला जा सकता है। कर्नेल स्टैक एक गैर-साझा स्थान है जहां सिस्टम कॉल अपना डेटा डाल सकते हैं। यदि आप उन्हें प्रक्रियाओं के बीच साझा करेंगे, तो कई कर्नेल दिनचर्या एक ही समय में एक ही स्टैक का उपयोग कर सकते हैं -> डेटा भ्रष्टाचार। –
मुझे लगता है कि प्रत्येक प्रक्रिया को अपने कर्नेल स्टैक की आवश्यकता होती है, क्योंकि कई अलग-अलग प्रक्रिया एक साथ सिस्टम कॉल निष्पादित कर सकती हैं और आप उन्हें मिश्रित नहीं करना चाहेंगे। –
प्रत्येक प्रक्रिया में अपना कर्नेल स्टैक होता है और प्रत्येक कर्नेल स्टैक की इसकी संबंधित प्रक्रिया होती है। यह कभी नहीं बदला गया है। यही कारण है कि "ps" में कुछ छद्म प्रक्रिया है। –
रॉबर्ट लव के "लिनक्स कर्नेल डेवलपमेंट" पुस्तक में प्रक्रिया कर्नेल स्टैक के बारे में एक अच्छी व्याख्या है।
और हाँ, प्रत्येक प्रक्रिया का अपना कर्नेल स्टैक होता है और यदि मैं गलत नहीं हूं तो इसका सूचक थ्रेड_इनोफ़ो संरचना पर संग्रहीत होता है। लेकिन मैं इसके बारे में वास्तव में निश्चित नहीं हूं, और सीपीयू आर्किटेक्चर के आधार पर, संरचना task_struct प्रक्रिया कर्नेल स्टैक की शुरुआत या अंत में संग्रहीत है।
चीयर्स। कार्लोस माईओलिनो
लिनक्स 2.6 कर्नेल के बाद से, 'thread_info' संरचना प्रत्येक प्रक्रिया के कर्नेल स्टैक के अंत में संग्रहीत होती है, न कि task_struct संरचना। 'Thread_info' स्ट्रक्चर में 'task_struct' संरचना में सूचक शामिल है –
मुझे लगता है कि प्रत्येक प्रक्रिया में अपना कर्नेल मोड स्टैक होता है। ड्राइवर कर्नेल मोड में निष्पादित कर रहा है, ड्राइवर को नियमित रूप से निष्पादित करते समय प्रक्रिया को अवरुद्ध कर दिया जाएगा। और ऑपरेटिंग सिस्टम चलाने के लिए एक और प्रक्रिया निर्धारित कर सकते हैं। निर्धारित प्रक्रिया फिर से ड्राइवर दिनचर्या कॉल कर सकते हैं। यदि कर्नेल स्टैक साझा किया जाता है, तो 2 प्रक्रिया कर्नेल स्टैक का उपयोग कर रही हैं, चीजें मिश्रित हो जाएंगी। मैं इस प्रश्न से लंबे समय तक परेशान हूं। सबसे पहले मुझे लगता है कि कर्नेल स्टैक साझा किया जाता है, कुछ किताबें कहती हैं। लिनक्स कर्नेल विकास को पढ़ने के बाद, और कुछ ड्राइवर कोड देखें, मुझे लगता है कि कर्नेल स्टैक साझा नहीं किया गया है।
- 1. प्रक्रिया निर्माण पर लिनक्स प्रक्रिया कर्नेल स्टैक स्थिति क्या है?
- 2. लिनक्स कर्नेल
- 3. लिनक्स कर्नेल
- 4. लिनक्स स्टैक साइज
- 5. लिनक्स कर्नेल विकास
- 6. लिनक्स कर्नेल/ड्राइवर विकास के लिए नया
- 7. लिनक्स कर्नेल हैकिंग के लिए वर्चुअल वातावरण
- 8. लिनक्स कर्नेल मॉड्यूल
- 9. लिनक्स कर्नेल
- 10. लिनक्स कर्नेल
- 11. लिनक्स कर्नेल
- 12. लिनक्स कर्नेल
- 13. लिनक्स कर्नेल
- 14. लिनक्स कर्नेल
- 15. लिनक्स कर्नेल
- 16. लिनक्स कर्नेल
- 17. लिनक्स कर्नेल
- 18. लिनक्स कर्नेल
- 19. कर्नेल स्टैक और उपयोगकर्ता स्टैक के बीच क्या अंतर है?
- 20. लिनक्स कर्नेल
- 21. लिनक्स कर्नेल शेड्यूलिंग
- 22. मैं लिनक्स कर्नेल
- 23. लिनक्स कर्नेल म्यूटेक्स
- 24. लिनक्स कर्नेल हेडर के संगठन
- 25. लिनक्स कर्नेल अमान्य टीएलबी प्रविष्टियां
- 26. कॉर्पोरेट लिनक्स कर्नेल विकास
- 27. लिनक्स कर्नेल 3.3
- 28. लिनक्स कर्नेल स्रोत
- 29. लिनक्स कर्नेल विकास
- 30. डिबगिंग विंडोज कर्नेल लिनक्स
यह स्टैक पॉइंटर कहाँ संग्रहीत किया जाता है? – suresh
एक संदर्भ में पुराने स्टैक पॉइंटर मान को प्रक्रिया के कार्य_स्ट्रक्चर में संग्रहीत किया जाता है जिसे एक नई प्रक्रिया के साथ प्रतिस्थापित किया जा रहा है और नई प्रक्रिया के लिए स्टैक पॉइंटर को इस नई प्रक्रिया के task_struct से पढ़ा जाता है। –