2010-10-12 9 views
7

एक एकल कोर प्रोसेसर पर संदर्भ स्विचिंग करते समय, जिम्मेदार कोड केवल एक ही CPU पर निष्पादित किया जाता है जो थ्रेड को स्विच करने का ख्याल रखता है।बहु-कोर प्रोसेसर पर किए गए धागे के संदर्भ स्विचिंग कैसा है?

लेकिन जब हमारे पास एकाधिक CPU हैं तो यह कैसे किया जाता है? क्या कोई मास्टर सीपीयू है जो सभी दास CPUs के सभी संदर्भ स्विचिंग करता है? क्या प्रत्येक सीपीयू अपने संदर्भ स्विचिंग के लिए ज़िम्मेदार है? यदि हां, तो स्विचिंग सिंक्रनाइज़ कैसे होती है ताकि दो सीपीयू एक ही थ्रेड को निष्पादित नहीं कर रहे हों? या जगह पर कुछ और तंत्र है?

उत्तर

6

कर्नेल बहु-थ्रेडेड है। यह किसी भी कोर पर निष्पादित कर सकते हैं। जब कोर को धागे को स्वैप करने की आवश्यकता होती है, तो यह अगले थ्रेड को निष्पादित करने के लिए जिम्मेदार कर्नेल के हिस्से को आमंत्रित करता है।

कर्नेल बहु-थ्रेडेड है; जो कहने के लिए है, यह कई कोरों पर एक साथ सुरक्षित निष्पादन के लिए लिखा गया है। इस प्रकार, केवल एक सीपीयू किसी भी दिए गए धागे को चलाता है, क्योंकि कोड का निर्माण होता है जैसे कि यदि एकाधिक सीपीयू एक साथ फिर से निर्धारित होते हैं, तो सही परिणाम होता है।

+0

उस संक्षिप्त, लेकिन जानकारीपूर्ण, उत्तर के लिए धन्यवाद। – gablin

4

सीपीयू संदर्भ स्विचिंग नहीं करता है। ऑपरेटिंग सिस्टम करते हैं।

संक्षेप में, एक ओएस एक सीपीयू कोर में एक नया संदर्भ (रजिस्टर्स, मेमोरी मैपिंग, आदि) लोड करके एक संदर्भ स्विच निष्पादित करता है। थ्रेड एक ओएस संरचना है जिसमें ऐसे संदर्भ सहेजे जा सकते हैं। इसलिए, ओएस सीपीयू संदर्भ को लोड करने के लिए एक गैर-थ्रेड थ्रेड लेने के लिए भी ज़िम्मेदार है।

यदि ओएस एक चल रहे थ्रेड को चुनना था, तो दो कोर एक ही धागे को चलाने की कोशिश करेंगे। यह भ्रम पैदा करने के लिए बाध्य है क्योंकि वे एक ही स्मृति साझा करेंगे, और वह एकल धागा खुद के साथ समानांतर में चलाने की उम्मीद नहीं करेगा (!) तो कोई ओएस ऐसी चीज नहीं करेगा।

+2

मैंने कभी नहीं कहा कि सीपीयू संदर्भ स्विचिंग करता है। मैंने कहा कि संदर्भ स्विच करने के लिए _code_ जिम्मेदार (यानी ओएस) एक सीपीयू पर निष्पादित किया जाता है। लेकिन जब हमारे पास एक से अधिक CPU हैं तो यह कैसे संभाला जाता है? क्या संदर्भ स्विचिंग कोड _all_ CPUs पर निष्पादित किया गया है? – gablin

0

मान लें कि हमारे पास दो प्रक्रिया पी 1 और पी 2 हैं, चरणों का अनुमानित अनुक्रम इस तरह होना चाहिए।

The current registers are stored into the process structure for P1. 
The stored register values from the process structure for P2 are loaded into the CPU's registers. 
CPU returns the User mode 
P1 is context switched out and P2 is context switched in and running 

नोट, सीपीयू केवल कॉन्टेक्स्ट स्विच करने के लिए ओएस को इंटरटरअप भेजता है।

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