मैं इस सवाल के जवाब के माध्यम से गया हूं, लेकिन सिस्टम कॉल और लाइब्रेरी फ़ंक्शन के बीच अंतर को काफी नहीं समझता। वैचारिक रूप से, दोनों में क्या अंतर है?
मैं इस सवाल के जवाब के माध्यम से गया हूं, लेकिन सिस्टम कॉल और लाइब्रेरी फ़ंक्शन के बीच अंतर को काफी नहीं समझता। वैचारिक रूप से, दोनों में क्या अंतर है?
जवाबों:
वैचारिक रूप से, एक पुस्तकालय समारोह आपकी प्रक्रिया का हिस्सा है।
रन-टाइम पर, आपका निष्पादन योग्य कोड और किसी भी लाइब्रेरी का कोड (जैसे libc.so) इस पर निर्भर करता है, एक एकल प्रक्रिया में जुड़ा हुआ है। इसलिए, जब आप इस तरह के पुस्तकालय में एक फ़ंक्शन कहते हैं, तो यह आपकी प्रक्रिया के हिस्से के रूप में निष्पादित होता है, समान संसाधनों और विशेषाधिकारों के साथ। यह एक ऐसा विचार है जैसा कि आपने एक फ़ंक्शन कॉल किया है जो आपने खुद को लिखा है (पीएलटी और / या ट्रैम्पोलिन फ़ंक्शन जैसे संभावित अपवादों के साथ, जिन्हें आप देख सकते हैं यदि आप देखभाल करते हैं)।
वैचारिक रूप से, एक सिस्टम कॉल एक विशेष इंटरफ़ेस है जिसका उपयोग आपके कोड से कॉल करने के लिए किया जाता है (जो आमतौर पर अनपेक्षित है) कर्नेल के लिए (जिसमें आवश्यक के रूप में विशेषाधिकारों को बढ़ाने का अधिकार है)।
उदाहरण के लिए, लिनक्स मैन ब्रैक देखें । जब कोई सी प्रोग्राम malloc
मेमोरी आवंटित करने के लिए कॉल करता है, तो यह ग्लिबक में लाइब्रेरी फ़ंक्शन को बुला रहा है।
यदि प्रक्रिया के अंदर आवंटन के लिए पहले से ही पर्याप्त जगह है , तो यह किसी भी आवश्यक ढेर प्रबंधन को कर सकता है और कॉलर को मेमोरी वापस कर सकता है।
यदि नहीं, तो ग्लिबक को कर्नेल से अधिक मेमोरी का अनुरोध करने की आवश्यकता होती है: यह (शायद) brk
ग्लिबक फ़ंक्शन को कॉल करता है, जो बदले में brk
सिसकल को कॉल करता है । केवल एक बार नियंत्रण कर्नेल के पास चला गया है, syscall के माध्यम से, वैश्विक वर्चुअल मेमोरी स्थिति को अधिक मेमोरी आरक्षित करने के लिए संशोधित किया जा सकता है, और इसे आपकी प्रक्रिया के पता स्थान में मैप कर सकता है।
बेकार के जवाब में जोड़ना:
लाइब्रेरी फ़ंक्शंस सिस्टम कॉल की तुलना में तेज़ हैं, और आमतौर पर इसमें अनुमति / सुरक्षा संबंधी विचार शामिल नहीं होते हैं, क्योंकि वे प्रक्रिया के विशेषाधिकारों के साथ चल रहे हैं और यह स्मृति है।
दूसरी ओर Syscalls, चूंकि वे कर्नेल में चलते हैं, सिस्टम में सब कुछ तक पहुंच है, और इसलिए उन्हें यह नियंत्रित करने की आवश्यकता है कि कॉलिंग प्रक्रिया क्या कर सकती है जब वह उन्हें कॉल कर रही हो (सत्यापित करें कि उसके पास फ़ाइल खोलने की अनुमति है, के लिए उदाहरण), इसके अलावा, चूंकि syscalls कर्नेल में हैं, इसलिए उन्हें कॉल करने के लिए CPU में एक संदर्भ स्विच की आवश्यकता होती है, जो कि केवल लाइब्रेरी कॉल करने के सापेक्ष एक बहुत भारी प्रक्रिया है।
Syscalls आमतौर पर निगरानी कार्यक्रमों में सिस्टम CPU उपयोग के रूप में प्रतिबिंबित करता है।
लाइब्रेरी कॉल - एक सबरूटीन को आवेदन में (लाइब्रेरी को शामिल या जोड़कर) के माध्यम से लिंक करता है।
सिस्टम कॉल - ओएस (उपयोगकर्ता-> सिस्टम प्रोक-> ओएस) पर नियंत्रण स्थानांतरित करता है, और प्रोसेसर को विशेषाधिकार प्राप्त मोड में रखता है