क्या एक डीएमए का उपयोग करते समय सीपीयू पूरी तरह से फ्रीज हो जाता है?


19

मेरे पास बहुत सीधा सवाल है, लेकिन मुझे कहीं भी इसका जवाब नहीं मिला।

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

मेरा प्रश्न यह है: यदि DMA हार्ड डिस्क और RAM के बीच (संभवतः बहुत लंबा) डेटा ट्रांसफर की अनुमति दे रहा है, तो इसका मतलब यह नहीं है कि सीपीयू रैम का उपयोग नहीं कर सकता है और इसलिए इसका अगला निर्देश नहीं ला सकता है?

संक्षेप में, डीएमए का मतलब प्रोसेसर को बदलने के लिए है जो सभी I / O को पढ़ता है और लिखता है, ताकि प्रोसेसर को अन्य चीजों को करने के लिए मुक्त किया जा सके। हालांकि, अगर यह रैम से अपने निर्देशों को प्राप्त नहीं कर सकता है, तो इसे वैसे भी मुक्त नहीं किया गया है।

क्या कुछ विस्तार है जो मुझे यहाँ याद आ रहा है?

धन्यवाद


7
हाँ। डीएमए शायद ही कभी स्मृति के पूर्ण बैंडविड्थ पर चलता है। यह सिर्फ I / O डिवाइस की दर द्वारा नियंत्रित चक्र को (या चक्रों को फोड़ना) हर बार चुराता है।
डेव ट्वीड

एमिगा होम कंप्यूटर ने यह देख कर आस पास जमा कर लिया कि सीपीयू वास्तव में केवल दो साइकिलों को एक्सेस करता है, फिर दो चक्रों के लिए बस से दूर रहे, जब पूरी गति से चल रहे थे। डीएमए-आधारित बाह्य उपकरणों (ग्राफिक्स, ऑडियो, डिस्क) ने बीच में चक्रों का उपयोग किया। आपके प्रश्न का उत्तर नहीं है क्योंकि प्रश्न काल्पनिक है और कंप्यूटर हमेशा व्यावहारिक विवरण द्वारा बर्बाद हो जाते हैं। :)
पाइप

2
@ पका: यह सही नहीं लगता। Amiga ने M68K CPU का उपयोग किया, जिसमें पूरी तरह से अतुल्यकालिक बस है। आप शायद Apple II के बारे में सोच रहे होंगे, जिसने इस तथ्य का लाभ उठाया कि इसका 6502 CPU केवल प्रत्येक घड़ी चक्र के आधे हिस्से के लिए बस का उपयोग करता है, और वीडियो आउटपुट के लिए अन्य आधे हिस्से का उपयोग करता है, जो DRAM को ताज़ा रखने के लिए भी काम करता है।
डेव ट्वीड

4
आधुनिक सीपीयू के कैश हैं जो औसतन 95% मेमोरी एक्सेस को हल करते हैं। जब तक CPU को RAM की आवश्यकता नहीं होती है, DMA वैसे भी हस्तक्षेप नहीं करता है।
MSalters

2
@DaveTweed नोप। यदि आप 68000 के लिए बस के समय को देखते हैं, तो प्रत्येक "बस साइकिल" (रीड या राइट) को 4 राज्यों में विभाजित किया जाता है, जिसमें न्यूनतम 4 वास्तविक घड़ी चक्र होते हैं, जिनमें से केवल कुछ ही डेटा बस को चलाते हैं। इस मल्टीप्लेक्सिंग को हालांकि कुछ अतिरिक्त हार्डवेयर की आवश्यकता होती है, क्योंकि यह हर समय एड्रेस बस को चलाता है।
पाइप

जवाबों:


18

आप सही हैं कि CPU डीएमए ट्रांसफर के दौरान मेमोरी एक्सेस नहीं कर सकता है। हालांकि, दो कारक हैं जो संयोजन में सीपीयू द्वारा स्पष्ट समानांतर मेमोरी एक्सेस की अनुमति देते हैं और डिवाइस डीएमए ट्रांसफर करते हैं:

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

संयोजन में, इन दो कारकों का मतलब है कि डीएमए हस्तांतरण का प्रदर्शन करने वाले डिवाइस का सीपीयू की गति पर बहुत कम प्रभाव पड़ेगा।

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


4
एक अतिरिक्त दृष्टिकोण के रूप में, कुछ सिस्टम मेमोरी तक पहुंचने के लिए कई चैनलों की पेशकश कर सकते हैं। CPU को एक चैनल का उपयोग करने की अनुमति दी जा सकती है जबकि DMA इंजन दूसरे पर काम करता है
Cort Ammon - Reinstate Monica

1
@CortAmmon मेरा मानना ​​है कि दोहरे चैनल मेमोरी आमतौर पर भौतिक पते के स्थान पर फैली हुई है, इसलिए उदाहरण के लिए यदि आपके पास 2GB रैम है तो पहले चैनल पर निचले 1GB और ऊपरी 1GB दूसरे चैनल पर है। उस स्थिति में, यदि सीपीयू और डीएमए दोनों मेमोरी के समान 1GB क्षेत्र का उपयोग करना चाहते हैं, तो वे एक ही चैनल पर होंगे और इस प्रकार संभावित रूप से संघर्ष होगा।
माइकल जॉनसन

मुझे यकीन नहीं है कि कई वास्तविक सिस्टम कभी भी एक सच्चे VNM आर्किटेक्चर का उपयोग करते हैं। अड़चन अभी बहुत संकीर्ण थी। यह वास्तव में सीएस में प्रयुक्त एक सैद्धांतिक उपकरण था। क्लोज़ेस्ट I के बारे में सोच सकते हैं कि 1970 का टेक्सास 16 बिट डिवाइस था जिसमें रैम में इसके रजिस्टर थे। मैं एक ग्राफिक्स कार्ड के बारे में सोच रहा हूं जहां दोहरी पोर्टेड रैम का उपयोग किया जाता है। उच्च अंत वाले एआरएम जैसे चिप्स कई आंतरिक busses (AHP, APB, Stacks) पर समान होते हैं। Futureelectronics.com/en/memory/dual-ports.aspx idt.com/products/memory-logic/multi-port-memory/…
क्रिस आरएन

1
मुझे नहीं लगता था कि सवाल एक सख्त वॉन-न्यूमैन सीपीयू के बारे में पूछ रहा था, बल्कि एक व्यावहारिक रूप से x86 या एआरएम की तरह है, जो शिथिल वॉन-न्यूमैन हैं। एक सख्त वॉन-न्यूमैन के मामले में, बिना किसी आंतरिक रजिस्टर के, सीपीए के लिए डीएमए के दौरान चालू रखने की क्षमता मेरे जवाब में मेरे दूसरे बिंदु पर आ जाती है, कि डीएमए पूरे मेमोरी बैंडविड्थ का उपयोग नहीं कर रहा है।
जॉनसन

20

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

इसके अलावा, मेमोरी में आमतौर पर एक से अधिक इंटरफ़ेस होते हैं। उच्च प्रदर्शन प्रोसेसर में आम तौर पर कैश होता है (यदि डीएमए सुसंगत नहीं है, तो कैश को स्नूप भी नहीं करना पड़ता है; स्नूपिंग के साथ भी, ओवरहेड आमतौर पर कैश और मुख्य मेमोरी के बीच बैंडविड्थ अंतर के कारण छोटा होगा या (जब डीएमए एल 3 में स्थानांतरित हो जाता है) L3 कैश और L1 कैश के बीच कैश), मेमोरी तक पहुंचने के लिए एक अलग इंटरफ़ेस प्रदान करता है। माइक्रोकंट्रोलर्स अक्सर एक अलग फ्लैश-आधारित मेमोरी से निर्देशों का उपयोग करेंगे, जिससे डीएमए के दौरान ऑन-चिप मेमोरी में आगे बढ़ने की अनुमति मिलेगी, और अक्सर एक स्वतंत्र इंटरफ़ेस के साथ कसकर युग्मित मेमोरी होती है (डीएमए संघर्षों से बचने के लिए कई डेटा एक्सेस की अनुमति देता है)।

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

यह भी ध्यान दें कि क्योंकि एक प्रोसेसर डेटा एक्सेस करता है, यदि कोई एकल मेमोरी इंटरफ़ेस है, तो डेटा एक्सेस और इंस्ट्रक्शन एक्सेस के बीच मध्यस्थता के लिए एक तंत्र होना चाहिए।

यदि प्रोसेसर (एकल मेमोरी इंटरफ़ेस के साथ) को I / O डिवाइस बफर से मुख्य मेमोरी में कॉपी लागू करने के लिए मजबूर किया गया था, तो उसे कॉपी प्रदर्शन करने के लिए निर्देश प्राप्त करना होगा। इसका मतलब यह हो सकता है कि मेमोरी-मेमोरी ऑपरेशंस के साथ ISA में भी ट्रांसफर किए गए शब्द के अनुसार दो मेमोरी एक्सेस (लोड-स्टोर आईएसए को तीन मेमोरी एक्सेस की आवश्यकता हो सकती है या अगर पोस्ट-इंक्रीमेंट मेमोरी एड्रेसिंग प्रदान नहीं की गई है); यह I / O एक्सेस के अलावा है जो पुराने सिस्टम में मुख्य मेमोरी के समान इंटरफ़ेस साझा कर सकता है। DMA इंजन मेमोरी में निर्देशों का उपयोग नहीं करता है, और इसलिए इस ओवरहेड से बचा जाता है।


2

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

इसके पीछे का विचार निम्नलिखित है:

अगर आप मेमोरी से लगातार डेटा कॉपी करना चाहते हैं, तो सीपीयू को ऐसा कुछ करना होगा:

पता की गणना करें-> डेटा पढ़ें-> नए पते (+ 1 शब्द) की गणना करें -> डेटा पढ़ें ...

जबकि DMA समानांतर (मोड के आधार पर) में नए पते की गणना करता है और इसलिए तेज है। तो डीएमए पूरी बस थ्रूपुट (सैद्धांतिक रूप से) पर काम कर सकता है।


"चूंकि केवल एक ही बस प्रणाली है" ... आधुनिक कंप्यूटरों के साथ बनाने के लिए एक सुरक्षित धारणा नहीं है कि उनकी स्मृति और परिधीय बसें अलग-अलग गति से चल रही हैं, और उनके बीच प्रोटोकॉल अनुवाद हो रहा है।
रैकबंडमैन

3
पुराने कंप्यूटरों पर: Apple II (या इसके कुछ पूर्ववर्ती / प्रोटोटाइप?) में एक डिज़ाइन ओवरसाइट था, जिसमें वे शाब्दिक रूप से CPU को रोकते थे। 6502 में रजिस्टरों को गतिशील मेमोरी के रूप में लागू किया गया है। जिस तरह से उन्होंने सीपीयू को रोका वह ताज़ा मृत हो गया। अधिकतम डीएमए की लंबाई बहुत, बहुत मशीन पर निर्भर थी।
रैकबंडमैन 21

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

2

सामान्यतया, नहीं।

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


0

सामान्य तौर पर

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

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

डीएमए कैसे काम करता है, इसके लिए कोई सामान्य उत्तर नहीं है, यह सिस्टम के डिजाइन और सिस्टम के सभी घटकों पर बहुत अधिक निर्भर है।

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