प्रक्रिया (कंप्यूटिंग)

Concepts- Program vs. Process vs. Thread.jpg बनाम प्रोसेस बनाम थ्रेड (कंप्यूटिंग)

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

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

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

सुरक्षा और विश्वसनीयता के लिए, अधिकांश आधुनिक ऑपरेटिंग सिस्टम स्वतंत्र प्रक्रियाओं के बीच सीधे संचार को रोकते हैं, और मध्यस्थता एवं नियंत्रित अंतर-प्रक्रिया संचार कार्यक्षमता को दृढ़ता-पूर्वक प्रदान करते हैं।

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

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

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

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

एक मुख्य कार्यक्रम के साथ एकल प्रक्रिया को जोड़ना सामान्य है, और बाल प्रक्रियाओं को किसी भी स्पिन-ऑफ, समांतर प्रक्रियाओं के साथ जोड़ना, जो अतुल्यकालिक सबरूटीन्स की तरह व्यवहार करता है। एक प्रक्रिया को खुद के संसाधन कहा जाता है, जिसमें से उसके कार्यक्रम की एक छवि (स्मृति में) एक ऐसा संसाधन है। हालाँकि, मल्टीप्रोसेसिंग सिस्टम में कई प्रक्रियाएँ मेमोरी में एक ही स्थान पर एक ही रीएन्ट्रेंट प्रोग्राम को चला सकती हैं या साझा कर सकती हैं, लेकिन प्रत्येक प्रक्रिया को प्रोग्राम की अपनी छवि कहा जाता है।

अंतः स्थापित प्रणाली ऑपरेटिंग सिस्टम में प्रक्रियाओं को अक्सर "कार्य" कहा जाता है। "प्रक्रिया" (या कार्य) का अर्थ "कुछ ऐसा है जो समय लेता है", "मेमोरी" के विपरीत है, जो "कुछ ऐसा है जो स्थान लेता है"।

उपरोक्त विवरण एक ऑपरेटिंग सिस्टम द्वारा प्रबंधित दोनों प्रक्रियाओं पर लागू होता है, और प्रक्रिया कैलकुली द्वारा परिभाषित प्रक्रियाओं पर लागू होता है।

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

प्रक्रिया स्थितियाँ
एक ऑपरेटिंग सिस्टम कर्नेल जो मल्टीटास्किंग की अनुमति देता है, उसे कुछ निश्चित अवस्थाओं के लिए प्रक्रियाओं की आवश्यकता होती है। इन राज्यों के नाम मानकीकृत नहीं हैं, लेकिन उनकी समान कार्यक्षमता है।


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

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

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

इतिहास
1960 के दशक के प्रारंभ तक, कंप्यूटर नियंत्रण सॉफ़्टवेयर निगरानी नियंत्रण सॉफ्टवेयर से विकसित हो गया था, उदाहरण के लिए IBSYS, कार्यकारी नियंत्रण सॉफ़्टवेयर के लिए। समय के साथ, कंप्यूटर तेज हो गए जबकि कंप्यूटर का समय अभी भी न तो सस्ता था और न ही पूरी तरह से उपयोग किया गया था; ऐसे वातावरण ने मल्टीप्रोग्रामिंग को संभव और आवश्यक बना दिया। मल्टीप्रोग्रामिंग का अर्थ है कि कई प्रोग्राम समवर्ती रूप से चलते हैं। पहले, एक से अधिक प्रोग्राम एक प्रोसेसर पर चलते थे, अंतर्निहित यूनिप्रोसेसर कंप्यूटर आर्किटेक्चर के परिणामस्वरूप, और उन्होंने दुर्लभ और सीमित हार्डवेयर संसाधनों को साझा किया; नतीजतन, संगामिति एक क्रमिक प्रकृति की थी। कई प्रोसेसर वाले बाद के सिस्टम पर, कई प्रोग्राम समवर्ती रूप से समानांतर में चल सकते हैं।

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

इसके तुरंत बाद, "कार्यक्रम" की धारणा को "कार्यान्वयन कार्यक्रम और उसके संदर्भ" की धारणा में विस्तारित किया गया। एक प्रक्रिया की अवधारणा का जन्म हुआ, जो पुनः प्रवेशी कोड के आविष्कार के साथ भी आवश्यक हो गया। धागे कुछ देर बाद आए। हालांकि, टाइम-शेयरिंग, कंप्यूटर नेटवर्क और मल्टीपल-सीपीयू साझा मेमोरी कंप्यूटर जैसी अवधारणाओं के आगमन के साथ, पुराने "मल्टीप्रोग्रामिंग" ने वास्तविक मल्टीटास्किंग, मल्टीप्रोसेसिंग और बाद में, मल्टीथ्रेडिंग का मार्ग प्रशस्त किया।

यह भी देखें

 * पृष्ठभूमि प्रक्रिया
 * बाल प्रक्रिया
 * बाहर निकलें (सिस्टम कॉल)
 * कांटा (सिस्टम कॉल)
 * हल्के वजन की प्रक्रिया
 * अनाथ प्रक्रिया
 * जनक प्रक्रिया
 * प्रक्रिया समूह
 * प्रतीक्षा करें (सिस्टम कॉल)
 * कार्यकारी डाइरेक्टरी
 * ज़ोंबी प्रक्रिया

अग्रिम पठन

 * Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau (2014). "Operating Systems: Three Easy Pieces". Arpaci-Dusseau Books. Relevant chapters: Abstraction: The Process The Process API
 * Gary D. Knott (1974) A proposal for certain process management and intercommunication primitives ACM SIGOPS Operating Systems Review. Volume 8, Issue 4 (October 1974). pp. 7 – 44

इस पेज में लापता आंतरिक लिंक की सूची

 * पूर्वक्रय (कम्प्यूटिंग)
 * समवर्ती (कंप्यूटर विज्ञान)
 * अंतःप्रक्रम संचार
 * रुकावट डालना
 * टास्क (कंप्यूटिंग)
 * निर्देश समुच्चय
 * केडीई सिस्टम गार्ड
 * धागा (कंप्यूटर विज्ञान)
 * पिटाई (कंप्यूटर विज्ञान)
 * पुनः प्रवेश (कम्प्यूटिंग)
 * प्रक्रिया अवस्था
 * प्रक्रिया गणना
 * मुख्य स्मृति
 * सहायक स्मृति
 * कार्यकारी नियंत्रण सॉफ्टवेयर
 * शारेड मेमोरी

बाहरी संबंध

 * Online Resources For Process Information
 * Computer Process Information Database and Forum
 * Process Models with Process Creation & Termination Methods
 * Process Models with Process Creation & Termination Methods