2012-10-10 13 views
20

जब कोई प्रोग्राम संकलित किया जाता है तो इसे मशीन कोड में परिवर्तित किया जाता है जिसे मशीन द्वारा "समझा जा सकता है"। कुंजीपटल से इनपुट प्राप्त करने जैसी चीजों को करने के लिए यह मशीन कोड ऑपरेटिंग सिस्टम के साथ कैसे इंटरैक्ट करता है? मेरे लिए, ऐसा लगता है कि मशीन कोड ऑपरेटिंग सिस्टम की तुलना में निचले स्तर पर चलना चाहिए और इसलिए, मैं समझ नहीं पा रहा हूं कि ओएस संकलित अनुप्रयोग और हार्डवेयर के बीच मध्यस्थ के रूप में कैसे कार्य कर सकता है।एक संकलित प्रोग्राम ओएस के साथ कैसे सहभागिता करता है?

पुनश्च: मैं सिर्फ C++ प्रोग्रामिंग शुरू कर दिया और मैं समझता हूँ कि कैसे CIN और अदालत काम

+1

संकलित एप्लिकेशन बस डीएलएल (ऑपरेटिंग सिस्टम, जैसे कि विंडोज़ में कर्नेल 32.dll) में फ़ंक्शन कॉल करता है जिसमें अन्य मशीन कोड के कार्य होते हैं। वह अन्य मशीन कोड विशेष रूप से हार्डवेयर के साथ काम करने के लिए लिखा गया है, इसलिए आपको यह नहीं करना है। –

+1

थोड़ा टेंगेंशियल और वास्तव में आपके प्रश्न का उत्तर नहीं है, लेकिन हो सकता है कि यदि आप भाषा और ओएस के बीच सीमाओं में रुचि रखते हैं तो यह आपको प्रक्रिया में कई चरणों में से कुछ पर भय/भय/घृणा देगा के बारे में आश्चर्य ...: -/http://stackoverflow.com/a/2444508/211160 – HostileFork

उत्तर

23

यह एक बहुत ही अच्छा सवाल (बेहतर क्या आप जानते हैं) है, और जानने के लिए एक बहुत है । बहुत।

मैं इसे छोटा रखने की कोशिश करूंगा। ऑपरेटिंग सिस्टम सॉफ्टवेयर और हार्डवेयर के बीच अमूर्त के एक स्तर के रूप में कार्य:

Software 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
Operating System 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
    Hardware 

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

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


अब मैं वहाँ बंद कर देंगे, लेकिन आप यह भी कहा:

मेरे लिए

, यह है कि मशीन कोड से एक निचले स्तर पर ऑपरेटिंग सिस्टम चलाना चाहिए लगता है और इसलिए, मैं कर सकते हैं ' टी समझते हैं कि ओएस संकलित अनुप्रयोग और हार्डवेयर के बीच मध्यस्थ के रूप में कार्य कैसे कर सकता है।

यह मुश्किल है, लेकिन कुछ बुनियादी बातों को समझने के बाद यह आसान है।

सबसे पहले, सभी कोड केवल सीपीयू पर चल रहे मशीन कोड हैं। कोई कोड अन्य कोड से अधिक या कम नहीं है (कुछ आदेशों के अपवाद के साथ जो केवल विशेषाधिकार प्राप्त कर्नेल मोड में चलाया जा सकता है)। तो सवाल यह है कि, ओएस संभवतः नियंत्रण में कैसे हो सकता है भले ही यह उपयोगकर्ता को सीपीयू के नियंत्रण को छोड़ रहा हो?

जब कोई CPU पर कोड चल रहा है, तो नामक एक अवधारणा को बाधित करती है। यह सीपीयू को भेजा गया एक सिग्नल है जो वर्तमान में चलने वाले कोड को रोकने के लिए और कोड के दूसरे भाग के साथ स्विच हो जाता है, जिसे हस्तक्षेप हैंडलर कहा जाता है।

इंटरप्ट्स के उदाहरणों में कीबोर्ड, माउस और सबसे महत्वपूर्ण बात यह है कि घड़ी।

घड़ी के अंतराल को नियमित आधार पर उठाया जाता है क्योंकि ऑपरेटिंग सिस्टम की घड़ी में हैंडलर को चलाने में बाधा आती है। इस घड़ी के भीतर हस्तक्षेप हैंडलर ऑपरेटिंग सिस्टम का कोड है जो जांचता है कि वर्तमान में कौन सा कोड चल रहा है यह निर्धारित करता है कि कौन से कोड को आगे चलाने की आवश्यकता है। यह या तो अधिक ऑपरेटिंग सिस्टम कोड या अधिक उपयोगकर्ता कोड हो सकता है।

क्योंकि घड़ी हमेशा टिक टिक है, और क्योंकि ऑपरेटिंग सिस्टम हमेशा CPU पर चलाने के लिए इस समय-समय पर मौका हो जाता है, यह कंप्यूटर के भीतर सब कुछ रच करने में सक्षम है, भले ही यह के एक ही सेट का उपयोग कर चलाता है सीपीयू कमांड किसी भी सामान्य कार्यक्रम के रूप में।

+1

ग्रेट जॉब इसे एक बहुत ही सरल तरीके से समझाता है। –

+2

सीपीयू कई मोड (कर्नेल और उपयोगकर्ता) में भी चलाया जा सकता है, ओएस कोड उच्च-विशेषाधिकार प्राप्त कर्नेल मोड में चलाया जा रहा है। – OrangeDog

+0

धन्यवाद .. यह एक बहुत अच्छा जवाब था। बस स्पष्ट होने के लिए, क्या यह कहना सही होगा कि एक सिस्टम कॉल एक बाधा की तरह है जो एप्लिकेशन कोड और स्विच के निष्पादन को रोकता है (यानी ओएस कोड निष्पादन शुरू होता है)? – mahela007

5

ऑपरेटिंग सिस्टम system calls कि कार्यक्रमों निचले स्तर सेवाओं तक पहुँच प्राप्त करने के लिए कॉल कर सकते हैं प्रदान करता है कोशिश कर रहा हूँ।

ध्यान दें कि सिस्टम कॉल system() फ़ंक्शन से अलग हैं जिन्हें आपने शायद बाहरी प्रोग्राम निष्पादित करने के लिए उपयोग किया है।

प्रणाली कॉल, पहुँच फ़ाइलों की तरह काम करने के लिए उपयोग किया जाता है, नेटवर्क पर संवाद ढेर स्मृति का अनुरोध, आदि