सिस्टम कॉल

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

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

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

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

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

पुस्तकालय फ़ंक्शन के लिए कॉल स्वयं कर्नेल मोड में स्विच का कारण नहीं बनती है और सामान्यतः सामान्य सबरूटीन कॉल (उदाहरण के लिए, कुछ निर्देश सेट वास्तुकला (ISAs) में कॉल असेंबली इंस्ट्रक्शन) होती है। वास्तविक सिस्टम कॉल कर्नेल को नियंत्रण स्थानांतरित करता है (और अधिक कार्यान्वयन-निर्भर और पुस्तकालय कॉल की तुलना में प्लेटफ़ॉर्म-निर्भर है)। उदाहरण के लिए, यूनिक्स जैसी प्रणालियों में,  और   सी पुस्तकालय कार्य हैं जो बदले में उन निर्देशों को निष्पादित करते हैं जो   और   सिस्टम कॉल आह्वान करते हैं। आवेदन कोड में सीधे सिस्टम कॉल करना अधिक जटिल है और इसके लिए एम्बेडेड असेंबली कोड (C (प्रोग्रामिंग भाषा) और C++) का उपयोग करने की आवश्यकता हो सकती है, साथ ही सिस्टम कॉल ऑपरेशन के लिए निम्न-स्तरीय बाइनरी इंटरफ़ेस के ज्ञान की आवश्यकता होती है। जो समय के साथ परिवर्तन के अधीन हो सकता है और इस प्रकार अनुप्रयोग बाइनरी इंटरफ़ेस का भाग नहीं हो सकता है; पुस्तकालय फ़ंक्शंस इसे दूर करने के लिए हैं।

एक्सोकर्नेल आधारित प्रणालियों पर, पुस्तकालय मध्यस्थ के रूप में विशेष रूप से महत्वपूर्ण है। एक्सोकर्नल्स पर, पुस्तकालय उपयोगकर्ता अनुप्रयोगों को बहुत निम्न स्तर के कर्नेल एप्लिकेशन प्रोग्रामिंग अंतरफलक से ढालते हैं, और अमूर्तता (कंप्यूटर विज्ञान) और संसाधन (कंप्यूटर विज्ञान) प्रबंधन प्रदान करते हैं।

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

उदाहरण और उपकरण
यूनिक्स, यूनिक्स-जैसे और अन्य पॉज़िक्स-संगत ऑपरेटिंग सिस्टम पर, लोकप्रिय सिस्टम कॉल,  ,  ,  ,  ,  ,  ,  , और  हैं। कई आधुनिक ऑपरेटिंग सिस्टम में सैकड़ों सिस्टम कॉल होते हैं। उदाहरण के लिए, लिनक्स कर्नेल और ओपनबीएसडी प्रत्येक में 300 से अधिक अलग-अलग कॉल हैं,  नेटबीएसडी के पास 500 के निकट है, फ्रीबीएसडी में 500 से अधिक हैं, विंडोज़ में 2000 के करीब है, जो win32के (ग्राफ़िकल) और ntdll (कोर) सिस्टम कॉल के बीच विभाजित है जबकि बेल लैब्स के प्लान 9 में 51 हैं।

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

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

यह कई जोखिम प्रोसेसरों के लिए प्रदान की जाने वाली एकमात्र तकनीक है, लेकिन जटिल निर्देश सेट कंप्यूटर आर्किटेक्चर जैसे कि x86 अतिरिक्त तकनीकों का समर्थन करता है। उदाहरण के लिए, x86 निर्देश सेट में निर्देश /  और  /  (ये दो तंत्र क्रमशः एएमडी और इंटेल द्वारा स्वतंत्र रूप से बनाए गए थे, लेकिन संक्षेप में वे ही काम करते हैं) होते हैं। ये तेजी से नियंत्रण हस्तांतरण निर्देश हैं जो बाधा के ओवरहेड के बिना सिस्टम कॉल के लिए कर्नेल को जल्दी से नियंत्रण स्थानांतरित करने के लिए डिज़ाइन किए गए हैं। लिनक्स 2.5 ने x86 पर इसका उपयोग करना प्रारंभ किया, जहां पहले उपलब्ध था, यह   निर्देश का उपयोग करता था जहां  0x80 को बाधित करने से पहले सिस्टम कॉल नंबर   रजिस्टर में रखा गया था।

कॉल गेट पुराना तंत्र है; मूल रूप से मॉलटिक्स में और बाद में, उदाहरण के लिए, इंटेल x86 पर कॉल गेट (इंटेल) देखें। यह प्रोग्राम को सुरक्षित नियंत्रण हस्तांतरण तंत्र का उपयोग करके सीधे कर्नेल फ़ंक्शन को कॉल करने की अनुमति देता है, जिसे ऑपरेटिंग सिस्टम पहले से सेट करता है। यह दृष्टिकोण x86 पर अलोकप्रिय रहा है, संभवतः दूर कॉल की आवश्यकता के कारण (वर्तमान कोड खंड की तुलना में अलग खंड में स्थित प्रक्रिया के लिए कॉल ) जो x86 मेमोरी सेगमेंटेशन का उपयोग करता है और परिणामस्वरूप पोर्टेबिलिटी (सॉफ़्टवेयर) की कमी का कारण बनता है, और ऊपर उल्लिखित तेज़ निर्देशों का अस्तित्व होता है।

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

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

पीडीपी-11 मिनी कंप्यूटर ने ईएमटी और आईओटी निर्देशों का उपयोग किया, जो आईबीएम सिस्टम/360 एसवीसी और x86 आईएनटी के समान थे, वे ऑपरेटिंग सिस्टम पर नियंत्रण स्थानांतरित करने वाले विशिष्ट पतों पर व्यवधान उत्पन्न करने वाले निर्देश में कोड डालते थे। पीडीपी-11 श्रृंखला के वैक्स 32-बिट उत्तराधिकारी ने सीएचएमके, सीएचएमई, और सीएचएमएस विभिन्न स्तरों पर विशेषाधिकार प्राप्त कोड को सिस्टम कॉल करने के निर्देश; कोड निर्देश के लिए तर्क है।

सिस्टम कॉल की श्रेणियाँ
सिस्टम कॉल को सामान्यतः छह प्रमुख श्रेणियों में बांटा जा सकता है:
 * 1) प्रक्रिया नियंत्रण
 * 2) * बनाने की प्रक्रिया (उदाहरण के लिए,  यूनिक्स जैसी प्रणालियों पर, या   विंडोज एनटी नेटिव एपीआई में)
 * 3) * समाप्त (कमांड)
 * 4) *लोड (कंप्यूटिंग), निष्पादित (ऑपरेटिंग सिस्टम) करें
 * 5) प्रक्रिया विशेषताएँ प्राप्त / सेट करें
 * 6) *समय के लिए प्रतीक्षा (ऑपरेटिंग सिस्टम), प्रतीक्षा घटना, सिग्नल (कंप्यूटिंग) घटना
 * 7) *गतिशील स्मृति आवंटन और कचरा संग्रह (कंप्यूटर विज्ञान) मेमोरी
 * 8) फ़ाइल प्रबंधन
 * 9) * फाइल बनाएं, फाइल डिलीट करें
 * 10) * खोलें बंद करें
 * 11) * पढ़ें, लिखें, रिपोजिशन करें
 * 12) फ़ाइल विशेषताएँ प्राप्त / सेट करें
 * 13) उपकरण प्रबंधन
 * 14) अनुरोध उपकरण, रिलीज़ उपकरण
 * 15) * पढ़ें, लिखें, रिपोजिशन करें
 * 16) * उपकरण विशेषताएँ प्राप्त / सेट करें
 * 17) * उपकरणों को तार्किक रूप से संलग्न या अलग करें
 * 18) सूचना रखरखाव
 * 19) * कुल सिस्टम जानकारी प्राप्त करें / सेट करें (समय, दिनांक, कंप्यूटर का नाम, उद्यम आदि सहित)
 * 20) * प्राप्त/सेट प्रक्रिया, फ़ाइल, या उपकरण मेटाडेटा (लेखक, ओपनर, निर्माण समय और दिनांक, आदि सहित)
 * 21) संचार
 * 22) * संचार संयोजन बनाएं, हटाएं
 * 23) * संदेश भेजें, प्राप्त करें
 * 24) * स्थानांतरण स्थिति की जानकारी
 * 25) * रिमोट उपकरण को जोड़े या अलग करें
 * 26) सुरक्षा
 * 27) * फ़ाइल अनुमतियां प्राप्त/सेट करें

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

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

यह भी देखें

 * लिनक्स कर्नेल एपीआई
 * वीडीएसओ

बाहरी संबंध

 * A list of modern Unix-like system calls
 * Interactive Linux kernel map with main API functions and structures, PDF version
 * Linux system calls – system calls for Linux kernel 2.2, with IA-32 calling conventions
 * How System Calls Work on Linux/i86 (1996, based on the 1993 0.99.2 kernel)
 * Sysenter Based System Call Mechanism in Linux 2.6 (2006)
 * Kernel command using Linux system calls, आईबीएम developerWorks
 * Choudhary, Amit; HOWTO for Implementing a System Call on Linux 2.6
 * Jorrit N. Herder, Herbert Bos, Ben Gras, Philip Homburg, and Andrew S. Tanenbaum, Modular system programming on Minix 3, ;login: 31, no. 2 (April 2006); 19–28, accessed 5 March 2018
 * A simple open Unix Shell in C language – examples on System Calls under Unix
 * Inside the Native API – विंडोज NT Native API, including system calls
 * Gulbrandsen, John; System Call Optimization with the SYSENTER Instruction, CodeGuru.com, 8 October 2004