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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

इतिहास
1960 के दशक के प्रारंभ तक, कंप्यूटर नियंत्रण सॉफ़्टवेयर निगरानी नियंत्रण सॉफ्टवेयर से विकसित हो गया था, उदाहरण के लिए IBM 7090/94 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