2010-08-04 10 views
14

मुझे असेंबली के बारे में कुछ पता है, और 4 या 8 या तो सामान्य उद्देश्य रजिस्ट्रार हैं। कंप्यूटर पर सभी प्रोग्राम कैसे रजिस्ट्रारों के साथ काम करते हैं, खासकर मल्टीथ्रेडिंग और सबकुछ के साथ?कंप्यूटर कुछ रजिस्टरों का उपयोग कैसे करता है?

+2

मुझे प्रोसेसर के लिए स्थानीय चर के रूप में रजिस्टरों के बारे में सोचना पसंद है। मेरे पास वर्तमान फ़ंक्शन के दायरे में चर का एक टन नहीं है। कार्यक्रम के कुछ अन्य हिस्सों में उनमें से ज्यादातर स्मृति में बंद हैं। –

+0

@Merlyn: सच है, लेकिन संभवतः थोड़ा भ्रामक है, क्योंकि स्थानीय लोग (कंपाइलर अनुकूलन की अनुपस्थिति में) आमतौर पर ढेर पर संग्रहीत होते हैं। – bcat

+0

@bcat: हाँ, अवधारणा पूरी तरह से मानचित्रण नहीं करती है। विभिन्न आर्किटेक्चर में अलग-अलग व्यवहार होंगे, हालांकि (हालांकि इसे संकलक अनुकूलन के रूप में खारिज कर दिया जा सकता है)। तनेनबाम के लिए –

उत्तर

11

मल्टी-थ्रेडिंग स्वयं उपयोग में रजिस्टरों की संख्या को प्रभावित नहीं करता है। जब एक धागा बदल जाता है, तो आमतौर पर इसके रजिस्टरों को स्मृति में सहेजा जाता है और अगले थ्रेड को चलाने के लिए उन रजिस्टरों को अपने पिछले सहेजने से लोड किया जाता है।

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

और कंप्यूटर में जो कुछ भी चल रहा है वह रजिस्टरों में नहीं किया जाता है। आधुनिक कंपाइलर्स कोड को अनुकूलित कर सकते हैं ताकि अधिकांश डेटा का उपयोग रजिस्टरों में रखा जा सके लेकिन डेटा का विशाल बहुमत स्मृति में होता है और केवल आवश्यकता होने पर ही रजिस्टरों में खरीदा जाता है।

इस विषय पर मैंने कभी भी पढ़ा है सबसे अच्छी किताब Tanenbaum's"Structured Computer Organization" है जो डिजिटल तर्क स्तर से लेकर ऑपरेटिंग सिस्टम स्तर तक परतों के संदर्भ में कंप्यूटर की जांच करती है, जिसमें पिछले स्तर पर प्रत्येक स्तर की इमारत होती है।

                      alt text http://ecx.images-amazon.com/images/I/51PAGENX36L._SL500_AA300_.jpg

एक तरफ: मेरा सपना एक दिन के लिए है एक किताब लिखने सिर्फ इस कि सब कुछ को शामिल किया गया, क्वार्क के लिए ऊपर के स्तर से की तरह Emacs :-)

+0

+1, क्योंकि वह तनेंबाम नहीं है, लेकिन क्योंकि वह पुस्तक गंभीरता से भयानक है। – bcat

+0

उद्योग में कुछ लोग हैं जो मैं तनेंबाम के रूप में उच्च दर (कुथ एकमात्र ऐसा है जो तुरंत दिमाग में झुकता है)। दोनों ने अपनी शानदार किताबों और सॉफ्टवेयर के साथ एक बड़ा सौदा किया है। मेरे पास अभी भी इस पुस्तक का 2/ई है जो मैं यूनी (एक _looong_ समय पहले) पर वापस आया था। – paxdiablo

+0

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

1

आपको यह समझना होगा कि लाखों असेंबली निर्देश भी सरल चीजों के लिए निष्पादित किए जाते हैं। वे रजिस्ट्रार अक्सर अपने मूल्यों को बदल रहे हैं।

2

हर बार एक थ्रेड (या एक प्रक्रिया) स्वैप आउट हो जाता है, सभी रजिस्टरों को ऑपरेटिंग सिस्टम कर्नेल द्वारा स्टैक पर धक्का दिया जाता है, जिसे आमतौर पर प्रोसेस कंट्रोल ब्लॉक कहा जाता है। फिर, जब धागा/प्रक्रिया वापस आती है, तो रजिस्टर का डेटा पीसीबी से पढ़ा जाता है और रजिस्टरों को ढेर से हटा दिया जाता है।


भी आंतरिक रजिस्टरों और है कि 86 जबकि superscalar आर्किटेक्चर और परिष्कृत अनुदेश शेड्यूलिंग डिजाइन करने के लिए एक अधिक से अधिक लचीलेपन होने IA32 अनुदेश सेट वास्तुकला संरक्षित करने के लिए एक आभासी रजिस्टर तालिका सेट की आंतरिक रूप से उस तरह है एक मानचित्रण तालिका रहे हैं एल्गोरिदम।

इसके अलावा, अनुदेश सेट आमतौर पर एक लोड और दुकान अनुदेश, जो स्मृति की ओर इशारा के साथ संयोजन के रूप में प्रयोग किया जाता है है, की अनुमति देता है डेटा स्मृति में रजिस्टरों से संग्रहीत करने के लिए। लोड लोड स्टोर मशीन कहां से आती है, यानी, एक कंप्यूटर जिसमें निर्देश नहीं है जो सीधे स्मृति पर काम करता है।

कुछ कंप्यूटरों में निर्देश हैं जो स्मृति पर काम करते हैं; कुछ ढेर आधारित हैं। यह डिजाइनरों और हार्डवेयर पर रखी बाधाओं पर निर्भर करता है।

5

अन्य चर और थ्रेड स्टैक्स आमतौर पर संरक्षित मेमोरी स्पेस में संग्रहीत होते हैं, जहां उन्हें आवश्यक होने पर रजिस्टरों में बुलाया जा सकता है।

आप अपने कंप्यूटर के सीपीयू के काम के बारे में अच्छी समझ के लिए The Elements of Computing Systems पुस्तक को देखना चाह सकते हैं। पुस्तक परियोजनाओं की एक श्रृंखला के रूप में स्थापित की गई है जहां आप एक नंद द्वार से एक सीपीयू, असेंबलर, सरल कंपाइलर और एक छोटे ऑपरेटिंग सिस्टम पर काम करते हैं। यह समझने में अमूल्य है कि आपके कंप्यूटर के सभी हिस्सों एक साथ कैसे फिट होते हैं।

+0

उत्तर देने और आगे पढ़ने के लिए उपरोक्त। – mnuzzo

0

यह उन चीजों में से एक है जो कंप्यूटर के अन्य भंडारण, विशेष रूप से रैम का उपयोग किया जाता है: रजिस्टरों में और बाहर डेटा के बिट्स को सहेजने और पुनर्स्थापित करने के लिए।

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

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

1

यह वास्तव में बहुत दिलचस्प है कि कंप्यूटर ऐसा कुछ भी करने के लिए इतना कम रजिस्टरों का उपयोग करने में सक्षम है।

यह असेंबली स्तर पर वास्तव में चालाक प्रोग्रामिंग है (आमतौर पर भयभीत रूप से चालाक कंपाइलर्स के कारण) जो बहुत कम रजिस्टरों को इतनी कुशलता से उपयोग करने की अनुमति देता है।

यदि प्रदान की गई कुछ रजिस्टरों के साथ एक समस्या को पूरा करना असंभव है, तो प्रोग्राम आमतौर पर मुख्य रजिस्ट्री में अपने रजिस्टरों को "स्पिल" कर देगा। इस बात को याद करते हुए कि हम अपने खाली रजिस्टरों को किस ढेर पर डालते हैं, हम उन्हें आसानी से वापस प्राप्त कर सकते हैं।

जब हम रजिस्टरों से बाहर निकलते हैं तो हमें बस उन्हें स्टैक पर स्टोर करने की आवश्यकता होती है, जो हमें FAR हमारे कार्यक्रमों की आवश्यकता के मुकाबले अधिक जगह प्रदान करता है।

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

0

यह एक सुंदर शामिल प्रश्न है और उत्तर आपके सीपीयू आर्किटेक्चर पर निर्भर करता है।

अच्छे ओल 'दिनों में, आप सही थे - वास्तव में केवल कुछ सामान्य प्रयोजन रजिस्टर थे। आजकल, सीपीयू और कंपाइलर register renaming जैसी तकनीकों के माध्यम से आपके सामान्य उद्देश्य के साथ "three-card-monte" का एक गेम निभाता है।

सरल आर्किटेक्चर पर हालांकि यह सच है कि संदर्भ-स्विच होने पर रजिस्टरों को कॉपी किया जाता है, SMT जैसी तकनीकें "मूर्ख" सोचती हैं कि वास्तव में वे अधिक कोर हैं।

लेकिन आपके प्रश्न का सबसे सामान्य उत्तर यह है कि डेटा रजिस्ट्रारों में और बाहर ले जाया गया है। और यही कारण है कि किसी भी दिए गए असेंबली कार्यक्रम में आपके द्वारा देखे गए निर्देशों का एक बड़ा सौदा "एमओवी" निर्देश है।सीपीयू और कंपाइलर डिज़ाइनर अपने डिज़ाइन को अनुकूलित करने में बहुत समय और पैसा खर्च करते हैं ताकि आप रजिस्टरों में मुख्य मेमोरी (धीमी) से डेटा नहीं ले जा रहे हों - वे जितना संभव हो सके डेटा कैश रखने की कोशिश करते हैं। इस बड़ी संख्या में "एमओवी" निर्देश हैं कि समग्र कंप्यूटर के प्रदर्शन के लिए स्मृति विलंबता और बस गति इतनी महत्वपूर्ण क्यों है।

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