2015-04-23 17 views
8

क्या कोई इन दोनों के लिए लिनक्स में अंतर बता सकता है? ऑपरेटिंग सिस्टम के प्रत्येक चरण में यथासंभव गहराई से जाएं।सिस्टम कॉल और लाइब्रेरी कॉल के बीच क्या अंतर है?

+0

क्या मैं अकेला हूं जो सोचता है कि यह होमवर्क डंप है? –

+1

@ मार्टिनजम्स, यह एक उत्सुक सवाल है। मेरी इच्छा है कि जब मैं ओएस कक्षा में था तो प्रोफेसर ने यह होमवर्क दिया। – drdot

उत्तर

9

कर्नेल द्वारा संचालित निम्न स्तर कर्नेल कॉल सिस्टम कॉल हैं।

आदमी पेज का कहना है:

2 प्रणाली (कर्नेल द्वारा प्रदान कार्यों)

3 लाइब्रेरी कॉल कॉल (कार्यक्रम पुस्तकालयों के भीतर काम करता है)

एक सचित्र छवि यह कर सकते हैं स्पष्ट:

enter image description here

और

enter image description here

+0

यह बहुत उच्च स्तर है। मैं प्रत्येक छोटे कदम की तलाश में हूं। – drdot

+0

@ डैनीक्रैन: - आप विकी की जांच कर सकते हैं: http://en.wikipedia.org/wiki/System_call अधिक जानकारी में जाने के लिए। –

+0

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

2

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

+0

बस लाइब्रेरी कॉल कुछ हद तक (सभी मामलों में नहीं) सिस्टम कॉल के लिए रैपर हैं। –

+1

बिलकुल नहीं, उदाहरण के लिए। 'strcmp' एक लाइब्रेरी कॉल है जो पूरी तरह से उपयोगकर्ता-स्थान में लागू होता है, किसी भी कर्नेल कोड को कॉल नहीं करता है। दूसरी ओर, सिस्टम लाइब्रेरी अधिकांश सिस्टम कॉल के लिए दृढ़ता रैपर फ़ंक्शन प्रदान करती है। –

4

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

अंतर्निहित हार्डवेयर उपयोगकर्ता अनुप्रयोगों के लिए कर्नेल मोड में प्रवेश करने के लिए एक द्वार प्रदान करता है। ऑपरेटिंग सिस्टम बुनियादी प्रणाली सुरक्षा के लिए इस गेट की रक्षा करता है।

यहां सरलीकरण का थोड़ा सा तरीका --- प्रोसेसर द्वारा उपयोग की जाने वाली एक सामान्य विधि एक अपवाद को स्पष्ट रूप से ट्रिगर करने की प्रक्रिया के लिए है (इंटेल के पास वैकल्पिक सिंकल विधि है)।

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

एक अनुदेश कुछ की तरह:

INT #12 

स्पष्ट रूप से एक अपवाद को गति प्रदान और वेक्टर में 12 वीं प्रक्रिया आह्वान करेंगे। एक प्रणाली आपको इस

करने के लिए शून्य अपवाद द्वारा विभाजन को अनुकरण करने की अनुमति दे सकती है, मान लें कि ऑपरेटिंग सिस्टम सिस्टम सेवाओं के लिए वेक्टर 123 का उपयोग करता है।

INT #123 

सिस्टम सेवा को कॉल करेगा। एक प्रणाली प्रत्येक सिस्टम सेवा के लिए एक अलग वेक्टर आरक्षित कर सकती है या यह एक और प्रेषण का उपयोग कर सकती है।

MOVL #23, R0 
    INT #123 

रजिस्टर 0 में मूल्य 23 आह्वान करने के लिए सिस्टम सेवा # 23 व्यवधान हैंडलर बताता है:

तो तुम कुछ इस तरह करना होगा।

तो आप देख सकते हैं कि यह सब असेंबली भाषा लेता है। प्रत्येक ऑपरेटिंग सिस्टम क्या रैपर बनाता है जिसे उच्च स्तरीय भाषाओं से कार्यों की तरह कहा जा सकता है।

यह तो क्या होता है के अनुक्रम है:

  1. एक उपयोगकर्ता सामान्य मानकों के साथ नामित किया गया आवरण कहते हैं। रैपर सिस्टम सेवा के लिए रजिस्टरों और ढेर सेट करता है।

  2. रैपर सिस्टम सेवा को प्रेषित अपवाद को ट्रिगर करता है।

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

  4. सिस्टम सेवा जो कुछ भी करने की ज़रूरत है वह करता है।

  5. सिस्टम सेवा अपवाद या बाधा से लौटने के लिए हार्डवेयर निर्देश निष्पादित करती है। यह उपयोगकर्ता मोड पर वापस आ जाता है और रैपर फ़ंक्शन पर वापस आ जाता है।

  6. रैपर रजिस्टरों में लौटाए गए पैरामीटर को अनपैक कर सकता है।

  7. रैपर कॉलर पर वापस आ जाता है।

+0

कोई भी इससे पहले क्यों नहीं उठाया? –

0

लाइब्रेरी फ़ंक्शंस एक सामान्य कार्य है जो लाइब्रेरी नामक कार्यों के संग्रह में रखा जाता है।

सिस्टम कॉल ओएस के लिए सेवा के लिए अनुरोध है।

संबंधित मुद्दे