2010-01-07 15 views
10

एआरएम कोर दस्तावेज़ पढ़ने के दौरान, मुझे यह संदेह मिला। सीपीयू डेटा बस से पढ़ने वाले डेटा को कैसे अलग करता है, चाहे इसे एक निर्देश के रूप में निष्पादित किया जाए या डेटा के रूप में इसे संचालित किया जा सके?डेटा से निर्देशों को कैसे अलग किया जाता है?

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

मुझे प्रबुद्ध करने के लिए अग्रिम धन्यवाद! /एमएस

उत्तर

4

प्रत्येक ऑपोड में एन बाइट्स का एक निर्देश होगा, जो बाद में एम बाइट्स डेटा (मेमोरी पॉइंटर्स इत्यादि) होने की अपेक्षा करता है। इसलिए सीपीयू प्रत्येक ऑपोड का उपयोग यह निर्धारित करने के लिए करता है कि निम्न बाइट्स कितने डेटा हैं।

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

यह कौन-सा डेटा के रूप में समझा था पर कार्यक्रम काउंटर बात करने के लिए पूरी तरह से संभव हो गया था, और वास्तव में मुझे याद है एक पुराने कॉलेज ट्यूटोरियल जहाँ मेरे प्रोफेसर वास्तव में किया था कि, और हम उसे बाहर गलती बात करने के लिए किया था। उनकी प्रतिक्रिया थी "लेकिन वह डेटा है! यह निष्पादित नहीं कर सकता है! क्या यह हो सकता है?", जिस बिंदु पर मैंने वैध डेटा के साथ हमारे डेटा को पॉप्युलेट किया, यह साबित करने के लिए कि वास्तव में, यह हो सकता है।

+2

यह अभी भी करना संभव है। –

+0

धन्यवाद ब्रायन। इसलिए, आमतौर पर रीसेट करने के तुरंत बाद, पीसी को पढ़ने वाले डेटा से लोड किया जाता है, जिसे इसे निष्पादित करने के लिए निर्देश (ओपोड + ऑपरेंड इत्यादि) और निम्नानुसार संचालित डेटा के रूप में व्याख्या किया जाता है। और पीसी और आईआर इन निर्देशों को डीकोड करने तक सभी ठीक हो जाते हैं। अन्यथा एक अपवाद होता है (निरस्त या अपरिभाषित निर्देश)। –

+0

@Neil - हाँ। मैं पूरे सेगमेंटेशन मुद्दे में नहीं जाना चाहता था क्योंकि मैं आधुनिक सीपीयू आर्किटेक्चर –

8

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

0

मुझे लगता है कि यह प्रोग्राम कहां से संग्रहीत है और सीपीयू को सूचित करने के लिए ओएस समर्थन है कि यह कोड या डेटा है या नहीं।

सभी कोड छवि के विभिन्न खंड (निरंतर वर्ण तारों जैसे स्थिर डेटा के साथ) चर के भंडारण की तुलना में रखा गया है। ओएस (और मेमोरी मैनेजमेंट यूनिट) को यह जानने की ज़रूरत है क्योंकि वे इसे आसानी से हटाकर और मूल डिस्क फ़ाइल से इसे पुनः लोड करके स्मृति से बाहर कोड को स्वैप कर सकते हैं (कम से कम विंडोज़ यह करता है)।

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

डेटा पर अपने प्रोग्राम काउंटर को इंगित करना अभी भी संभव है, लेकिन ओएस सीपीयू को इसे रोकने के लिए कह सकता है - एनएक्स बिट और विंडोज़ "डेटा निष्पादन संरक्षण" सेटिंग्स (सिस्टम कंट्रोल पैनल)

2

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

2

मूल एआरएम डिजाइन को क्रियान्वित करने के लिए दिए गए निर्देशों का एक तीन-स्तरीय पाइपलाइन था:

  1. सीपीयू
  2. डीकोड करने में अनुदेश अनुदेश FETCH निष्पादन
  3. निर्देश पर अमल के लिए CPU कॉन्फ़िगर करने के लिए।

CPU के आंतरिक तर्क सुनिश्चित करता है कि यह जानता है कि यह (अर्थात् एक निर्देश लाने) चरण 1 में डेटा प्राप्त करने में है या नहीं, या चरण 3 में (अर्थात एक डेटा एक "लोड" अनुदेश की वजह से लाने)।

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

-3

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

+1

आपका देर उत्तर कुछ भी नया नहीं जोड़ता है जो पिछले उत्तरों पर पहले से ही परिलक्षित नहीं हुआ है। – MyGGaN

+1

इसके अलावा, यह भी सही नहीं है। "इस स्मृति को अलग-अलग पढ़ने के निर्देश"? नहीं, कोड बनाम डेटा के लिए विशेष लोड निर्देश नहीं हैं। (एआरएम में छोटे-विस्थापन पीसी-रिश्तेदार भार हैं जिनका उपयोग आप कोड के साथ मिश्रित शाब्दिक पूल के लिए करते हैं, लेकिन आप बहुत सारे छोटे पूल रखने के बजाय डेटा के साथ कम से कम एक संपूर्ण कैश-लाइन भरने का प्रयास करेंगे। –

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

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