सिस्टम कॉल, मैसेज पासिंग और इंटरप्ट के बीच क्या संबंध है?


14

मैं प्रक्रिया प्रबंधन के लिए विकिपीडिया लेख पढ़ रहा हूं । मेरा ध्यान लिनक्स पर है। मैं सिस्टम कॉल, संदेश पास करने और बाधित होने के बीच के संबंध और मतभेदों को उनकी अवधारणाओं और उद्देश्यों में समझ नहीं सकता। क्या वे सभी संसाधन और सेवाओं के लिए कर्नेल के अनुरोध करने की प्रक्रिया के लिए हैं?

लेख के कुछ उद्धरण और कुछ अन्य:

  1. ओएस को डी-आवंटन या आवंटन करने के लिए प्रोग्राम के निष्पादन के दौरान प्रोसेसर के नियंत्रण को पुनः प्राप्त करने के लिए ओएस के लिए दो संभावित तरीके हैं:

    1. प्रक्रिया एक सिस्टम कॉल जारी करती है (कभी-कभी एक सॉफ्टवेयर रुकावट कहा जाता है); उदाहरण के लिए, I / O अनुरोध हार्ड डिस्क पर फ़ाइल तक पहुंचने का अनुरोध करता है।
    2. एक हार्डवेयर व्यवधान उत्पन्न होता है; उदाहरण के लिए, कीबोर्ड पर एक कुंजी दबाया गया था, या एक टाइमर रन आउट किया गया था (पूर्व-खाली मल्टीटास्किंग में उपयोग किया गया था)।
  2. दो तकनीकें हैं जिनके द्वारा उपयोगकर्ता मोड में निष्पादित एक प्रोग्राम कर्नेल की सेवाओं का अनुरोध कर सकता है:

    * System call
    * Message passing
    
  3. एक रुकावट एक अतुल्यकालिक संकेत है जो निष्पादन में बदलाव की आवश्यकता को इंगित करने वाले सॉफ़्टवेयर में ध्यान या एक समकालिक घटना की आवश्यकता को दर्शाता है।

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


2
बहुत अच्छा सवाल!
स्टीफन जिमेनेज़

जवाबों:


12
  1. सभी आधुनिक ऑपरेटिंग सिस्टम मल्टीटास्किंग का समर्थन करते हैं। इसका मतलब है कि सिस्टम एक ही समय में कई प्रक्रियाओं को निष्पादित करने में सक्षम है; या तो छद्म-समानांतर में (जब केवल एक सीपीयू उपलब्ध है) या आजकल मल्टी-कोर सीपीयू समानांतर (एक कार्य / कोर) में आम है।

    चलो केवल एक सीपीयू उपलब्ध होने का सरल मामला लेते हैं। इसका मतलब यह है कि यदि आप एक ही समय में दो अलग-अलग प्रक्रियाओं को निष्पादित करते हैं (चलो एक वेब ब्राउज़र और एक संगीत खिलाड़ी कहते हैं) सिस्टम वास्तव में उन्हें एक ही समय में निष्पादित करने में सक्षम नहीं है। क्या होता है कि सीपीयू हर समय एक प्रक्रिया से दूसरी प्रक्रिया में बदल रहा है; लेकिन यह बहुत तेजी से हो रहा है, इस प्रकार आप इसे कभी नोटिस नहीं करते हैं।

    अब मान लेते हैं कि उन दो प्रक्रियाओं को निष्पादित करते समय, आप रीसेट बटन (खराब लड़का) दबाते हैं। सीपीयू जो कुछ भी कर रहा है उसे तुरंत बंद कर देगा और सिस्टम को रिबूट करेगा। बधाई: आपने एक बाधा उत्पन्न की।

    मामला समान है जब आप प्रोग्रामिंग कर रहे हैं और सीपीयू से सेवा मांगना चाहते हैं। अंतर यह है कि इस मामले में आप सॉफ्टवेयर कोड निष्पादित करते हैं - आमतौर पर लाइब्रेरी प्रक्रियाएं जो सिस्टम कॉल निष्पादित कर रही हैं (उदाहरण के fopenलिए फ़ाइल खोलने के लिए)।

    इस प्रकार, 1 सीपीयू से ध्यान हटाने के दो अलग-अलग तरीकों का वर्णन करता है।

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

    यदि आप सोच रहे हैं कि वे दो मोड क्यों मौजूद हैं, तो सुरक्षा के लिए सबसे सरल उत्तर है। माइक्रो कर्नेल-आधारित ऑपरेटिंग सिस्टम (उदाहरण के लिए MINIX 3) में उपयोगकर्ता मोड में चलने वाली उनकी अधिकांश सेवाएँ हैं, जो उन्हें कम हानिकारक बनाती हैं। अखंड कर्नेल (लिनक्स की तरह) उनकी लगभग सभी सेवाएं कर्नेल मोड में चल रही हैं। इस प्रकार एक ड्राइवर जो कि MINIX 3 में क्रैश होता है, पूरे सिस्टम को नीचे लाने की संभावना नहीं है, जबकि लिनक्स में यह असामान्य नहीं है।

    सिस्टम कॉल उपयोगकर्ता से कर्नेल मोड में स्विच करने के लिए अखंड गुठली (साझा डेटा मॉडल) में उपयोग किए जाने वाले आदिम हैं। संदेश पासिंग माइक्रोकिरनल्स (क्लाइंट / सर्वर मॉडल) में उपयोग होने वाला आदिम है। अधिक सटीक होने के लिए, एक संदेश पासिंग सिस्टम प्रोग्रामर में सीपीयू से ध्यान हटाने के लिए सिस्टम कॉल का भी उपयोग किया जाता है। संदेश पास केवल ऑपरेटिंग सिस्टम डेवलपर्स के लिए दिखाई देता है। सिस्टम कॉल का उपयोग करने वाली अखंड गुठली तेज़ लेकिन कम विश्वसनीय होती है, जबकि संदेश पासिंग का उपयोग करने वाले माइक्रोकेर्नेल धीमे होते हैं, लेकिन इनमें बेहतर अलगाव होता है।

    इस प्रकार, 2 उपयोगकर्ता से कर्नेल मोड में स्विच करने के दो अलग-अलग तरीकों का उल्लेख करता है।

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

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

    इस प्रकार, 3 बताते हैं कि एक जाल या एक बाधा को अंजाम देने के बाद क्या करने की आवश्यकता है और दोनों मामले समान कैसे हैं।


1
धन्यवाद! (1) 1 में, क्या आपका मतलब सीपीयू से ध्यान हटाने के दो तरीके हैं सॉफ्टवेयर इंटरप्ट (सिस्टम कॉल उदाहरण के साथ प्रोग्राम) और हार्डवेयर इंटरप्ट (रीसेट कुंजी उदाहरण)? (२) २ में, क्या आपका मतलब है कि सिस्टम कॉल और मैसेज पास करना सॉफ्टवेयर में रुकावट के दो तरीके हैं? (३) क्या यह सही है कि सॉफ्टवेयर इंटरप्ट का उद्देश्य कर्नेल सेवाओं और संसाधनों के अनुरोध के लिए प्रक्रिया के लिए है, और हार्डवेयर इंटरप्ट का उद्देश्य नहीं है ? यदि हाँ, तो हार्डवेयर व्यवधान का उद्देश्य क्या है?
टिम

1
(१) सही। (2) खैर, सिस्टम कॉल और संदेश पासिंग दो अलग-अलग तकनीकें हैं जिनका उपयोग इंटरप्रोसेस संचार प्राप्त करने के लिए किया जा सकता है। लेकिन यह सच है कि दोनों सॉफ्टवेयर आधारित हैं, इस प्रकार सीपीयू से ध्यान आकर्षित करने के लिए आप एक जाल (सॉफ्टवेयर इंटरप्ट) निष्पादित करते हैं। (३) एक अर्थ में, हाँ। कर्नेल सेवा के लिए पूछने का एक उदाहरण creatएक नई फ़ाइल बनाने के लिए एक पुस्तकालय प्रक्रिया (जिसे 1 या अधिक सिस्टम कॉल में अनुवादित किया जाएगा) निष्पादित कर रहा है । एक बाधा का एक उदाहरण प्रिंटर है जो सीपीयू को एक संकेत भेज रहा है ताकि यह सूचित किया जा सके कि मुद्रण पूरा हो गया है।
साकिन

1
धन्यवाद! (3) के संबंध में, क्या आपका अर्थ सं। हार्डवेयर रुकावट और सॉफ्टवेयर रुकावट के सामान्य उद्देश्य क्या हैं?
टिम

1
एक सिस्टम रीसेट एक रुकावट नहीं है; यह फिर से शुरू करने के लिए राज्य को नहीं बचाता है।
psusi

1
@ अल्फा रीसेट और एनएमआई (नॉन मास्केबल इंटरप्ट) सीपीयू पर दो अलग-अलग पिन हैं। उत्तरार्द्ध एक बाधा का कारण बनता है, जिसका अर्थ है राज्य को बचाना और हैंडलर को कूदना। पूर्व सीपीयू को चालू करता है (जानबूझकर सभी राज्य को त्यागता है) जैसा कि यह बिजली पर करता है (रीसेट स्वचालित रूप से बिजली पर जोर दिया जाता है)। चूंकि एक रुकावट की परिभाषा का हिस्सा यह है कि यह राज्य बचाता है, रीसेट उस परिभाषा को पूरा करने में विफल रहता है।
Psusi

9

सिस्टम कॉल, मैसेजिंग पासिंग (जैसा कि विकिपीडिया लेख में वर्णित है), और व्यवधान वे सभी चीजें हैं जो एक संदर्भ स्विच या उपयोगकर्ता से कर्नेल मोड में स्विच का कारण बनती हैं । जैसा कि आप जानते हैं:

  • कर्नेल मोड: प्रोग्राम में मेमोरी का एक सपाट या वास्तविक दृश्य होता है, और प्रोग्राम सभी मेमोरी और सभी हार्डवेयर उपकरणों को बिना किसी प्रतिबंध के सीधे पढ़ / लिख सकते हैं।

  • उपयोगकर्ता मोड: प्रोग्राम में मेमोरी का वर्चुअलाइज्ड दृश्य होता है, प्रोग्राम सभी मेमोरी में स्वतंत्र रूप से पढ़ / लिख नहीं सकते हैं और सीधे हार्डवेयर डिवाइस को नहीं पढ़ / लिख सकते हैं। अधिक मेमोरी या एक्सेस डिवाइस प्राप्त करने के लिए, उपयोगकर्ता मोड प्रोग्राम को कर्नेल को कॉल करना होगा । सिस्टम कॉल और मैसेज पासिंग दो तरीके हैं।

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

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

संदेश पासिंग का तात्पर्य है (कम से कम मेरे लिए) कि कर्नेल एक "चल रही प्रक्रिया" है जो संदेशों की एक धारा प्राप्त करेगी और इसमें उपयोगकर्ता-मोड सुलभ फ़ंक्शन मौजूद है जो ऐसे संदेश भेजेगा। या यह हो सकता है कि "सेंड" फंक्शन सिर्फ स्टैक पर मानों को हिलाता है और अगली बार जब कर्नेल का नियंत्रण होता है (या तो एक प्रक्रिया ब्लॉक या एक बाधा उत्पन्न होती है) तो यह स्टैक से संदेशों को पॉप करता है और तदनुसार आंतरिक रूटीन को भेजता है।

एक माइक्रोकर्नल आर्किटेक्चर में जहां वास्तविक "कर्नेल" बहुत कम होता है और एक कर्नेल प्रदान करने वाले अधिकांश कार्य "सर्वर" प्रक्रियाओं में स्थानांतरित हो जाते हैं, जिनमें से सभी बहु-सीपीयू प्रणाली पर समवर्ती रूप से चल सकते हैं, ऐसा कुछ और हो सकता है सादे पुराने सिस्टम कॉल दृष्टिकोण की तुलना में उपयोगी है। उपयुक्त कर्नेल "सर्वर" के लिए "संदेशों" की व्याख्या करना और रूटिंग करना, माइक्रोकर्नेल की कुछ नौकरियों में से एक होगा।


3
कर्नेल मोड एक ही पृष्ठ तालिकाओं का उपयोग करता है और उपयोगकर्ता मोड के समान वर्चुअल मेमोरी दृश्य प्रस्तुत करता है। अंतर यह है कि यह कर्नेल मोड तक सीमित होने के रूप में चिह्नित पृष्ठों तक पहुंच रखता है।
psusi

5

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

हार्डवेयर और सॉफ्टवेयर दोनों व्यवधान राज्य को बचाने के लिए सीपीयू का कारण बनते हैं, कर्नेल मोड पर स्विच करते हैं, और उस रुकावट के लिए एक परिभाषित हैंडलर पर कूदते हैं। अंतर यह है कि हार्डवेयर इंटरप्ट को बाहरी हार्डवेयर द्वारा उत्पन्न किया जाता है जब उन्हें कुछ ध्यान देने की आवश्यकता होती है, जैसे कि कीबोर्ड यह दर्शाता है कि एक कुंजी दबाया गया है। कीबोर्ड हैंडलर तब कीबोर्ड IO पोर्ट को पढ़ने के लिए जा सकता है यह देखने के लिए कि क्या कुंजी दबाया गया था, और उचित कार्रवाई करें, और फिर उस प्रोग्राम पर वापस लौटें जो बाधित था।

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