डिवाइस ड्राइवर से प्रोग्राम वास्तव में कैसे बात करता है?


12

इसलिए मैं उलझन में हूँ कि हम कैसे प्रोग्रामर कंप्यूटर पर उपकरणों से बात करते हैं। अब मैं बड़े विचारों की बात नहीं कर रहा हूं। मुझे पता है कि डिवाइस ड्राइवर हैं जो हार्डवेयर के ऊपर बैठते हैं ताकि विभिन्न प्रोग्राम वहां सुविधाओं का उपयोग कर सकें।

लेकिन सामान्य तौर पर कौन वास्तव में ड्राइवरों से बात करता है? क्या प्रोग्रामर ड्राइवर पर एक फ़ंक्शन को कॉल करने के लिए आवेदन लिख रहा है? या प्रोग्रामर ऑपरेटिंग सिस्टम के माध्यम से एक फ़ंक्शन को कॉल करता है जो तब ड्राइवर को कॉल को संभालता है?


यह मदद कर सकता है। iacoma.cs.uiuc.edu/~nakano/dd/drivertut3.html यह भी। en.m.wikibooks.org/wiki/Windows_Programming/...
RubberDuck

1
दोनों का थोड़ा सा, और यह ओएस और डिवाइस के प्रकार से भिन्न होता है।
whatsisname

जवाबों:


12

जहां एक ऑपरेटिंग सिस्टम शामिल है, प्रोग्राम डिवाइस ड्राइवरों से बात नहीं करते हैं, कम से कम सीधे नहीं। कार्यक्रम अमूर्तता से बात करते हैं, जो उनके लिए अनभिज्ञ है, अंततः अंत में डिवाइस चालकों से एक या अधिक परतों के अमूर्त तरीके से बात कर रहा है।

मैं आधुनिक ऑपरेटिंग सिस्टम की जटिलताओं को छोड़ता जा रहा हूं और उदाहरण के रूप में 45 साल पहले विकसित एक माइक्रो कंप्यूटर ऑपरेटिंग सिस्टम CP / M का उपयोग कर रहा हूं । CP / M तीन परतों वाला एक लेयर केक था:

कार्यक्रम। शीर्ष परत एक ऐसा कार्यक्रम है जो गणना और I / O करके कुछ उपयोगी (वर्ड प्रोसेसिंग, प्लेइंग स्पेस आक्रमणकारियों) करता है। मान लें कि किसी बिंदु पर कार्यक्रम उपयोगकर्ता को देखने के लिए 'ए' अक्षर प्रदर्शित करना चाहता है। सीपी / एम एक कंसोल प्रदान करता है जिसे कंसोल के रूप में जाना जाता है , जो कि प्रोग्राम के साथ बातचीत करने वाले उपयोगकर्ता की तलाश में होना चाहिए। कुछ विधानसभा निर्देशों के साथ एक चरित्र भेजने का पारंपरिक तरीका है:

LD C,2   ; Load 2 into register C
LD E,65  ; Load the ASCII code for 'A' into register E
CALL 5   ; Call CP/M's routine for getting things done

(यदि आप उनसे परिचित नहीं हैं, तो रजिस्टरों को वैरिएबल के रूप में सोचा जा सकता है जो प्रोसेसर में रहते हैं।) हम जादू की संख्याओं के बारे में जानेंगे 2और 5सभी एक मिनट में हो जाएंगे । यहाँ takeaway है कि सभी कार्यक्रम जानता है कि वहाँ एक सांत्वना है और इसे लिखने का एक तरीका है। यह उस से परे किसी भी चीज के बारे में नहीं जानता या परवाह नहीं करता है। यह दो अमूर्तताओं में से पहला है जो CP / M I / O के लिए उपयोग करता है।

BDOS । पता 5नामक कार्यक्रम अगले परत, के लिए प्रवेश बिंदु है बुनियादी डिस्क ऑपरेटिंग सिस्टम या बीडीओ । BDOS एक पूरे किए गए कार्यों को प्रदान करता है जो एक रेस्तरां मेनू से नंबर द्वारा ऑर्डर करने जैसा है। आप यह बताना चाहते हैं कि आप Cफ़ंक्शन संख्या ( 2कंसोल आउटपुट के लिए) के साथ रजिस्टर को लोड करके कंसोल को आउटपुट करें और Eभेजे जाने वाले चरित्र के साथ रजिस्टर करें। कंसोल आउटपुट एक बहुत ही सरल ऑपरेशन है, और BDOS को वास्तव में अगली परत को कॉल करने के अलावा इसके साथ बहुत कुछ नहीं करना है।

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

आप शायद सोच रहे हैं कि सिर्फ एक के बजाय दो सार (प्रोग्राम-टू-बीडीओएस और बीडीओएस-टू-BIOS) क्यों हैं। इसका उत्तर यह है कि CP / M और इसके BDOS को कंप्यूटर निर्माताओं को बाइनरी रूप में प्रदान किया जा सकता है, वे अपने हार्डवेयर के लिए डिवाइस ड्राइवरों के साथ एक कस्टम BIOS लिखेंगे, दोनों को एक साथ बोल्ट करेंगे और इसे अपने सिस्टम के लिए OS के रूप में शिप करेंगे। यह एक बड़ी बात थी क्योंकि BDOS एक संगठन द्वारा बनाए रखा गया था और इसलिए हमेशा उपयोगकर्ता कार्यक्रमों के लिए एक ज्ञात मात्रा थी, जिससे हार्डवेयर के बहुत व्यापक (समय के लिए) समान अनुप्रयोगों को चलाना संभव हो गया। यही कारण है कि ऑपरेटिंग सिस्टम मौजूद हैं और हम केवल हार्डवेयर को सीधे ट्वेल करने वाले प्रोग्राम नहीं लिखते हैं

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


मैंने वास्तव में CP / M कोड को पहले नहीं देखा है (यह मेरे समय से थोड़ा पहले का है ... मैंने CP / M कंप्यूटर का उपयोग किया है लेकिन उनके लिए कभी कोड नहीं लिखा है), लेकिन मैं call 5यहाँ के उपयोग से आश्चर्यचकित हूं । नहीं चाहेंगे rst 8अधिक प्रभावी किया गया है (यह गंतव्य पते पर स्मृति के 3 बाइट्स बलिदान, लेकिन 2 हर बार यह कहा जाता है ... बचाने)?
जूल्स

@ जूल्स: सीपी / एम को 8080 के लिए विकसित किया गया था, जिसमें केवल एक ही रुकावट मोड था जहां बाधित डिवाइस RSTडेटा बस पर एक-बाइट अनुदेश (आमतौर पर) डालते थे । मैं निश्चित रूप से नहीं कह सकता, लेकिन यह हो सकता है कि सभी डिवाइसों की जरूरतों को पूरा करने के लिए पर्याप्त स्लॉट्स नहीं थे। ।
ब्लफ

आह। यह समझ में आता है, हाँ। मेरा 8-बिट विकास का अनुभव केवल उन मशीनों के लिए सीमित है, जिनके पास केवल एक ही रुकावट स्रोत था, ताकि इस तरह की चीजों के बारे में इतना चिंतित न हों ... :)
जूल्स

त्वरित प्रश्न, यह प्रक्रिया विंडोज़ ओएस और विंडोज़ कर्नेल से अधिक कैसे संबंधित है? या मुझे इसके लिए एक नया सवाल करना चाहिए।
जेसन

@ जैसन: विकिपीडिया में एक पृष्ठ है जो वास्तुकला का वर्णन करता है और उत्तर प्रदान करता है। 1993 से Microsoft ने जो कुछ भी उत्पादन किया है वह इस वास्तुकला का उपयोग करता है। यह एक ही चीज है, सिर्फ केक में अधिक परतों के साथ।
ब्लफ़ल

0

विभिन्न संभावनाओं का एक समूह हैं:

  • आमतौर पर उपयोग किए जाने वाले उपकरणों के लिए, ओएस में अक्सर एक एपीआई शामिल होता है जो ड्राइवर लागू करते हैं और जो आपकी भाषा के मानक पुस्तकालय को लागू करते हैं। विशिष्ट उदाहरण: फाइलसिस्टम, प्रिंटर, नेटवर्क, मिडी यंत्र।
  • अधिक विदेशी उपकरणों के लिए, डिवाइस निर्माता को ड्राइवरों को प्रदान करना होगा और कभी-कभी उन लोगों में लोकप्रिय भाषाओं के लिए भाषा बाइंडिंग भी शामिल होगी। कम से कम सी बाइंडिंग होगी, और बहुत सारी भाषाओं में सी लाइब्रेरी को कॉल करने का कोई तरीका है।
  • उन दो मामलों में कुछ हद तक इनबिल्ट करते हैं, सरल डिवाइस केवल सीरियल पोर्ट की तरह एक सामान्य-उद्देश्य कनेक्शन का उपयोग कर सकते हैं और निर्माता केवल उस प्रोटोकॉल को प्रकाशित करता है जिसे आप सामान्य सीरियल पोर्ट ड्राइवर के माध्यम से उपयोग कर सकते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.