I / O अबाधित क्यों है?


12

I / O को अबाधित बनाने के पीछे तर्क क्या है? यदि I / O को संभालने वाली एक प्रक्रिया को सिग्नल को संभालने की अनुमति दी जाती है, तो नकारात्मक परिणाम क्या होंगे?


write(2)को जल्दी लौटने की अनुमति है, लिखित बाइट काउंट को वापस लौटाया जा सकता है, जो 3 जी आर्ग के रूप में पारित बफर लंबाई से कम हो सकता है।
पीटर कॉर्ड्स

जवाबों:


10

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

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

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


6

अब जब मैंने मौरिस बाख की पुस्तक "द डिज़ाइन ऑफ़ द यूनिक्स ऑपरेटिंग सिस्टम" पढ़ी है, तो मुझे इस प्रश्न का उत्तर स्वयं देना चाहिए।

संक्षेप में, I / O को अबाधित बनाना है I / O टास्क खत्म करने के लिए ASAP बनाने के उद्देश्य से, बिना संकेतों के हस्तक्षेप किए बिना।

कुछ संबंधित ज्ञान जो मैंने पुस्तक से प्राप्त किए हैं:

  1. शब्द "निर्बाध" को "निर्बाध नींद" का उल्लेख करना चाहिए। जब एक प्रक्रिया निर्बाध नींद में होती है, तो इसे संकेतों द्वारा नहीं जगाया जा सकता है, न ही यह संकेतों को संभाल सकता है।
  2. एक प्रक्रिया संकेतों को संभालती है जब: ए। यह कर्नेल मोड में चल रहा है और उपयोगकर्ता मोड पर लौटने वाला है। ख। यह नींद की अवस्था में प्रवेश करने और छोड़ने की स्थिति के बारे में है जब नींद बाधित होती है।
  3. जब एक नींद की प्रक्रिया एक संकेत द्वारा जाग जाती है तो क्या होता है? यह सिग्नल को संभालता है, डिफ़ॉल्ट कार्रवाई की प्रक्रिया से बाहर निकलने के साथ। जब कोई प्रक्रिया I / O पूर्ण होने की प्रतीक्षा कर रही है, तो आप निश्चित रूप से यह नहीं चाहते हैं कि यह समय से पहले निकल जाए।

2

कर्नेल में कुछ कोड पथ निर्बाध रूप से चिह्नित किए जाते हैं, ज्यादातर क्योंकि कोड को सख्त समय (डिवाइस का जवाब देने के लिए) का पालन करना पड़ता है या क्योंकि यह कुछ ऐसा कर रहा है जो हस्तक्षेप को स्वीकार नहीं करता है। लिनक्स के मामले में, अधिकांश को पहले स्वतंत्र-कर्नेल treads में धकेल दिया गया है, और दूसरे को अधिकतर समाप्त कर दिया गया है (मुझे संदेह है कि वर्तमान मल्टी-सीपीयू मशीनों के दबाव में ज्यादातर)। यानी, अब कुछ समय हो गया है कि मैंने अबाधित नींद में एक प्रक्रिया नहीं देखी है।


3
एक खरोंच सीडी पढ़ने की कोशिश करें।
जोशुआ

1
या sshfs के साथ बढ़ते और फिर नेटवर्क कॉर्ड पर खींचते हैं। बिना सोचे-समझे नींद आती है, यहां तक ​​कि आजकल, जब अंतर्निहित मीडिया / भंडारण कार्य करता है। और यह आम तौर पर गधे में एक खूनी दर्द से निपटने के लिए है।
नुबर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.