लिनक्स में लाइब्रेरी कॉल और सिस्टम कॉल में क्या अंतर है?


13

मैं यह जानना चाहूंगा कि लिनक्स में लाइब्रेरी कॉल और सिस्टम कॉल में क्या अंतर है। दोनों के पीछे की अवधारणाओं की अच्छी समझ के लिए किसी भी संकेत की बहुत सराहना की जाएगी।

जवाबों:


9

वास्तव में "लाइब्रेरी कॉल" जैसी कोई चीज नहीं है। आप किसी फ़ंक्शन को साझा लाइब्रेरी से लिंक कर सकते हैं। और इसका मतलब है कि कॉल करने के लिए फ़ंक्शन का स्थान निर्धारित करने के लिए लाइब्रेरी पथ को रनटाइम पर देखा जाता है।

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


इसलिए यदि कोई उपरोक्त प्रश्न पूछता है तो मैं इसे सिस्टम कॉल और फ़ंक्शन कॉल के बीच अंतर के रूप में व्याख्या कर सकता हूं।
सेन

"मैन लेट्रेस" मेरी "ए लाइब्रेरी कॉल ट्रैसर" :)
ysdx

8

यदि आप man manअपने शेल में टाइप करते हैं, तो आप मैनुअल अनुभागों की सूची देखेंगे

2 सिस्टम कॉल (कर्नेल द्वारा प्रदान किए गए कार्य)

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

उदाहरण के लिए, आप chmodटाइप करते समय मैनुअल के अनुभाग 2 में पाएंगे man chmod। और fprintfअनुभाग 3 में।


3

सिस्टम कॉल सीधे कर्नेल द्वारा नियंत्रित किए जाते हैं।

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

कभी-कभी पुस्तकालयों को सिस्टम कॉल के लिए "फ्रंट-एंड" के रूप में प्रदान किया जाता है, अतिरिक्त कार्यक्षमता प्रदान करने के लिए या कर्नेल द्वारा प्रदान नहीं किए गए उपयोग में आसानी।


लाइब्रेरी कॉल आवश्यक रूप से एक गतिशील पुस्तकालय द्वारा नियंत्रित नहीं किया जाता है। पुस्तकालयों को सांख्यिकीय रूप से जोड़ा जा सकता है, इसलिए कोई आयात (लोड) की आवश्यकता नहीं है।
jlliagre

सच। मैंने वह जानकारी जोड़ी।
लॉरेंस सी सी

इसका केवल आधा हिस्सा ...
jlliagre

सिर केवल फ़ाइल भी पुस्तकालय कॉल का हिस्सा होना चाहिए में काम नहीं करना चाहिए?
陳 陳

1

सिस्टम कॉल फ़ंक्शंस हैं जो ऑपरेटिंग सिस्टम अनुप्रयोगों का उपयोग करने के लिए प्रदान करता है। जबकि math.h, string.h, आदि जैसे कार्य वे हैं जिनका ऑपरेटिंग सिस्टम के साथ इंटरफेसिंग से कोई लेना-देना नहीं है।


1

मूल रूप से लिनक्स कर्नेल अर्थात के दो तरीके हैं।

  1. उपयोगकर्ता मोड,
  2. कर्नेल मोड।

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

  1. fopen (): लाइब्रेरी कॉल है,
  2. open (): एक सिस्टम कॉल है।

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

निम्नलिखित कार्य करने के लिए यह प्रदर्शन करना

  1. man man: यहाँ आपको 1-8 से मैनुअल सेक्शन मिलेगा जिसका प्रत्येक विशिष्ट उद्देश्य है।
  2. करो man fopen: आप के रूप में प्रतिक्रिया देखेंगे FOPEN(3), यहाँ 3 मैन पेजों के मैनुअल सेक्शन 3 को दर्शाता है जो कि सी-लाइब्रेरी कॉल सेक्शन है।
  3. करो man open: आप के रूप में प्रतिक्रिया देखेंगे OPEN(2), यहाँ 2 मैन पेजों के मैनुअल सेक्शन 2 को दर्शाते हैं जो सिस्टम कॉल सेक्शन है।

    आशा है कि आप अवधारणा को समझ गए होंगे।


कर्नेल में केवल एक मोड, कर्नेल मोड होता है। उपयोगकर्ता प्रक्रियाओं के दो परिचालन मोड हैं जो वे आगे और पीछे स्विच करते हैं, उपयोगकर्तालैंड और कर्नेल।
jlliagre

1

बस अन्य उत्तरों में यहां बताए गए मतभेदों को जोड़ते हुए।

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

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