पोर्ट मैप्ड और मेमोरी मैप्ड एक्सेस के बीच अंतर?


19

क्या कोई समझा सकता है कि पोर्ट मैपिंग और मेमोरी मैपिंग में क्या अंतर है, और दोनों में क्या होता है? क्यों पोर्ट मैप किया गया है, यह मेमोरी मैप्स से संरचना में कैसे भिन्न है, और क्या कोई कारण है कि कई आर्किटेक्चर दोनों का उपयोग करते हैं? इसके अलावा, इस अर्थ में एक "पोर्ट" क्या है, क्योंकि पोर्ट का मतलब अलग-अलग संदर्भों में अलग-अलग चीजें हो सकता है?

उदाहरण: पोर्ट फ़ॉरवर्डिंग, संचार बिंदु के रूप में पोर्ट, "पोर्ट मैपिंग"।

मान लें कि मैं OUT को पोर्ट 400h (काल्पनिक; सिर्फ उदाहरण के लिए) लिखता हूं (जैसे x86-64, आदि में)।

क्या या मैं कहाँ लिख रहा हूँ अगर यह स्मृति में नहीं है? "पोर्ट" मैप कैसे किया जाता है, और इस अर्थ में क्या है?



जवाबों:


24

मेमोरी-मैप्ड I / O और पोर्ट-मैपेड I / O, I / O के लिए दो पूरक तरीके हैं।

मेमोरी-मैप्ड I / O

मेमोरी-मैप्ड सिस्टम में, I / O डिवाइस को एक्सेस किया जाता है जैसे यह मेमोरी का एक हिस्सा है। Loadऔर Storeकमांडों को I / O उपकरणों से पढ़ने और लिखने के लिए निष्पादित किया जाता है, जैसे वे मेमोरी के लिए उपयोग किए जाते हैं (पोर्ट-मैप्ड में I / O के लिए विशेष कमांड हैं)। इसका मतलब है कि मैं / ओ डिवाइस मेमोरी के रूप में एक ही एड्रेस बस का उपयोग करता हूं, जिसका अर्थ है कि सीपीयू मेमोरी या आई / ओ डिवाइस को पता के मूल्य के आधार पर संदर्भित कर सकता है । इस दृष्टिकोण को पता स्थान में अलगाव की आवश्यकता होती है: अर्थात, I / O के लिए आरक्षित पते भौतिक मेमोरी के लिए उपलब्ध नहीं होने चाहिए।

नीचे एक सरल, बुनियादी कंप्यूटर सिस्टम की एक छवि है । समकालीन प्रणालियों में मामला अधिक जटिल है।

यहाँ छवि विवरण दर्ज करें


पोर्ट-मैप्ड I / O

विकिपीडिया के अनुसार

पोर्ट-मैप्ड I / O अक्सर सीपीयू निर्देशों के एक विशेष वर्ग का उपयोग करता है विशेष रूप से I / O प्रदर्शन करने के लिए। यह IN और OUT निर्देशों के साथ Intel माइक्रोप्रोसेसरों पर पाया जाता है। ये निर्देश I / O डिवाइस के लिए एक से चार बाइट्स (outb, outw, outl) पढ़ और लिख सकते हैं। I / O उपकरणों में सामान्य मेमोरी से एक अलग एड्रेस स्पेस होता है, या तो CPU के फिजिकल इंटरफेस पर एक अतिरिक्त "I / O" पिन द्वारा पूरा किया जाता है, या I / O को समर्पित एक पूरी बस। क्योंकि I / O के लिए पता स्थान मुख्य मेमोरी से अलग है, इसे कभी-कभी I / O के रूप में संदर्भित किया जाता है।


फायदे और नुकसान के लिए: चूंकि परिधीय उपकरण मेमोरी की तुलना में धीमे हैं, इसलिए डेटा और एड्रेस बस साझा करना मेमोरी एक्सेस को धीमा कर सकता है। दूसरी ओर, आई / ओ सादगी मेमोरी-मैप्ड सिस्टम द्वारा सीपीयू को कम आंतरिक तर्क की आवश्यकता होती है और यह तेजी से, सस्ती, कम बिजली की खपत वाले सीपीयू को लागू करने में मदद करता है। तर्क RISC सिस्टम के समान है: जटिलता को कम करें, अधिक समर्पित और एक मजबूत प्रणाली प्राप्त करें जो एम्बेडेड सिस्टम के लिए काफी काम आता है, उदाहरण के लिए।

इसके विपरीत (विकी से फिर से):

पोर्ट-मैप्ड I / O निर्देश अक्सर बहुत सीमित होते हैं, अक्सर केवल सीपीयू रजिस्टर और I / O पोर्ट के बीच सरल लोड और स्टोर संचालन के लिए प्रदान करते हैं, ताकि, उदाहरण के लिए, पोर्ट-मैप्ड डिवाइस रजिस्टर में एक निरंतर जोड़ने के लिए तीन की आवश्यकता होगी निर्देश: सीपीयू रजिस्टर में पोर्ट को पढ़ें, सीपीयू रजिस्टर में स्थिरांक जोड़ें, और परिणाम को वापस बंदरगाह पर लिखें।

मैं दृढ़ता से अनुशंसा करता हूं कि आप आगे की जानकारी के लिए उस विकि लेख को पढ़ें।


आपके एक प्रश्न का उत्तर देने के लिए:

क्या या मैं कहाँ लिख रहा हूँ अगर यह स्मृति में नहीं है?

आप डेटा बस के माध्यम से I / O इंटरफ़ेस के रजिस्टरों को लिख रहे हैं, जो बाद में (जब तैयार होता है) डेटा को वास्तविक I / O डिवाइस पर भेजता है। नीचे एक उदाहरण I / O डिवाइस इंटरफ़ेस की एक छवि है।

यहाँ छवि विवरण दर्ज करें


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

1
और जब आप इसे लिखते हैं "आप डेटा बस के माध्यम से I / O इंटरफ़ेस के रजिस्टरों को लिख रहे हैं, जो बाद में (जब तैयार होता है) डेटा को वास्तविक I / O डिवाइस पर भेजता है। नीचे I / O के उदाहरण की छवि है। डिवाइस। " आप स्पष्ट नहीं हैं कि क्या IO "रजिस्टर" डिवाइस में है, मुझे लगता है कि अगर आप इसे रजिस्टर करते हैं तो ऐसा लगता है जैसे यह डिवाइस में है। लेकिन फिर आप लिखते हैं ".. जब बाद में (जब तैयार हो) डेटा को वास्तविक I / O डिवाइस पर भेजता है" तो यह स्पष्ट नहीं है कि आप कहाँ कह रहे हैं ये मेमोरी लोकेशन हैं। चाहे वे डिवाइस के भीतर हों, या डिवाइस के बाहर .. या कभी डिवाइस के बाहर।
बारलोप

1
हेड अप: मैंने माइक्रोप्रोसेसरों के व्याख्यान में और जो कुछ विकी से सीखा है, उन लोगों को संकलित किया। यह कहने के बाद, मेरा मतलब है कि आपने अपनी पहली टिप्पणी में जो पूछा है वह यह है: "IO पते और गैर-IO पते भौतिक स्मृति हैं" जैसा कि आप समझते हैं कि स्पष्ट नहीं है। वास्तव में (जहाँ तक मुझे पता है, जहाँ तक मुझे सिखाया जाता है) पता कोड डिकोडर IO इंटरफ़ेस को सक्रिय करता है जब IO पता निर्दिष्ट किया जाता है, जिसका अर्थ है कि जब आप एक पता प्रदान करते हैं, तो यह भौतिक पते की सीमा में नहीं होना चाहिए , जैसे। , $ 0000 - $ 00FF भौतिक के लिए और $ 0100 - $ 01FF IO के लिए (राशि की अनदेखी करें, बस देखभाल की सीमाएं)।
वरक्विलेक्स

@barlop अपने दूसरे प्रश्न के लिए, आप यहीं हैं, मेरा मतलब था "नीचे एक उदाहरण I / O डिवाइस इंटरफ़ेस की एक छवि है "। मैंने इसे सिर्फ मेरे द्वारा किए गए संपादन में ठीक किया। मुझे उम्मीद है कि संपादित ने भ्रम को समाप्त कर दिया। यदि नहीं, तो और पूछें। मैं जितना हो सकता है उतने अच्छे से जवाब देने की कोशिश करूँगा।
वारेक्विलेक्स

1
@barlop स्मृति के स्थान का बिंदु मेरे द्वारा आए अधिकांश पोस्ट और साहित्य में अस्पष्ट है। या तो वे मान लें कि आप पहले से ही जानते हैं, या वे वास्तव में नहीं जानते हैं। मेरा मानना ​​है कि उत्तर इन शब्दों में LDD3 ch से है। 9: "I / O मेमोरी बस RAM जैसी जगहों का एक क्षेत्र है जो डिवाइस बस के ऊपर प्रोसेसर को उपलब्ध कराता है।" (italics जोड़ा गया) यानी मेमोरी और / या रजिस्टर डिवाइस पर हैं। I / O पोर्ट और I / O मेमोरी केवल 2 तरीके हैं जो सिस्टम उन स्थानों को सॉफ्टवेयर के लिए उपलब्ध कराता है।
orodbhen

2

मेमोरी-मैप्ड I / O (केवल MMIO) में, उपकरणों को उन निर्देशों के माध्यम से एक्सेस किया जाता है जो वास्तव में मेमोरी तक पहुंचने के लिए होते हैं। प्रत्येक डिवाइस को निश्चित मेमोरी एड्रेस (एस) मिलता है। हालाँकि जब आप मेमोरी के इस हिस्से को पढ़ने या लिखने की कोशिश करते हैं, तो एक निश्चित डिवाइस (संभवतः उत्तरब्रिज) इसके बजाय संबंधित डिवाइस को भेजता है। भले ही कंप्यूटर में इस तरह के पते के लिए पर्याप्त मेमोरी न हो (जैसे कि एमएमआईओ पते आमतौर पर बहुत अधिक होते हैं), यह भौतिक मेमोरी के रूप में कोई फर्क नहीं पड़ता है (यह वह है जिसे आप मदरबोर्ड पर देखते हैं, जिसे रैम के रूप में जाना जाता है। ) भी संबंधित नहीं है। यदि आपके पास पते के लिए पर्याप्त रैम है, तो यह या तो एक उच्च गैर-आई / ओ एक पर मैप किया जाता है, या बस खो गया अर्थ है जिसे आप पढ़ नहीं सकते हैं या वहां नहीं लिख सकते हैं।

पोर्ट-मैप्ड I / O (बस PMIO) बहुत अलग है। आपके पास बंदरगाहों को पढ़ने और लिखने के लिए अलग-अलग निर्देश हैं। मेमोरी एड्रेस-स्पेस की तरह ही एक पोर्ट एड्रेस-स्पेस है जहां पते या तो I / O पते हैं जो वास्तव में उपकरणों के साथ संवाद करते हैं या बस अमान्य हैं। पीएमआईओ को अनिवार्य रूप से केवल I / O के लिए एक अलग मेमोरी एड्रेस-स्पेस के साथ MMIO के रूप में सोचा जा सकता है।


"पीएमआईओ को अनिवार्य रूप से I / O के लिए एक अलग मेमोरी एड्रेस-स्पेस के साथ MMIO के रूप में सोचा जा सकता है।" - पता स्थान इतनी सरल और बुनियादी अवधारणा है, आप अपने अन्यथा उचित जवाब के लिए भ्रामक सादृश्य से क्यों निपटते हैं? यह भ्रामक उपमा तथ्यों को नहीं बदलती है: उदाहरण के लिए "मेमोरी एड्रेस स्पेस" के अलावा अन्य एड्रेस स्पेस भी हो सकते हैं।
चूरा

1

'आई / ओ सिग्नल' और 'मेमोरी मैपिंग' जैसे नामों से सब कुछ वास्तव में होने की तुलना में कहीं अधिक जटिल हो जाता है, और इसलिए व्यक्ति को यह आभास देता है कि इसमें और भी बहुत कुछ है और यह एक उन्नत विषय को कवर करता है। प्रवृत्ति अब यह है कि लोग इसे कुछ नया मानते हैं। लेकिन यह मामले से बहुत दूर है। यहां तक ​​कि 1830 में बैबेज ने अपने प्रिंटर को चला दिया, इसके लिए एक आई / ओ सिग्नल की आवश्यकता थी, जो एक एक्सल और कॉगव्हील द्वारा किया गया था। जैसे कि 2000 साल पहले या ग्रीक काल के सिनेमाघरों में हीरो की सिकंदरिया की मशीनों में, उन्होंने हमेशा रोशनी या दृश्यों को नियंत्रित करने के लिए अलग रस्सी के एक सेट से एक रस्सी खींची, प्रत्येक रस्सी एक इनपुट और आउटपुट लाइन की तरह है, यह इस प्रकार है उस के रूप में सरल, पता 'कौन सी रेखा' है अर्थात कौन सी चीज, मेमोरी या डिवाइस जिसे हम चुन रहे हैं,

यद्यपि बड़े मेनफ्रेम कंप्यूटर जो कि अलमारियाँ से भरी हुई इमारतें हैं, उन्होंने 40 के दशक में 64 बिट राइट बैक जैसी चीजों का इस्तेमाल किया और इसलिए I / O मैपिंग को ठीक उसी तरह वापस लाया, जैसे बहुत समय पहले, ई.जी. कोनराड ज़्यूस और उनके कमरे के आकार के कंप्यूटर ने फ्लोटिंग का उपयोग किया था। 1930 के दशक में दशमलव में लगभग 20 अंक थे, और उनके प्रिंटर और उनके विभिन्न प्रकाश बल्ब संकेतक और उनके स्विच जैसी चीजों को चलाना था। लेकिन छोटे माइक्रोप्रोसेसरों पर कहानी अलग है कि उन्हें 60 के दशक तक कल्पना नहीं की गई थी और 1971 तक बनाया गया था। 80 ​​के दशक में 8 बिट लॉजिक का उपयोग करने वाली इन सभी तकनीकों का उपयोग 70 के दशक में 4 बिट्स में 4 बिट्स में माइक्रोप्रोसेसरों के लिए किया गया था, और उनका उपयोग किया गया था 90 में 16bit में ' s जब हर किसी को कंप्यूटर मिलना शुरू हुआ और इसलिए क्योंकि अब उनके सामने यह I / O और मेमोरी मैपिंग विषय पर पहली बार चर्चा शुरू हुई थी, और यह कुछ नया प्रतीत हुआ जो इंटरनेट के आगमन के साथ आया था; तब हमारे पास 00 में 32 बिट और 10 के दशक में 64 बिट कंप्यूटर थे, जिसके कारण मेमोरी डाउन डेटा लाइनों की अंतहीन चर्चा होती थी। आपके प्रश्न का उत्तर देने के लिए, मैं उन चिप्स के बारे में बात करूंगा जो 30-40 साल पहले इलेक्ट्रॉनिक्स के शौकीनों ने खरीदे थे, जैसे कि मैंने उस समय किया था, बाद में, चीजें इतनी उन्नत हो गईं कि मैं बाद के चिप्स के साथ निर्माण करने में असमर्थ था, लेकिन सिद्धांत अभी एक ही हैं, गेट्स केवल बड़े काले बॉक्स वाले चिप्स के अंदर छिपे हुए हैं जो अन्य पिनों को समाहित करते हैं जो इन ऑपरेशनों के साथ समानांतर में बहुत अधिक चल रहे हैं (जैसे कई ऑक्टल लैच को सक्षम करना)

ठीक है, मुझे सभी नई भाषाओं के बारे में कुछ भी नहीं पता है या यह आधुनिक पीसी पर कैसा है, लेकिन मैं आपको बता सकता हूं कि पुराने दिनों में कैसा था जब मैं चिप्स के साथ कंप्यूटर का निर्माण करता था।

सभी I / O मैपिंग और मेमोरी मैपिंग का मतलब सरल शब्दों में होता है, यदि आप किसी उत्सव के लिए प्रकाश बल्ब के उदाहरण का भार उठाते हैं और तारों में से प्रत्येक में जा रहे हैं और बल्ब को मेमोरी लोकेशन कहते हैं, (यानी बल्ब रैम में मेमोरी का प्रतिनिधित्व करते हैं, या तो चालू या बंद, और यदि आप स्थान का चयन करते हैं तो आपको तार 0, स्थान 1, तार 1, नियंत्रण रेखा 2 तार 2 और इसी तरह) मिलता है यदि आपने कुछ और तार जोड़े हैं जैसे एक तार एक घंटी है, तो वह विशेष स्थान एक मेमोरी नहीं है एक उपकरण है, जिसे आप रिंग करने के लिए, OUT कमांड का उपयोग करते हुए आउटपुट करते हैं। लेकिन इसे कंप्यूटर के दृष्टिकोण से मेमोरी स्थान के रूप में देखा जाता है, क्योंकि यह एमपीयू के तार के समान आता है। यदि एक और तार जोड़ा गया था जो एक स्विच था जिसे आपने बाहरी रूप से संचालित किया था, तो यह एक I / O डिवाइस है, जो पीसी के लिए एक IN निर्देश होगा। तो इसे I / O मैप किया गया I / O कहा जाता है।

अब कंप्यूटरों पर, बसों के तार पता लाइनों या डेटा लाइनों का प्रतिनिधित्व करते हैं, लेकिन वे बाइनरी में हैं, यानी 2 तारों के साथ आपके पास 00 01 10 11 अर्थात 4 संयोजन 2 ^ 2 हो सकते हैं, इसलिए 8 लाइनों 2 ^ 8 = 256 संभावनाओं के साथ, 20 लाइनें 2 ^ 20 = 1048576 30 लाइनों के साथ 2 ^ 30 = 1073741824 (1 टमटम) 30 लाइनों के साथ संभावनाओं की। तो इसीलिए इसे I / O और मेमोरी कहने के बजाय MAPPED कहा जाता है, वे I / O मैप्ड, और मेमोरी मैप्ड कह रहे हैं, क्योंकि आप तारों को मैप कर रहे हैं जैसे AS COMBINATION y बाइनरी कोडिंग। यदि आप कहते हैं कि आपके पास 2 तार, 4 संयोजन हैं, तो उन्हें केवल बल्ब से नहीं जोड़ा जा सकता है, (एमपीयू से छोटे वोल्टेज से आवश्यक वर्तमान प्रवर्धन का उल्लेख नहीं करने के लिए, और प्रतिक्रिया वर्तमान की रोकथाम), लेकिन 2 तारों में है एक डिकोडर से गुजरने के लिए (हमने 138 का उपयोग करके 3 लाइनों को 8 लाइनों में डिकोड करने के लिए, 164 को 16 लाइनों के लिए 4 बाइनरी लाइनों को डिकोड करने के लिए उपयोग किया। ) एक बार डिकोडर के माध्यम से इन 2 लाइनों जैसे A0 और A1 (पता 0 और पता 1 (LINES)), आपके द्वारा चलाए जा रहे विशेष बल्ब के लिए 4 लाइनें (चालू या बंद) हो जाती हैं (कंप्यूटर पर मामले में, मेमोरी), लेकिन कुछ मामलों में ये स्थान इसके बजाय कुछ इनपुट / आउटपुट डिवाइस का चयन करते हैं, और कहते हैं कि 'मेरे बजाय' का उपयोग करें, जैसे कि मेमोरी, एक बार स्थित होने पर, डेटा को या तो एक तरह से पारित किया जाता है या दूसरे (रास्ते में वोल्टेज में कटौती करने के लिए चतुर त्रि राज्य तर्क का उपयोग करके) हर बार) डेटा बस लाइनों पर D0..7 या D0..31 या कंप्यूटर पर डेटा का आकार जो भी हो (आपके पास 2 बिट, 4bit, 8bit, 16bit, 32bit, 64bit, 128bit, 256bit, कंप्यूटर, जो भी हो) कंप्यूटर आप बना रहे हैं)। इसलिए डेटा स्वाभाविक रूप से मेमोरी लाइनों से या आई / ओ डिवाइस (यदि यह मेमोरी मैप्ड है) में स्वाभाविक रूप से या बाहर से गुजरता है, लेकिन यह इन / आउट निर्देशों के साथ जुड़ा नहीं होना चाहिए, कुछ और I / O मेमोरी ब्लॉक से इस और OUT का मतलब है, MPU के अंदर एक विशेष I / O मेमोरी ब्लॉक, विशेष रूप से I / O के लिए असाइन किया गया है, अर्थात (मेमोरी मैप नहीं), यह I / O स्पेस आपको हमेशा नहीं मिलता है कुछ माइक्रोप्रोसेसरों पर, उदाहरण के लिए, मुझे नहीं लगता कि हमारे पास 6502 पर था, लेकिन हमारे पास यह एक z80 पर था। अधिक कलात्मक चिप्स का उपयोग केवल मेमोरी मैपिंग में किया जाता है, उदाहरण के लिए गेम कंसोल आदि में, अधिक समझदार लेकिन निर्बाध (पुस्तक में बने) चिप्स I / O स्थान के लिए भी जाते हैं। मेमोरी मैपिंग I / O गति को हल्का कर रहा है क्योंकि इसमें मेमोरी एड्रेसिंग (जो रैम के लिए सुपर फास्ट है) शामिल है, इसलिए ग्राफिक्स टाइप कंप्यूटर स्पीड पाने के लिए I / O के लिए सिर्फ मेमोरी मैपिंग का उपयोग करता है। I / O मैप किए गए I / O को धीमे पोर्ट जैसे rs232, या समानांतर पोर्ट के लिए असाइन किया गया है और IN OUT कमांड का उपयोग करता है। इ। (मेमोरी मैप नहीं किया गया), यह I / O स्पेस आपको हमेशा कुछ माइक्रोप्रोसेसरों पर नहीं मिलता है, उदाहरण के लिए मुझे नहीं लगता कि हमारे पास यह 6502 पर था, लेकिन हमारे पास यह एक z80 पर था। अधिक कलात्मक चिप्स का उपयोग केवल मेमोरी मैपिंग में किया जाता है, उदाहरण के लिए गेम कंसोल आदि में, अधिक समझदार लेकिन निर्बाध (पुस्तक में बने) चिप्स I / O स्थान के लिए भी जाते हैं। मेमोरी मैपिंग I / O गति को हल्का कर रहा है क्योंकि इसमें मेमोरी एड्रेसिंग (जो रैम के लिए सुपर फास्ट है) शामिल है, इसलिए ग्राफिक्स टाइप कंप्यूटर स्पीड पाने के लिए I / O के लिए सिर्फ मेमोरी मैपिंग का उपयोग करता है। I / O मैप किए गए I / O को धीमे पोर्ट जैसे rs232, या समानांतर पोर्ट के लिए असाइन किया गया है और IN OUT कमांड का उपयोग करता है। इ। (मेमोरी मैप नहीं किया गया), यह I / O स्पेस आपको हमेशा कुछ माइक्रोप्रोसेसरों पर नहीं मिलता है, उदाहरण के लिए मुझे नहीं लगता कि हमारे पास यह 6502 पर था, लेकिन हमारे पास यह एक z80 पर था। अधिक कलात्मक चिप्स का उपयोग केवल मेमोरी मैपिंग में किया जाता है, उदाहरण के लिए गेम कंसोल आदि में, अधिक समझदार लेकिन निर्बाध (पुस्तक में बने) चिप्स I / O स्थान के लिए भी जाते हैं। मेमोरी मैपिंग I / O गति को हल्का कर रहा है क्योंकि इसमें मेमोरी एड्रेसिंग (जो रैम के लिए सुपर फास्ट है) शामिल है, इसलिए ग्राफिक्स टाइप कंप्यूटर स्पीड पाने के लिए I / O के लिए सिर्फ मेमोरी मैपिंग का उपयोग करता है। I / O मैप किए गए I / O को धीमे पोर्ट जैसे rs232, या समानांतर पोर्ट के लिए असाइन किया गया है और IN OUT कमांड का उपयोग करता है। अधिक समझदार लेकिन अविवेकी (पुस्तक में बने) चिप्स I / O स्थान के लिए भी जाते हैं। मेमोरी मैपिंग I / O गति को हल्का कर रहा है क्योंकि इसमें मेमोरी एड्रेसिंग (जो रैम के लिए सुपर फास्ट है) शामिल है, इसलिए ग्राफिक्स टाइप कंप्यूटर स्पीड पाने के लिए I / O के लिए सिर्फ मेमोरी मैपिंग का उपयोग करता है। I / O मैप किए गए I / O को धीमे पोर्ट जैसे rs232, या समानांतर पोर्ट के लिए असाइन किया गया है और IN OUT कमांड का उपयोग करता है। अधिक समझदार लेकिन अविवेकी (पुस्तक में बने) चिप्स I / O स्थान के लिए भी जाते हैं। मेमोरी मैपिंग I / O गति को हल्का कर रहा है क्योंकि इसमें मेमोरी एड्रेसिंग (जो रैम के लिए सुपर फास्ट है) शामिल है, इसलिए ग्राफिक्स टाइप कंप्यूटर स्पीड पाने के लिए I / O के लिए सिर्फ मेमोरी मैपिंग का उपयोग करता है। I / O मैप किए गए I / O को धीमे पोर्ट जैसे rs232, या समानांतर पोर्ट के लिए असाइन किया गया है और IN OUT कमांड का उपयोग करता है।

अब अगर दो तारों को जोड़ने के बजाय, अगर आपने वास्तव में दो तारों को बदल दिया है जो मूल रूप से बल्बों में चले गए और उन बल्बों में से कुछ को ले लिया और उन्हें अन्य चीजों के साथ बदल दिया, जैसे एक पर घंटी और दूसरे पर स्विच, ये अब संदर्भित नहीं हैं (चयनित हैं ) क्रमशः IN और OUT निर्देशों के साथ, उन्हें उस विशेष मेमोरी लोकेशन पर पहुंचकर संदर्भित किया जाता है जो उन तारों का चयन करता है (जो मूल रूप से बल्ब थे)। तो यह मेमोरी मैप्ड I / O है।

मेमोरी मैप्ड I / O का मतलब है कि वास्तविक पता बस जो आम तौर पर मेमोरी (रैम) में जाती है, अन्य डीकोडर्स (लॉजिक डिकोडर्स) से भी जुड़ी होती है, और जब यह एड्रेस सिग्नल के विशेष बाइनरी संयोजन को होश में लाता है, तो यह एक आउटपुट हाई पैदा करता है , (उदाहरण के लिए यदि आपके पास भार था और फाटक नहीं है, और आपने कहा, यदि यह और ऐसा नहीं है, तो पिन A0..A20 या आपके पते की बस का आकार जो भी हो) का उपयोग करके, तो यह उच्च संकेत कुंडी लगाता है, (एक विशेष डिवाइस के लिए, एक सीरियल पोर्ट, एक समानांतर पोर्ट की तरह), यह आईएएस / ओ डिवाइस के माध्यम से डेटा बस पर डेटा को कुंडी लगाता है। यह I / O डिवाइस पर लिखने के लिए है। पढ़ना विपरीत तरीके से काम करता है, I / O डिवाइस, डेटा वापस पास करता है, और अगर मुझे सही याद है, तो यह पता लाइनों पर सटीक समान पता कोड संयोजन भेजता है।

मुझे लगता है, यह आज इस तरह से काम करना चाहिए, सिवाय इसके कि वे अभी और अधिक डेटा और पता लाइनों होंगे।

आप वस्तुतः पते की पंक्तियों में I / O की प्रतीक्षा कर रहे हैं। इसलिए I / O प्रभावी रूप से मेमोरी स्पेस में मैप किया जाता है, जैसे कि यह मेमोरी था। लेकिन एक और कुंडी एक ही समय में राम तक पहुँचने से पता पिन को निष्क्रिय कर देती है, ताकि आपको एक ही लाइन पर दो पते या डेटा स्रोतों का वोल्टेज न मिले, जिससे चिप्स को नुकसान होगा।

IN और OUT निर्देश के साथ, हमारे पास 40 साल पहले यह z80 चिप पर था। यह विशेष मामलों के लिए है जहां चिप वास्तव में I / O के साथ एक अलग तरीके से व्यवहार करता है, अर्थात यह मेमोरी मैपेड नहीं है। (यानी मेमोरी मैपिंग के साथ, आप सिर्फ मेमोरी लोकेशन को पढ़ते या लिखते हैं, लेकिन IN और OUT के साथ आप पहले से ही CPU को बता रहे हैं कि यह I / O सिग्नल है और मेमोरी नहीं)। तो IN / OUT निर्देश के साथ, इसका अपना I / O एड्रेस स्पेस है (जो कि RAM की मेमोरी के लिए अतिरिक्त है), यह I / O Ram, जैसा कि यह प्रतीत होता है, इसमें पते का एक सेट होता है, बस सिवाय इसके कि आप सीधे डिकोडर के माध्यम से डिवाइस को उन I / O पते से जोड़ रहे हैं, और आप मानक पता पिन से I / O डिवाइस एक्सेस नहीं कर रहे हैं, यह IN / OUT निर्देश के लिए है।

जो इस मामले के लिए अक्षर और संख्या के लिए एएससीआईआई कोड के तार के रूप में सर्वश्रेष्ठ रूप से पारित किए गए हैं। ये कमांड ठीक उसी तरह हैं जैसे कि आपने लूप में IN और OUT निर्देशों का उपयोग किया था, जहां गिनती स्ट्रिंग की लंबाई है।

यदि आप पीसी स्पीकर को एक्सेस कर रहे हैं, तो आप OUT का उपयोग करके एक बार में एक डेटा पास कर सकते हैं।

यदि आप समानांतर पोर्ट से पढ़ रहे हैं, तो आप IN कर रहे हैं, और पोर्ट के I / O पते के लिए कोड का उपयोग कर रहे हैं। इसे लिखना, जैसे इलेक्ट्रॉनिक सिग्नल द्वारा पुराने प्रिंटर या रोबोटिक्स को चलाना, आप OUT कमांड का उपयोग करेंगे। समानांतर पोर्ट और सीरियल पोर्ट (पुराने RS232) विशिष्ट पोर्ट हैं जिनका उपयोग किया गया था। RS232 सीरियल डेटा है, केवल एक बिट में या बाहर की अनुमति है, इसलिए यदि आप एक rs232 से पढ़ रहे थे, तो आपके पास केवल 1 बिट का बाइट होगा जो प्रासंगिक है, आउटपुट के साथ भी। बॉड दर एक rs232 के लिए लगभग 17kHz अधिकतम है, लेकिन ये इलेक्ट्रॉनिक्स को बहुत ड्राइव करते थे, दिनों में, मैं rs232 सर्किट का निर्माण करता था, उदाहरण के लिए वोल्टेज पढ़ने या PIC माइक्रो-नियंत्रक ड्राइव करने के लिए। प्रत्येक पोर्ट, नाम दिया गया है COM1 COM2 COM3 COM4 और उनके पास I / O पते हैं। मुझे यहाँ पर यकीन नहीं है, लेकिन वे उदाहरण के लिए 3F8h 378h (h = hex address) के समान हैं

मैं आधुनिक बंदरगाहों के बारे में निश्चित नहीं हूं, लेकिन अगर आप USB पर लिख रहे हैं, तो यह सबसे अधिक संभावना है कि मैमोरी I / O अधिक गति के लिए मैप की जाएगी।

PS / 2 कीबोर्ड पोर्ट, मुझे लगता है कि यह कीबोर्ड से डेटा पढ़ने के लिए IN निर्देश का उपयोग करता है। यह पुराने RS232 की जगह लेता है, लेकिन मुझे लगता है कि थोड़ा अलग कल्पना है।

एक डिस्क ड्राइव आमतौर पर मेमोरी मैप की जाती थी, संभवतः यह अब भी है, यानी आप IN / आउट निर्देशों के साथ डिस्क ड्राइव नहीं चलाते हैं, वे बहुत धीमी गति से होंगे। लेकिन पोर्ट वैसे भी धीमे होते हैं, इसलिए इससे कोई फर्क नहीं पड़ता, उदाहरण के लिए एक प्रिंटर धीमा है जहाँ तक डेटा दर की तुलना में आवश्यक है उदाहरण के लिए हार्ड डिस्क की आवश्यकता 200 मेगाबाइट / सेकंड। एक वक्ता को केवल ध्वनि की आवृत्ति की आवश्यकता होती है लगभग 10 या 20, कहते हैं कि 20kHz एक बजर के लिए पर्याप्त होगा, इसलिए यह I / O है। धीमी चीजें I / O, IN / OUT निर्देशों का उपयोग करती हैं। इसलिए USB शायद अब मेमोरी मैप हो गया है, आपको इस पर जांच करनी होगी।

इसे समझने का एक बेहतर तरीका यह है। 80 के दशक में पुराने कंप्यूटरों पर कभी-कभी आप अपने द्वारा बनाए गए कुछ डिवाइस को नियंत्रित करना चाहते थे, और आउटपुट पोर्ट के लिए कोई कल्पना नहीं थी (जैसा कि उन दिनों निर्माता ने इसे छिपा कर रखा था ताकि कुछ कंपनियां जैसे जॉयस्टिक और कारतूस कंपनियां आगे निकल सकें) कुछ व्यापारिक सौदे द्वारा बाजार)। आपको क्या करना था कंप्यूटर और शाब्दिक मिलाप तारों को पता बस में कुछ बिंदुओं पर खोलना था, जैसे कि आपने सर्किट में कुछ बिंदुओं पर तीन तारों को सुरक्षित दूरी पर मिलाया (ताकि गर्मी से चिप को नुकसान न पहुंचे), सर्किट बोर्ड लेआउट द्वारा वायर्ड किए गए अंक जैसे कि माइक्रोप्रोसेसर पर A15 A7 और A1 को पिन करें। और आपको आमतौर पर एक MREQ लाइन (एक मेमोरी रिक्वेस्ट लाइन और / या RD / WR लाइन) को एक नेटर सिग्नल बनाने के लिए तार करना होगा, और उसको तर्क में जोड़ना होगा या नहीं, लेकिन अगर आप चतुर थे तो आप इसे केवल पता लाइनों के साथ कर सकते थे) और फिर आपने इन तीन तारों को जोड़ा + यह अतिरिक्त तैयार प्रकार का संकेत (जैसे MREQ RD या WR लाइन कुछ सक्रिय कम या उच्च देने के लिए (जिसे संभव अतिरिक्त की आवश्यकता नहीं होगी) गेट यहाँ) कहने के लिए DATA अब लाइन पर तैयार है) एक 4 इनपुट और गेट के माध्यम से, जिसने एक आउटपुट को 200 ओम अवरोधक के माध्यम से एक सीसा दिया, आप स्वयं एक उच्च प्रकाश I / O का नेतृत्व किया प्रकाश के लिए मैप किए गए हैं , जिसे आप SR सर्किट या D प्रकार की कुंडी के माध्यम से 1 सर्किट में कुछ सर्किट बोर्ड पर बाह्य रूप से स्टोर करने के लिए ले सकते हैं। यहाँ 15 32K लाइन है, 7 64 लाइन है, 1 2 लाइन है (2 की शक्तियों में बाइनरी काम करता है, इसलिए A1 2 ^ 1 है, A7 2 ^ 7 है, और A15 2 ^ 15 है), इसलिए यदि आप पता स्थान 32768 + 64 + 2 = 32834 = F041 हेक्स में, एलडीए या एसटीए या एलडी का उपयोग कर पुराने MPU के कोडांतरक में, आप इसका नेतृत्व करेंगे। यदि यह अवरोधक 100 ओम के बारे में कहे तो यह उज्ज्वल होगा। तो आपने मेमोरी मैप्ड I / o किया है, जो जितना सरल है, आप इसे आज ही अपने mpu एड्रेस लाइन्स को सोल्डर कर के कर सकते हैं। लेकिन आप इसे अब सर्किट की नाजुकता के कारण नहीं करेंगे। लेकिन आप डेटा लाइनों D0..7 (पुराने दिनों में) में शामिल हो सकते हैं या कह सकते हैं कि d0..31 अब 32bit के लिए एक पुराने 486 पीसी पर। फिर यदि आपने मशीन कोड में मान 8 (mov ax, 8 आजकल) के साथ संचायक को लोड करके उस स्थान को संबोधित किया है या उस संचायक मान को एक पता स्थान (mov F041h, ax संचायक) में संग्रहीत करते हैं, तो आप आज ही प्राप्त करेंगे जिससे आने वाला है पर ध्यान दें। 8, उदाहरण में, डेटा बस में क्या है, इस विशेष मामले में, हम डेटा पारित नहीं कर रहे हैं हम केवल विशेष डिवाइस को सक्षम कर रहे हैं (एलईडी चालू है, अगर हमने THAT I / O डिवाइस का चयन किया है, यहाँ, बस एक एलईडी), इसलिए इस उदाहरण में यह महत्वपूर्ण नहीं है कि हमारे पास उस MOV कुल्हाड़ी, 8 निर्देश के साथ क्या संख्या है, यह हो सकता है जैसे mov ax, 243 और हम अभी भी F041h लाइन पर LED को सक्षम कर रहे हैं जब हम तब F041h करते हैं, जैसा कि चूँकि हम उसी पते का उपयोग कर रहे हैं। आप देखें, पता लाइनें हैं और डेटा लाइनें हैं। तो जब आप COM1 में 3F8 या जो कुछ भी पता है, वह I / O मेमोरी मैप बस पोर्ट, जैसे ps / 2, और ए और गेट पर सिग्नल भेज रहा है, अगर आपके पास 1110000100 है, तो 11 है। 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण में देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें। 8 निर्देश, यह हो सकता है जैसे कि mov ax, 243 और हम अभी भी F041h लाइन पर LED को सक्षम कर रहे हैं जब हम तब F041h करते हैं, क्योंकि हम एक ही पते का उपयोग कर रहे हैं। आप देखें, पता लाइनें हैं और डेटा लाइनें हैं। तो जब आप COM1 में 3F8 या जो कुछ भी पता है, वह I / O मेमोरी मैप बस पोर्ट, जैसे ps / 2, और ए और गेट पर सिग्नल भेज रहा है, अगर आपके पास 1110000100 है, तो 11 है। 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण में देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें। 8 निर्देश, यह हो सकता है जैसे कि mov ax, 243 और हम अभी भी F041h लाइन पर LED को सक्षम कर रहे हैं जब हम तब F041h करते हैं, क्योंकि हम एक ही पते का उपयोग कर रहे हैं। आप देखें, पता लाइनें हैं और डेटा लाइनें हैं। तो जब आप COM1 में 3F8 या जो कुछ भी पता है, वह I / O मेमोरी मैप बस पोर्ट, जैसे ps / 2, और ए और गेट पर सिग्नल भेज रहा है, अगर आपके पास 1110000100 है, तो 11 है। 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण में देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें। चूंकि हम उसी पते का उपयोग कर रहे हैं। आप देखें, पता लाइनें हैं और डेटा लाइनें हैं। तो जब आप COM1 में 3F8 या जो कुछ भी पता है, वह I / O मेमोरी मैप बस पोर्ट, जैसे ps / 2, और ए और गेट पर सिग्नल भेज रहा है, अगर आपके पास 1110000100 है, तो 11 है। 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण में देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें। चूंकि हम उसी पते का उपयोग कर रहे हैं। आप देखें, पता लाइनें हैं और डेटा लाइनें हैं। तो जब आप COM1 में 3F8 या जो कुछ भी पता है, वह I / O मेमोरी मैप बस पोर्ट, जैसे ps / 2, और ए और गेट पर सिग्नल भेज रहा है, अगर आपके पास 1110000100 है, तो 11 है। 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण में देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें। 11 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें। 11 3 1000 एफ है और 0100 8 है, बाइनरी को हेक्स रूपांतरण देखें। यदि उच्च वोल्टेज उन बिट स्थितियों में दिखाई देते हैं जहां 1 है, तो पोर्ट, उदाहरण के लिए rs232 या ps / 2, सक्रिय पर सेट है, अर्थात यह सक्षम है, यह सक्षम करता है CE चिप सक्षम सिग्नल, या CS चिप द्वारा सरल का चयन करें।

एक कुंडी पर यह E सक्षम पिन या OE सक्रिय कम आउटपुट सक्षम है। ऊपर वर्णित उदाहरण के साथ हम उन पतों का उपयोग करते हैं जिनका चयन करने के लिए (डीकोडिंग द्वारा) जो कि I / O डिवाइस का उपयोग करना चाहते हैं (यानी उदाहरण में एलईडी आती है, यदि वह I / O डिवाइस चयनित है। तो यह सक्षम रेखा है। , जब I / O डिवाइस का चयन किया जाता है, तो पुराने दिनों में डेटा बस (D0..7 पुराने दिनों में, या D0..63 उदाहरण के लिए) से पारित किया जाता है, ऑक्टल लैचेस के माध्यम से 373 पुराने में दिन, ये डी-टाइप फ्लिप फ्लॉप सर्किट हैं जो फ्लिप फ्लॉप के अंदर डेटा को स्टोर करते हैं। एक सक्रिय उच्च घड़ी बढ़त के साथ, डेटा गुजरता है और संग्रहीत किया जाता है। यह घड़ी का किनारा डेटा सिग्नल पर 'डेटा आरडीवाई' सिग्नल से आएगा। , इसके विभिन्न नाम हैं, मुझे नहीं पता कि नाम अब क्या है। इसलिए 64 बिट के लिए, हमारे पास 8 ऑक्टल लेचेस हैं। और वे डेटा को नियंत्रित करने के लिए द्वि-दिशात्मक कुंडी का उपयोग करते हैं, या त्रिकोणीय स्थिति, ताकि जब I / O डिवाइस का उपयोग न किया जाए, तो डेटा लाइनें उच्च प्रतिबाधा स्थिति में हों। इसलिए इसलिए आप पता लाइनों पर एक संयोजन के साथ I / O डिवाइस का चयन करते हैं, यह संख्या है, उदाहरण के लिए OUT 3F8h, 7 में 3f8h, और डेटा, उदाहरण 7 में यहां, डेटा लाइनों पर पारित किया गया है, OUT कमांड डेटा डेटा कुंडी से बाहर गुजर रहा है, और I / O डिवाइस के लिए है। यदि आपके पास IN होता है, तो आप एक कमांड जैसे 3f8h, 800h में कर रहे होंगे, (मुझे उम्मीद है, लेकिन मुझे x86 असेंबलर का सिंटैक्स नहीं पता है), मेरा मतलब क्या है, IN के लिए, आप डेटा से इनपुट कर रहे हैं डेटा लाइनें (पता चयनित करने के बाद, यहाँ 3f7h, जो THAT I / O डिवाइस का चयन करता है), यह डेटा I / O डिवाइस से आता है, डेटा प्रकार (डेटा बस लाइनों के प्रत्येक बिट के लिए एक) में डी-टाइप फ्लिप फ्लॉप के माध्यम से, और एमपीयू माइक्रो-प्रोसेसिंग यूनिट पर D0..7 या (आधुनिक पीसी पर D0..63) इनपुट है। )। इस उदाहरण में मैंने IN 3f8h, 800h डाला, यह दिखाने के लिए कि एक बार जब डेटा इसमें आता है तो उसे पता 800h में संग्रहीत किया जाता है। X86 का सिंटैक्स मुझे लगता है कि अलग है, आपको शायद 3f8h, आह या ऐसा ही कुछ करना होगा, यानी पहले एक रजिस्टर में डेटा के साथ आ रहा है, फिर आप MOV 800h, आह यानी मेमोरी में डेटा को स्थानांतरित करेंगे। रैम में स्थान, (यदि आप इसे स्टोर करना चाहते थे), या आह आदि के साथ कुछ और करें आह एक उदाहरण रजिस्टर है, यह कोई भी हो सकता है, अल, bh, bl आदि जो भी हो, लेकिन सिंटैक्स की जांच करें, हर कोडांतरक प्रणाली है थोड़ा अलग, मैं x86 का विशेषज्ञ नहीं हूं। फिर से, मैं एक उदाहरण I / O पते के रूप में 3f8h का उपयोग कर रहा हूं, सैकड़ों हैं,

जब आप मेमोरी तक पहुँचते हैं (RAM, जैसे कि 70 के दशक में 64byte स्टैटिक रैम्स और डायनेमिक रैम, 80 के दशक में 8K SRAMs और DRAMs, SIMMS की पंक्तियाँ प्रत्येक में कुछ मेगाबाइट्स होती हैं) DIMM युक्त DDRM के रूप में है, लाइन मेमोरी मॉड्यूल में दोहरी है, मैंने जाँच नहीं की है, लेकिन नवीनतम शायद कोई संदेह नहीं है कि प्रत्येक में प्रत्येक छोटे चिप पर कुछ गीगाबाइट हैं), अगर यह I / O पता नहीं है (बहुत कुछ पते I / O पते हैं, आजकल मेमोरी लाखों गुना अधिक है या एक आधुनिक पीसी पर I / O की तुलना में पता स्थान में होने की संभावना है), आप अभी भी मेमोरी के लिए समान रीड राइट डेटा निर्देशों का उपयोग करते हैं, लेकिन आप नहीं हैं कुछ बाहरी लॉजिक सर्किटों को चलाना जो उन बिट्स की तलाश करते हैं, इसके बजाय उन पते और डेटा पिनों को सीधे रैम चिप्स में वायर्ड किया जाता है।

मशीन कोड में, I / O और मेमोरी एड्रेसिंग केवल एक ही प्रतीत होता है, जैसे कि वे दोनों मेमोरी एक्सेस हैं, लेकिन भौतिक रूप से जो भी चल रहा है वह वास्तविक इलेक्ट्रॉनिक सर्किट में पूरी तरह से अलग है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.