सी में प्रत्येक बाइट व्यक्तिगत रूप से संबोधित करने योग्य है। मान लीजिए कि एक पूर्णांक (जो 4 बाइट्स का उपयोग करता है) का पता 0xaddr
है (जो 32 बिट्स है, यह मानते हुए कि 32 बिट एड्रेस बस और 32 बिट डेटा बस के साथ 32 बिट प्रोसेसर है) और मान लें कि पूर्णांक का मान 0x12345678
है। अब अगर मैं इस मान को स्मृति से ला रहा हूं, प्रोसेसर यह कैसे करता है? प्रोसेसर पता पंक्तियों पर 0xaddr
(जो 32 बिट पता है) रखता है और फिर 8 बिट डेटा प्राप्त करता है 0x12
कहता है। और फिर प्रोसेसर 0xaddr+1
को एड्रेस लाइनों पर गति देगा और फिर एक और 8 बिट डेटा 0x34
और फिर पूर्णांक के 4 बाइट्स के लिए लाएगा? या प्रोसेसर बस 0xaddr
रखता है और एक बार में 4 बाइट्स को अपनी पूर्ण 32 बिट डेटा बस का उपयोग करता है?रैम से डेटा कैसे प्राप्त किया जाता है?
उत्तर
This is a well known article जीएनयू सी लाइब्रेरी लीड द्वारा जो स्मृति उपयोग का वर्णन करता है (विशेष रूप से x86 - वर्तमान पीसी - सिस्टम में)।यह संभवतः आपकी आवश्यकता से कहीं अधिक विस्तार में जाता है।
पूरे लेख कई हिस्सों में फैले हुए:
- Introduction
- CPU Caches
- Virtual Memory
- NUMA Support
- Programmers
- More Programmers
- Performance Tools
- Future
- Appendices
एक बात मैं gbulmer के जवाब देने के लिए जोड़ते हैं वह कई प्रणालियों में हो रही है कि डेटा की एक धारा तेजी से आप किसी एक शब्द हो रहा से उम्मीद होती है। दूसरे शब्दों में, आप कहां से पढ़ना चाहते हैं, इसे चुनने में कुछ समय लगता है, लेकिन एक जिसे आपने चुना है, उस बिंदु से पढ़ना, और फिर अगला 32 या 64 या जो भी बिट्स, और फिर अगला ... स्विच करने से तेज़ है कुछ अनदेखा जगह और एक और मूल्य पढ़ना।
और आधुनिक प्रोग्रामिंग पर हावी क्या है मदरबोर्ड पर स्मृति से लाने का व्यवहार नहीं है, लेकिन क्या डेटा एक सीपीयू कैश में है।
यदि आप "कंप्यूटर आर्किटेक्चर" के लिए वेब खोजते हैं तो आपको अपने प्रश्नों के कुछ उत्तर मिलेंगे।
आपके विशिष्ट प्रश्न के लिए, एक 32 बिट डेटा, 32 बिट डेटा और पता बस के साथ, एक साधारण मामले के लिए, कोई obfuscating हार्डवेयर के साथ। यह 32 बिट चौड़ी मेमोरी से 32 बिट पढ़ेगा।
यह हार्डवेयर का एक प्रकार है जो 1 9 70 के दशक के बाद से मिनिकॉप्टर (जैसे डीईसी वैक्स) के रूप में अस्तित्व में था, और अभी भी माइक्रोप्रोसेसर (x86, एआरएम, कॉर्टेक्स-ए 8, एमआईपीएस 32) और कुछ माइक्रोकंट्रोलर (जैसे एआरएम, कॉर्टेक्स- एम 3, पीआईसी 32, आदि)।
सबसे आसान मामला: पता बस सिग्नल (तार) का एक सेट है जो स्मृति में पता संकेत लेती है, साथ ही कुछ और संकेतों को संवाद करने के लिए कि स्मृति को 'पढ़ना' या 'लिखित' (डेटा ' दिशा), और क्या पता और डेटा दिशा तारों पर संकेत मान्य हैं। आपके उदाहरण के मामले में, पते के बिट पैटर्न को ले जाने के लिए 32 तार हो सकते हैं।
डेटा बस तारों का एक दूसरा सेट है जो मूल्य को स्मृति से और उससे संवाद करता है। मेमोरी यह कहने के लिए संकेत दे सकती है कि डेटा मान्य है, लेकिन यह इतना तेज़ हो सकता है कि सब कुछ 'बस काम करता है'।
जब प्रोसेसर पता संकेतों पर पता डालता है, तो कहता है कि यह स्मृति से पढ़ना चाहता है (डेटा दिशा 'पढ़ा' है), स्मृति उस पते पर संग्रहीत मूल्य को पुनर्प्राप्त करेगी, और इसे डेटा बस सिग्नल पर रखेगी। प्रोसेसर (उपयुक्त देरी और सिग्नल के बाद) डेटा बस तारों का नमूना देगा, और यह वह मान है जो इसका उपयोग करता है।
प्रोसेसर पूरे 32 बिट पढ़ सकता है, और एक बाइट निकाला जा सकता है (यदि वह सभी निर्देशों की आवश्यकता है) आंतरिक रूप से, या बाहरी पता बस अतिरिक्त सिग्नल प्रदान कर सकती है ताकि बाहरी मेमोरी सिस्टम उपयुक्त बाइट प्रदान करने के लिए बनाया जा सके , डबल बाइट या ट्रैक्टर बाइट मूल्य। कई सालों तक, एआरएम प्रोसेसर आर्किटेक्चर के संस्करण केवल पूरे 32 बिट्स को पढ़ सकते थे, और छोटे टुकड़े, ई, जी, एक बाइट, आंतरिक रूप से निकाले गए थे।
आप इस प्रकार के सिग्नल सेट का उदाहरण http://www.cpu-world.com/info/Pinouts/68000.html पर देख सकते हैं कि चिप में केवल 24 बिट पता बस है, और एक 16 बिट डेटा बस है। इसमें दो सिग्नल (यूडीएस और एलडीएस) हैं जो संकेत देते हैं कि ऊपरी डेटा सिग्नल का उपयोग किया जा रहा है, निचले डेटा सिग्नल, या दोनों।
मुझे शोध.cs.tamu.edu/prism/lectures/mbsd/mbsd_l15.pdf पर एक उचित विस्तृत स्पष्टीकरण मिला, मैंने पाया कि "68000 मेमोरी बस चक्र" खोजकर।
आप अपने बस चक्र को देखने के लिए उपयोगी रूप से एमआईपीएस, एआरएम, या x86 की तलाश कर सकते हैं।
यह निर्भर करता है। आप किस सटीक प्रोसेसर के बारे में बात कर रहे हैं? आईआईआरसी 8086 में 16 बिट डेटा बस थी। कई नए मॉडल (पेंटियम और ऊपर) में 64 बिट एफएसबी था। – harold
@harold: क्या आप मुझे बता सकते हैं कि विभिन्न प्रोसेसर के लिए यह अलग कैसे है। मैं सामान्य रूप से पूछ रहा हूं और किसी भी प्रोसेसर के लिए विशिष्ट नहीं हूं। यह कैसे किया जाएगा 8086 के लिए जो 16 बिट डेटा बस है, और 32 बिट डेटा बस के लिए और 64 के लिए कैसे? धन्यवाद – mezda
यह सिर्फ एक साधारण डेटा बस की तुलना में बहुत अधिक जटिल है, कैश –