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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

यह भी देखें

 * पृष्ठभूमि प्रक्रिया
 * अपरिपक्व प्रक्रिया
 * बहिर्गमन (सिस्टम कॉल)
 * फोर्क (सिस्टम कॉल)
 * अल्प-भार प्रक्रिया
 * अनाश्रय प्रक्रिया
 * मूल प्रक्रिया
 * प्रक्रिया समूह
 * विलम्ब (सिस्टम कॉल)
 * कार्यकारी निर्देशिका
 * ज़ोंबी प्रक्रिया

अग्रिम पठन

 * 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