यह सिस्टम कॉल द्वारा आपके मतलब पर निर्भर करता है। क्या आपका मतलब सी लाइब्रेरी कॉल (ग्लिबैक के माध्यम से) या एक वास्तविक सिस्टम कॉल है? अंत में सिस्टम कॉल का उपयोग कर सी लाइब्रेरी कॉल हमेशा खत्म हो जाती है।
सिस्टम कॉल करने का पुराना तरीका एक सॉफ्टवेयर व्यवधान, जैसे कि, int
अनुदेश के माध्यम से किया गया था। विंडोज़ में int 0x2e
था जबकि लिनक्स में int 0x80
था। ओएस इंटरप्ट डिस्क्रिप्टर टेबल (आईडीटी) में 0x2e या 0x80 के लिए एक इंटरप्ट हैंडलर सेट करता है। यह हैंडलर तब सिस्टम कॉल करता है। यह उपयोगकर्ता-मोड से कर्नेल-मोड में तर्कों की प्रतिलिपि बनाता है (यह एक ओएस-विशिष्ट सम्मेलन द्वारा नियंत्रित होता है)। लिनक्स पर, तर्क ebx
, ecx
, edx
, esi
, और edi
का उपयोग कर पारित कर रहे हैं। विंडोज़ पर, तर्क स्टैक से कॉपी किए जाते हैं। हैंडलर फिर किसी प्रकार का लुकअप (फ़ंक्शन का पता ढूंढने के लिए) करता है और सिस्टम कॉल निष्पादित करता है। सिस्टम कॉल पूरा होने के बाद, iret
निर्देश उपयोगकर्ता-मोड पर लौटाता है।
नया तरीका sysenter
और sysexit
है। ये दो निर्देश मूल रूप से आपके लिए सभी रजिस्टर कार्य करते हैं। ओएस मॉडल विशिष्ट रजिस्टरों (एमएसआर) के माध्यम से निर्देश सेट करता है। इसके बाद यह व्यावहारिक रूप से int
का उपयोग करने जैसा ही है। विधानसभा में
क्या कर्नेल कोड की तरह, निष्पादन द्विआधारी, विधानसभा या गतिशील जुड़ा हुआ पुस्तकालय है? – MainID
कर्नेल आपके सिस्टम पर चल रहा कर्नेल है, यानी, स्मृति में ओएस छवि। – tvanfosson