जब कोई डिस्क रीड या डिस्क राइट होता है, तो डेटा कहां जाता है?


10

मैं समझता हूं कि एक डिस्क नियंत्रक के रूप में ऐसी कोई चीज है जिसमें एक बफर होता है, लेकिन सोच रहा था कि क्या सीपीयू सीधे इस बफर से पढ़ता है, या क्या डेटा को पहले मेमोरी में किसी विशिष्ट स्थान पर जाना चाहिए, और फिर खुद को पढ़ने की अनुमति दें सीपीयू द्वारा?

क्या किसी को भी पता है कि बफर को क्या कहा जाता है? और डीएमए यह सब कैसे फिट होता है?

जवाबों:


20

एक डिस्क के लिए डेटा प्रवाह अनिवार्य रूप से पढ़ा जाता है:

  • रीड / राइट असेंबली अनुरोधित सिलेंडर पर होने के बाद, अनुरोधित आर / डब्ल्यू हेड का चयन किया जाता है।
  • प्रत्येक सेक्टर में, सेक्टर आईडी पढ़ा जाता है। यदि पढ़ा गया सेक्टर नंबर अनुरोधित सेक्टर नंबर से मेल खाता है, तो सेक्टर डेटा पढ़ा जाता है।
  • सेक्टर डेटा को धारावाहिक बिट स्ट्रीम के रूप में पढ़ा जाता है, और बाइट में परिवर्तित किया जाता है।
  • सेक्टर के बाइट्स को एक सेक्टर बफर (आमतौर पर नियंत्रक में SRAM) में संग्रहीत किया जाता है ; यह सेक्टर बफर "डिस्क कैश" से अलग है।
  • एक बार पूरे क्षेत्र को पढ़ने के बाद, डेटा को ECC का उपयोग करके मान्य किया जाता है, और शायद सही किया गया है।
  • एक बार मान्य होने के बाद, सेक्टर डेटा नियंत्रक से होस्ट पीसी में स्थानांतरित किया जाता है। नोट: इस क्षेत्र के बफर का अस्तित्व अच्छी तरह से ज्ञात नहीं है, और व्यापक गलत सूचना है कि मेजबान (उदाहरण) इंटरफ़ेस पर हस्तांतरण की गति आर / डब्ल्यू सिर पर बिट दर से बंधी या सीमित है। यह पूरी तरह से गलत है, क्योंकि ये दो डेटा ट्रांसफर स्वतंत्र और अनुक्रमिक संचालन हैं और समवर्ती नहीं हैं।
  • जैसा कि पीसी एटीए इंटरफेस के माध्यम से डिस्क नियंत्रक से डेटा प्राप्त करता है, पीसी प्रोग्राम्ड आई / ओ का उपयोग कर सकता है (सीपीयू बार-बार एटीए पोर्ट के डेटा रजिस्टर को पढ़ता है और गंतव्य मेमोरी को मूल्य कॉपी करता है) या डीएमए (डीएमए नियंत्रक है) ATA पोर्ट के डेटा रजिस्टर से N बाइट्स को मेमोरी बफर w / o आगे CPU हस्तक्षेप से कॉपी करने के लिए सेटअप)।
  • पीसी की मेमोरी "बफर" जो डेटा प्राप्त करता है, एप्लिकेशन का बफर हो सकता है (जब ब्लॉक I / O सिस्टम कॉल का उपयोग कर रहा हो), या फाइल सिस्टम कंट्रोल के तहत एक आंतरिक सिस्टम बफर, या यहां तक ​​कि प्रोग्राम या डेटा मेमोरी हो सकती है यदि डेटा स्वैप से आया हो क्षेत्र (या पृष्ठ फ़ाइल)।

डिस्क के लिए एक लेखन समान है, सिवाय इसके कि डेटा को पीसी से डिस्क नियंत्रक में स्थानांतरित किया जाता है, ईसीसी की गणना की जाती है, अनुरोधित क्षेत्र स्थित है, और फिर डेटा को सेक्टर बफर से प्लैटर तक लिखा जाता है।

अतिरिक्त क्रेडिट के लिए:

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


1
शायद 'r / w हेड' के बारे में थोड़ा कम विशिष्ट हो सकता है क्योंकि इन दिनों गैर-यांत्रिक ड्राइव का अधिक बार उपयोग किया जा रहा है, लेकिन यह एक अच्छा जवाब है।
शिन्राइ

@Shinrai - मुझे केवल हाथ से चलने वाली डिस्क ड्राइव के साथ पहले हाथ का प्रोग्रामिंग अनुभव है (और मैंने फिक्स्ड-हेड ड्राइव का उपयोग किया है)। मैं एसएसडी संचालित करने के बारे में 2 या 3-हाथ की जानकारी को अटकलें या दोहराने के लिए नहीं चुनता हूं।
चूरा

इस महान उत्तर के लिए +1, अच्छी तरह से प्रलेखित और लिखित। बहुत ही पेशेवर।
क्लेमेनोल

2

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

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

यदि आप निम्न स्तर के बारे में उत्सुक हैं, तो ड्राइवर ioctl कॉल करता है।


1
रिंग बफ़र्स आमतौर पर नेटवर्क डिवाइसेस (जैसे ईथरनेट कंट्रोलर) द्वारा नियोजित किए जाते हैं क्योंकि डेटा अनचाहे (अप्रत्याशित रूप से w / oa के पास लंबित अनुरोध) आ सकता है। होस्ट द्वारा किए गए अनुरोध के जवाब में डिस्क ड्राइव / कंट्रोलर का डेटा हमेशा रहता है। डेटा को सॉल्व किया गया है, इसलिए डिस्क ड्राइवर में "रिंग बफर" की कोई आवश्यकता नहीं है।
चूरा

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