एंड्रयू एस। टेनबाम, हर्बर्ट बोस द्वारा आधुनिक ऑपरेटिंग सिस्टम में धारा 5.1.4 प्रत्यक्ष मेमोरी एक्सेस से , 2014 ,
स्पष्टीकरण को सरल बनाने के लिए, हम मानते हैं कि सीपीयू सभी उपकरणों और मेमोरी को सिंगल सिस्टम बस के माध्यम से एक्सेस करता है जो सीपीयू, मेमोरी और आई / ओ उपकरणों को जोड़ता है, जैसा कि चित्र 5-4 में दिखाया गया है।
डीएमए कैसे काम करता है, यह समझाने के लिए, आइए पहले देखें कि डीएमए का उपयोग न होने पर डिस्क कैसे पढ़ती है।
- पहले डिस्क कंट्रोलर ड्राइव से ब्लॉक (एक या अधिक सेक्टर) को क्रमिक रूप से, बिट द्वारा, जब तक कि पूरा ब्लॉक कंट्रोलर के आंतरिक बफर में न हो जाए, पढ़ लेता है।
- इसके बाद, यह जांचने के लिए गणना करता है कि कोई त्रुटि नहीं हुई है। तब नियंत्रक एक बाधा का कारण बनता है। जब ऑपरेटिंग सिस्टम चलने लगता है, तो यह एक बार में लूप निष्पादित करके नियंत्रक के बफर से एक बाइट या एक शब्द से डिस्क ब्लॉक को पढ़ सकता है , प्रत्येक पुनरावृत्ति के साथ एक नियंत्रक डिवाइस रजिस्टर से एक बाइट या शब्द को पढ़ता है और इसे मुख्य मेमोरी में संग्रहीत करता है।
क्यू: दूसरे चरण में,
डेटा को " कंट्रोलर के बफर से " मुख्य मेमोरी में स्थानांतरित नहीं किया जाता है ? इसे " नियंत्रक के बफर से " और " नियंत्रक डिवाइस के रजिस्टर से " दोनों क्यों कहते हैं ?
दूसरे चरण में, नियंत्रक अपने बफर से मुख्य मेमोरी में डेटा ट्रांसफर कर सकता है, बिना सीपीयू को बाधित किए बिना और फिर से ओएस को शामिल किए बिना?
जब डीएमए का उपयोग किया जाता है, तो प्रक्रिया अलग होती है।
- पहले सीपीयू अपने रजिस्टरों को सेट करके डीएमए कंट्रोलर को प्रोग्राम करता है ताकि यह पता चल सके कि कहां ट्रांसफर किया जाना है (छवि 1-4 में चरण 1)।
यह डिस्क नियंत्रक को डिस्क से डेटा को उसके आंतरिक बफर में पढ़ने और चेकसम को सत्यापित करने के लिए एक कमांड जारी करता है । - जब वैध डेटा डिस्क नियंत्रक के बफर में होता है, तो डीएमए शुरू हो सकता है। डीएमए नियंत्रक डिस्क नियंत्रक (चरण 2) के लिए बस पर एक रीड रिक्वेस्ट जारी करके स्थानांतरण शुरू करता है । यह रीड रिक्वेस्ट किसी अन्य रीड रिक्वेस्ट की तरह दिखता है, और डिस्क कंट्रोलर को यह नहीं पता (या देखभाल) है कि यह सीपीयू से आया है या डीएमए कंट्रोलर से। आमतौर पर, लिखने के लिए मेमोरी एड्रेस बस की एड्रेस लाइनों पर होता है, इसलिए जब डिस्क कंट्रोलर अपने आंतरिक बफर से अगला शब्द प्राप्त करता है, तो यह जानता है कि इसे कहां लिखना है। मेमोरी के लिए लेखन एक और मानक बस चक्र (चरण 3) है।
- जब लेखन पूरा हो जाता है, तो डिस्क नियंत्रक डीएमए नियंत्रक को एक पावती संकेत भेजता है, बस पर भी (चरण 4)। DMA नियंत्रक तब बाइट काउंट का उपयोग करने और घटाने के लिए मेमोरी एड्रेस को बढ़ाता है। यदि बाइट की गिनती अभी भी 0 से अधिक है, तो चरण 4 में से 2 को दोहराया जाता है जब तक कि गिनती 0 तक नहीं पहुंच जाती।
- उस समय, डीएमए नियंत्रक सीपीयू को बाधित करता है यह बताने के लिए कि स्थानांतरण अब पूरा हो गया है। जब ऑपरेटिंग सिस्टम शुरू होता है, तो इसे डिस्क ब्लॉक को मेमोरी में कॉपी नहीं करना पड़ता है; यह पहले से ही है।
प्रश्न: दूसरे चरण में, डीएमए नियंत्रक डिस्क नियंत्रक के बफर से डेटा को मुख्य मेमोरी में स्थानांतरित करने के लिए डिस्क नियंत्रक का अनुरोध करता है। पहले चरण में, सीपीयू डिस्क कंट्रोलर को एक कमांड जारी करता है जो यह बताता है कि डिस्क से डेटा को उसके आंतरिक बफर में पढ़ा जाए। उसी समय, क्या सीपीयू डिस्क नियंत्रक के बफर से डेटा को मुख्य मेमोरी में स्थानांतरित करने के लिए डिस्क नियंत्रक को भी बता सकता है, जब डिस्क नियंत्रक डिस्क से डेटा को डिस्क नियंत्रक के बफर में स्थानांतरित कर देता है, ताकि इसके लिए कोई आवश्यकता न हो DMA कंट्रोलर डिस्क कंट्रोलर के बफर से डेटा को मुख्य मेमोरी में ट्रांसफर करने के लिए डिस्क कंट्रोलर को बताता है? (मैं यह नहीं समझ सकता कि हमें डिस्क और मुख्य मेमोरी के बीच डेटा ट्रांसफर के लिए डीएमए कंट्रोलर की आवश्यकता क्यों है, इसलिए अनुमान करें कि मैं उद्धरण को समझने के लिए कुछ महत्वपूर्ण याद करता हूं)।
- पहले सीपीयू अपने रजिस्टरों को सेट करके डीएमए कंट्रोलर को प्रोग्राम करता है ताकि यह पता चल सके कि कहां ट्रांसफर किया जाना है (छवि 1-4 में चरण 1)।
डिवाइस का एक उपकरण नियंत्रक डिवाइस को नियंत्रित करता है और डिवाइस पर संचालन करता है। डीएमए नियंत्रक किस उपकरण को नियंत्रित और संचालन करता है?
धन्यवाद!