सिस्टम कॉल
कंप्यूटिंग में, सिस्टम कॉल (आमतौर पर syscall के लिए संक्षिप्त) प्रोग्रामेटिक तरीका है जिसमें कंप्यूटर प्रोग्राम ऑपरेटिंग सिस्टम से सेवा का अनुरोध करता है।[lower-alpha 1] जिस पर इसे क्रियान्वित किया जाता है। इसमें हार्डवेयर से संबंधित सेवाएं शामिल हो सकती हैं (उदाहरण के लिए, हार्ड डिस्क ड्राइव तक पहुंच या डिवाइस के कैमरे तक पहुंच), नई प्रक्रिया (कंप्यूटिंग) का निर्माण और निष्पादन, और इंटीग्रल कर्नेल सेवाओं जैसे प्रक्रिया शेड्यूलिंग के साथ संचार। सिस्टम कॉल प्रक्रिया और ऑपरेटिंग सिस्टम के बीच आवश्यक इंटरफ़ेस प्रदान करते हैं।
अधिकांश प्रणालियों में, सिस्टम कॉल केवल यूजरस्पेस प्रक्रियाओं से की जा सकती हैं, जबकि कुछ प्रणालियों में, उदाहरण के लिए OS/360 और उत्तराधिकारी, विशेषाधिकार प्राप्त सिस्टम कोड भी सिस्टम कॉल जारी करते हैं।[1]
विशेषाधिकार
कुछ एम्बेडेड सिस्टम के अपवाद के साथ, अधिकांश आधुनिक प्रोसेसर के निर्देश समुच्चय में CPU मोड शामिल होता है। उदाहरण के लिए, रिंग (कंप्यूटर सुरक्षा) मॉडल कई विशेषाधिकार स्तरों को निर्दिष्ट करता है जिसके तहत सॉफ़्टवेयर निष्पादित किया जा सकता है: प्रोग्राम आमतौर पर अपने स्वयं के पता स्थान तक सीमित होता है ताकि वह अन्य चल रहे प्रोग्रामों या ऑपरेटिंग सिस्टम को एक्सेस या संशोधित न कर सके, और आमतौर पर सीधे हार्डवेयर उपकरणों (जैसे फ्रेम बफर या संगणक संजाल डिवाइस) में हेरफेर करने से रोका गया।
हालांकि, कई अनुप्रयोगों को इन घटकों तक पहुंच की आवश्यकता होती है, इसलिए ऑपरेटिंग सिस्टम द्वारा ऐसे कार्यों के लिए अच्छी तरह से परिभाषित, सुरक्षित कार्यान्वयन प्रदान करने के लिए सिस्टम कॉल उपलब्ध कराए जाते हैं। ऑपरेटिंग सिस्टम विशेषाधिकार के उच्चतम स्तर पर क्रियान्वित होता है, और एप्लिकेशन को सिस्टम कॉल के माध्यम से सेवाओं का अनुरोध करने की अनुमति देता है, जो अक्सर बाधा डालना के माध्यम से शुरू की जाती हैं। व्यवधान स्वचालित रूप से सीपीयू मोड कुछ उन्नत विशेषाधिकार स्तर में डालता है और फिर कर्नेल को नियंत्रण देता है, जो यह निर्धारित करता है कि कॉलिंग प्रोग्राम को अनुरोधित सेवा दी जानी चाहिए या नहीं। यदि सेवा प्रदान की जाती है, तो कर्नेल निर्देशों के विशिष्ट सेट को निष्पादित करता है, जिस पर कॉलिंग प्रोग्राम का कोई सीधा नियंत्रण नहीं होता है, कॉलिंग प्रोग्राम के लिए विशेषाधिकार स्तर लौटाता है, और फिर कॉलिंग प्रोग्राम पर नियंत्रण लौटाता है।
मध्यस्थ के रूप में पुस्तकालय
आम तौर पर, सिस्टम पुस्तकालय (कम्प्यूटिंग) या एपीआई प्रदान करते हैं जो सामान्य प्रोग्राम और ऑपरेटिंग सिस्टम के बीच बैठता है। यूनिक्स जैसी प्रणालियों पर, वह एपीआई आमतौर पर सी मानक पुस्तकालय (लिबसी) के कार्यान्वयन का हिस्सा होता है, जैसे कि ग्लिबैक, जो सिस्टम कॉल के लिए आवरण समारोह प्रदान करता है, जिसे अक्सर सिस्टम कॉल के समान नाम दिया जाता है। विंडोज एनटी पर, वह एपीआई देशी एपीआई का हिस्सा है ntdll.dll पुस्तकालय; यह गैर-दस्तावेजी API है जिसका उपयोग नियमित Windows API के कार्यान्वयन द्वारा किया जाता है और सीधे Windows पर कुछ सिस्टम प्रोग्राम द्वारा उपयोग किया जाता है। लाइब्रेरी के रैपर फ़ंक्शंस सिस्टम कॉल का उपयोग करने के साथ-साथ सिस्टम कॉल को अधिक प्रतिरूपकता बनाने के लिए सामान्य फ़ंक्शन कॉलिंग सम्मेलन (असेंबली भाषा स्तर पर सबरूटीन कॉल) का पर्दाफाश करते हैं। यहां, रैपर का प्राथमिक कार्य उचित प्रोसेसर रजिस्टरों (और शायद कॉल स्टैक पर भी) में सिस्टम कॉल को पास किए जाने वाले सभी तर्कों को रखना है, और कर्नेल को कॉल करने के लिए अद्वितीय सिस्टम कॉल नंबर भी सेट करना है। . इस तरह लाइब्रेरी, जो ओएस और एप्लिकेशन के बीच मौजूद है, सॉफ्टवेयर पोर्टेबिलिटी को बढ़ाती है।
लाइब्रेरी फ़ंक्शन के लिए कॉल स्वयं कर्नेल मोड में स्विच का कारण नहीं बनती है और आमतौर पर सामान्य सबरूटीन कॉल होती है (उदाहरण के लिए, कुछ निर्देश सेट वास्तुकला (ISAs) में कॉल असेंबली इंस्ट्रक्शन)। वास्तविक सिस्टम कॉल कर्नेल को नियंत्रण स्थानांतरित करता है (और अधिक कार्यान्वयन-निर्भर और लाइब्रेरी कॉल की तुलना में प्लेटफ़ॉर्म-निर्भर है)। उदाहरण के लिए, यूनिक्स जैसी प्रणालियों में, fork
और execve
सी पुस्तकालय कार्य हैं जो बदले में उन निर्देशों को निष्पादित करते हैं जो आह्वान करते हैं fork
और exec
सिस्टम कॉल। आवेदन कोड में सीधे सिस्टम कॉल करना अधिक जटिल है और इसके लिए एम्बेडेड असेंबली कोड (C (प्रोग्रामिंग लैंग्वेज) और C++) का उपयोग करने की आवश्यकता हो सकती है, साथ ही सिस्टम कॉल ऑपरेशन के लिए निम्न-स्तरीय बाइनरी इंटरफ़ेस के ज्ञान की आवश्यकता होती है। जो समय के साथ परिवर्तन के अधीन हो सकता है और इस प्रकार अनुप्रयोग बाइनरी इंटरफ़ेस का हिस्सा नहीं हो सकता है; लाइब्रेरी फ़ंक्शंस इसे दूर करने के लिए हैं।
exokernel आधारित प्रणालियों पर, पुस्तकालय मध्यस्थ के रूप में विशेष रूप से महत्वपूर्ण है। एक्सोकर्नल्स पर, पुस्तकालय उपयोगकर्ता अनुप्रयोगों को बहुत निम्न स्तर के कर्नेल अप्लिकेशन प्रोग्रामिंग अंतरफलक से ढालते हैं, और अमूर्तता (कंप्यूटर विज्ञान) और संसाधन (कंप्यूटर विज्ञान) प्रबंधन प्रदान करते हैं।
IBM का OS/360 और उत्तराधिकारी | OS/360, DOS/360 और उत्तराधिकारी | DOS/360 और TSS/360 असेंबली लैंग्वेज मैक्रो (कंप्यूटर विज्ञान) की लाइब्रेरी के माध्यम से अधिकांश सिस्टम कॉल को लागू करते हैं,[lower-alpha 2] हालांकि कॉल लिंकेज वाली कुछ सेवाएं हैं। यह उस समय उनकी उत्पत्ति को दर्शाता है जब असेंबली भाषा में प्रोग्रामिंग उच्च-स्तरीय प्रोग्रामिंग भाषा | उच्च-स्तरीय भाषा के उपयोग से अधिक सामान्य थी। आईबीएम सिस्टम कॉल इसलिए उच्च-स्तरीय भाषा कार्यक्रमों द्वारा सीधे निष्पादन योग्य नहीं थे, लेकिन कॉल करने योग्य असेंबली भाषा रैपर सबरूटीन की आवश्यकता थी। तब से, आईबीएम ने कई सेवाओं को जोड़ा है जिन्हें उच्च स्तरीय भाषाओं में बुलाया जा सकता है, उदाहरण के लिए, z/OS और VSE (ऑपरेटिंग सिस्टम) | z/VSE। एमवीएस/एसपी और बाद के सभी एमवीएस संस्करणों में हाल ही में रिलीज में, कुछ सिस्टम कॉल मैक्रोज़ प्रोग्राम कॉल (पीसी) उत्पन्न करते हैं।
उदाहरण और उपकरण
यूनिक्स, यूनिक्स-जैसे और अन्य पॉज़िक्स-संगत ऑपरेटिंग सिस्टम पर, लोकप्रिय सिस्टम कॉल हैं open
, read
, write
, close
, wait
, exec
, fork
, exit
, और kill
. कई आधुनिक ऑपरेटिंग सिस्टम में सैकड़ों सिस्टम कॉल होते हैं। उदाहरण के लिए, Linux कर्नेल और OpenBSD प्रत्येक में 300 से अधिक अलग-अलग कॉल हैं,[2][3] NetBSD के पास 500 के करीब है,[4] FreeBSD में 500 से अधिक हैं,[5] विंडोज़ में 2000 के करीब है, जो win32k (ग्राफ़िकल) और ntdll (कोर) सिस्टम कॉल के बीच विभाजित है[6] जबकि बेल लैब्स के प्लान 9 में 51 हैं।[7]
ftrace, फ़ट्रेस और पुलिंदा (यूनिक्स) जैसे उपकरण प्रक्रिया को प्रारंभ से निष्पादित करने की अनुमति देते हैं और सभी सिस्टम कॉल की रिपोर्ट करते हैं जो प्रक्रिया को आमंत्रित करते हैं, या पहले से चल रही प्रक्रिया से जुड़ सकते हैं और उक्त प्रक्रिया द्वारा किए गए किसी भी सिस्टम कॉल को इंटरसेप्ट कर सकते हैं यदि ऑपरेशन नहीं होता है उपयोगकर्ता की अनुमतियों का उल्लंघन। प्रोग्राम की यह विशेष क्षमता आमतौर पर सिस्टम कॉल जैसे ptrace या procfs में फाइलों पर सिस्टम कॉल के साथ भी कार्यान्वित की जाती है।
विशिष्ट कार्यान्वयन
सिस्टम कॉल को लागू करने के लिए उपयोगकर्ता स्थान से कर्नेल स्थान पर नियंत्रण के हस्तांतरण की आवश्यकता होती है, जिसमें कुछ प्रकार की वास्तुकला-विशिष्ट विशेषता शामिल होती है। इसे लागू करने का विशिष्ट तरीका सॉफ्टवेयर व्यवधान या ट्रैप (कंप्यूटिंग) का उपयोग करना है। ऑपरेटिंग सिस्टम कर्नेल (ऑपरेटिंग सिस्टम) में ट्रांसफर कंट्रोल को बाधित करता है, इसलिए सॉफ्टवेयर को सिस्टम कॉल नंबर के साथ कुछ रजिस्टर सेट करने की जरूरत होती है, और सॉफ्टवेयर इंटरप्ट को निष्पादित करता है।
यह कई जोखिम प्रोसेसरों के लिए प्रदान की जाने वाली एकमात्र तकनीक है, लेकिन जटिल निर्देश सेट कंप्यूटर आर्किटेक्चर जैसे कि x86 अतिरिक्त तकनीकों का समर्थन करता है। उदाहरण के लिए, x86 निर्देश सेट में निर्देश होते हैं SYSCALL
/SYSRET
और SYSENTER
/SYSEXIT
(ये दो तंत्र क्रमशः एएमडी और इंटेल द्वारा स्वतंत्र रूप से बनाए गए थे, लेकिन संक्षेप में वे ही काम करते हैं)। ये तेजी से नियंत्रण हस्तांतरण निर्देश हैं जो बाधा के ओवरहेड के बिना सिस्टम कॉल के लिए कर्नेल को जल्दी से नियंत्रण स्थानांतरित करने के लिए डिज़ाइन किए गए हैं।[8] Linux 2.5 ने x86 पर इसका उपयोग करना शुरू किया, जहाँ उपलब्ध था; पहले इसका इस्तेमाल करता था INT
निर्देश, जहां सिस्टम कॉल नंबर को रखा गया था EAX
INT (x86 निर्देश) 0x80 से पहले प्रोसेसर रजिस्टर निष्पादित किया गया था।[9][10]
कॉल गेट पुराना तंत्र है; मूल रूप से मॉलटिक्स में और बाद में, उदाहरण के लिए, इंटेल x86 पर कॉल गेट (इंटेल) देखें। यह प्रोग्राम को सुरक्षित नियंत्रण हस्तांतरण तंत्र का उपयोग करके सीधे कर्नेल फ़ंक्शन को कॉल करने की अनुमति देता है, जिसे ऑपरेटिंग सिस्टम पहले से सेट करता है। यह दृष्टिकोण x86 पर अलोकप्रिय रहा है, संभवतः दूर कॉल की आवश्यकता के कारण (वर्तमान कोड खंड की तुलना में अलग खंड में स्थित प्रक्रिया के लिए कॉल[11]) जो x86 मेमोरी सेगमेंटेशन का उपयोग करता है और परिणामस्वरूप पोर्टेबिलिटी (सॉफ़्टवेयर) की कमी का कारण बनता है, और ऊपर वर्णित तेज़ निर्देशों का अस्तित्व।
IA-64 आर्किटेक्चर के लिए, EPC
(विशेषाधिकार कोड दर्ज करें) निर्देश का उपयोग किया जाता है। पहले आठ सिस्टम कॉल आर्ग्युमेंट रजिस्टरों में पास किए जाते हैं, और बाकी स्टैक पर पास किए जाते हैं।
IBM सिस्टम/360 मेनफ्रेम परिवार और इसके उत्तराधिकारियों में, पर्यवेक्षक कॉल निर्देश (SVC), रजिस्टर के बजाय निर्देश में संख्या के साथ, अधिकांश में लीगेसी सुविधाओं के लिए सिस्टम कॉल लागू करता है[lower-alpha 3] आईबीएम के अपने ऑपरेटिंग सिस्टम, और लिनक्स में सभी सिस्टम कॉल के लिए। एमवीएस के बाद के संस्करणों में, आईबीएम कई नई सुविधाओं के लिए प्रोग्राम कॉल (पीसी) निर्देश का उपयोग करता है। विशेष रूप से, पीसी का उपयोग तब किया जाता है जब कॉलर सेवा अनुरोध ब्लॉक (SRB) मोड में हो सकता है। PDP-11 मिनी कंप्यूटर ने इस्तेमाल किया EMT और IOT निर्देश, जो IBM System/360 के समान है SVC और x86 INTनिर्देश में कोड डालें; वे ऑपरेटिंग सिस्टम पर नियंत्रण स्थानांतरित करते हुए, विशिष्ट पतों पर व्यवधान उत्पन्न करते हैं। PDP-11 श्रृंखला के VAX 32-बिट उत्तराधिकारी ने CHMK, CHME, और CHMS विभिन्न स्तरों पर विशेषाधिकार प्राप्त कोड को सिस्टम कॉल करने के निर्देश; कोड निर्देश के लिए तर्क है।
सिस्टम कॉल की श्रेणियाँ
सिस्टम कॉल को मोटे तौर पर छह प्रमुख श्रेणियों में बांटा जा सकता है:[12]
- प्रक्रिया नियंत्रण
- बनाने की प्रक्रिया (उदाहरण के लिए,
fork
यूनिक्स जैसी प्रणालियों पर, याNtCreateProcess
विंडोज एनटी नेटिव एपीआई में) - मार (कमांड)
- लोडर (कंप्यूटिंग), Exec (ऑपरेटिंग सिस्टम)
- बनाने की प्रक्रिया (उदाहरण के लिए,
- * प्रक्रिया विशेषताएँ प्राप्त / सेट करें
- समय के लिए प्रतीक्षा (ऑपरेटिंग सिस्टम), प्रतीक्षा घटना, सिग्नल (कंप्यूटिंग) घटना
- गतिशील स्मृति आवंटन और कचरा संग्रह (कंप्यूटर विज्ञान) मेमोरी
- फ़ाइल प्रबंधन
- फाइल बनाएं, फाइल डिलीट करें
- खोलें बंद करें
- पढ़ें, लिखें, रिपोजिशन करें
- * फ़ाइल विशेषताएँ प्राप्त / सेट करें
- डिवाइस प्रबंधन
- * अनुरोध डिवाइस, रिलीज़ डिवाइस
- पढ़ें, लिखें, रिपोजिशन करें
- डिवाइस विशेषताएँ प्राप्त / सेट करें
- उपकरणों को तार्किक रूप से संलग्न या अलग करें
- सूचना रखरखाव
- कुल सिस्टम जानकारी प्राप्त करें / सेट करें (समय, दिनांक, कंप्यूटर का नाम, उद्यम आदि सहित)
- प्राप्त/सेट प्रक्रिया, फ़ाइल, या डिवाइस मेटाडेटा (लेखक, ओपनर, निर्माण समय और दिनांक, आदि सहित)
- संचार
- संचार कनेक्शन बनाएं, हटाएं
- संदेश भेजें, प्राप्त करें
- स्थानांतरण स्थिति की जानकारी
- रिमोट डिवाइस को अटैच या डिटैच करें
- सुरक्षा
- फ़ाइल अनुमतियां प्राप्त/सेट करें
प्रोसेसर मोड और संदर्भ स्विचिंग
अधिकांश यूनिक्स-जैसी प्रणालियों में सिस्टम कॉल को कर्नेल मोड में संसाधित किया जाता है, जो प्रोसेसर निष्पादन मोड को अधिक विशेषाधिकार प्राप्त मोड में बदलकर पूरा किया जाता है, लेकिन कोई प्रक्रिया संदर्भ स्विच आवश्यक नहीं है – हालांकि विशेषाधिकार संदर्भ स्विच होता है। हार्डवेयर प्रोसेसर स्थिति रजिस्टर के अनुसार निष्पादन मोड के संदर्भ में दुनिया को देखता है, और प्रक्रियाएं ऑपरेटिंग सिस्टम द्वारा प्रदान की गई अमूर्तता हैं। सिस्टम कॉल को आम तौर पर किसी अन्य प्रक्रिया के संदर्भ स्विच की आवश्यकता नहीं होती है; इसके बजाय, जिस भी प्रक्रिया ने इसे लागू किया है, उसके संदर्भ में इसे संसाधित किया जाता है।[13][14] मल्टीथ्रेडिंग (कंप्यूटर आर्किटेक्चर) प्रक्रिया में, मल्टी थ्रेड (कंप्यूटिंग) से सिस्टम कॉल किए जा सकते हैं। ऐसी कॉलों की हैंडलिंग विशिष्ट ऑपरेटिंग सिस्टम कर्नेल के डिज़ाइन और एप्लिकेशन रनटाइम पर्यावरण पर निर्भर है। निम्न सूची ऑपरेटिंग सिस्टम के बाद विशिष्ट मॉडल दिखाती है:[15][16]
- कई-से-मॉडल: प्रक्रिया में किसी भी उपयोगकर्ता थ्रेड से सभी सिस्टम कॉल को कर्नेल-स्तरीय थ्रेड द्वारा नियंत्रित किया जाता है। इस मॉडल में गंभीर कमी है – कोई भी ब्लॉकिंग सिस्टम कॉल (जैसे उपयोगकर्ता से इनपुट का इंतजार करना) अन्य सभी थ्रेड्स को फ्रीज कर सकता है। साथ ही, चूंकि समय में केवल थ्रेड कर्नेल तक पहुंच सकता है, यह मॉडल प्रोसेसर के एकाधिक कोर का उपयोग नहीं कर सकता है।
- एक-से-मॉडल: सिस्टम कॉल के दौरान प्रत्येक उपयोगकर्ता थ्रेड अलग कर्नेल-स्तरीय थ्रेड से जुड़ा होता है। यह मॉडल सिस्टम कॉल को ब्लॉक करने की उपरोक्त समस्या को हल करता है। यह सभी प्रमुख Linux वितरणों, macOS, iOS, हाल के Microsoft Windows और Solaris (ऑपरेटिंग सिस्टम) संस्करणों में पाया जाता है।
- मैनी-टू-मैनी मॉडल: इस मॉडल में, यूजर थ्रेड्स के पूल को कर्नेल थ्रेड्स के पूल में मैप किया जाता है। उपयोगकर्ता धागा पूल से सभी सिस्टम कॉल थ्रेड्स द्वारा उनके संबंधित कर्नेल थ्रेड पूल में नियंत्रित किए जाते हैं।
- हाइब्रिड मॉडल: यह मॉडल कर्नेल द्वारा की गई पसंद के आधार पर कई से कई और से मॉडल दोनों को लागू करता है। यह IRIX, HP-UX और Solaris (ऑपरेटिंग सिस्टम) के पुराने संस्करणों में पाया जाता है।
यह भी देखें
टिप्पणियाँ
संदर्भ
- ↑ IBM (March 1967). "Writing SVC Routines". IBM System/360 Operating System System Programmer's Guide (PDF). Third Edition. pp. 32–36. C28-6550-2.
- ↑ "syscalls(2) - Linux manual page".
- ↑ OpenBSD (14 September 2013). "System call names (kern/syscalls.c)". BSD Cross Reference.
- ↑ NetBSD (17 October 2013). "System call names (kern/syscalls.c)". BSD Cross Reference.
- ↑ "FreeBSD syscalls.c, the list of syscall names and IDs".
- ↑ Mateusz "j00ru" Jurczyk (5 November 2017). "Windows WIN32K.SYS System Call Table (NT/2000/XP/2003/Vista/2008/7/8/10)".
- ↑ "Plan 9 sys.h, the list of syscall names and IDs".
- ↑ "SYSENTER (OSDev wiki)".
- ↑ Anonymous (19 December 2002). "Linux 2.5 gets vsyscalls, sysenter support". KernelTrap. Retrieved 1 January 2008.
- ↑ Manu Garg (2006). "Sysenter Based System Call Mechanism in Linux 2.6".
- ↑ "Liberation: x86 Instruction Set Reference". renejeschke.de. Retrieved 4 July 2015.
- ↑ Silberschatz, Abraham (2018). Operating System Concepts. Peter B Galvin; Greg Gagne (10th ed.). Hoboken, NJ: Wiley. p. 67. ISBN 9781119320913. OCLC 1004849022.
- ↑ Bach, Maurice J. (1986), The Design of the UNIX Operating System, Prentice Hall, pp. 15–16.
- ↑ Elliot, John (2011). "Discussion of system call implementation at ProgClub including quote from Bach 1986".
- ↑ "Threads".
- ↑ "Threading Models" (PDF).
बाहरी संबंध
- 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, IBM 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 – Windows NT Native API, including system calls
- Gulbrandsen, John; System Call Optimization with the SYSENTER Instruction, CodeGuru.com, 8 October 2004