विषय-सूचि
परिचय
जब आप ऑपरेटिंग सिस्टम के सारे कांसेप्ट को देखेंगे तो कई सारे ऐसे टर्म भी मिलेंगे जो संशय पैदा करते हैं क्योंकि वो देखने में तो एक से लगते हैं लेकिन उसके फंक्शन अलग-अलग होते हैं।
यहाँ पर हम चार ऐसे टर्म जिन्हें अक्सर साथ में प्रयोग किया जाता ही, उनके बारे में जानेंगे। वो टर्म्स हैं- मल्टीप्रोग्रामिंग, मल्टीप्रोसेसिंग, मल्टीटास्किंग और मल्टीथ्रेडिंग।
आज के कंप्यूटिंग सिस्टम में कई सारे ऐसे एप्लीकेशन होते हैं जो एक ही समय में कुछ संसाधनों के लियी आपस में प्रतियोगिता करते हैं, जैसे कि CPU.
जैसा कि हमने पहले ही आपको बताया, दूसरे कार्यों के अलावा ऑपरेटिंग सिस्टम इन संसाधनों के इफेक्टिव और efficient एलोकेशन का कार्य भी करता है। वो ऑपरेटिंग सिस्टम module जो संसाधनों के एलोकेशन को हैंडल करता है उसे शेड्यूलर कहते हैं।
OS के टाइप के आधार पर अलग-अलग तरह की शेड्यूलिंग पॉलिसीस का उपयोग किया जाता है।
मल्टीप्रोग्रामिंग (multiprogramming in hindi)
मल्टीप्रोग्रामिंग सिस्टम में मेन मेमोरी के अंदर एक से ज्यादा ऐसे प्रोग्राम लोड हो जाते हैं जो एक्सीक्यूट होने के लिए तैयार होते हैं।
लेकिन उन सब में से एक ही प्रोग्राम अपने इंस्ट्रक्शन को एक्सीक्यूट करने के लिए CPU को लेने में कामयाब होता है। ऐसा इसीलिए क्योंकि एक बार में ज्यादा से ज्यादा एक फंक्शन ही सिस्टम में रन होना चाहिए जबकि बांकी सब अपने मौके का इन्तजार करते रहते हैं।
मल्टीप्रोग्रामिंग का प्रमुख विचार है CPU के समय के प्रयोग को अधिक से अधिक उपयोग में लाना। मान लीजिये कि अभी रन हो रहा प्रोग्राम I/O टास्क परफॉर्म कर रहा है (जिसे पूरा होने के लिए CPU की जरूरत नहीं है)।
तब, ऑपरेटिंग सिस्टम उस प्रोसेस को इंटरप्ट कर सकता है यानी रोक सकता है और मेन मेमोरी के अंदर ऐसे प्रोग्राम को नियंत्रण दे सकता है जो एक्सीक्यूट होने के लिए तैयार हैं (प्रोसेस कॉन्टेक्स्ट स्विचिंग)।
इस तरह से सिस्टम द्वारा I/O टास्क के पूरे होने का इन्तजार करते हुए कोई CPU समय की बर्बादी नहीं हुई और जो प्रोसेस रन हो रहा है वो तबतक एक्सीक्यूट होता रहेगा जब तक ये खुद से CPU को रिलीज़ न कर दे या I/O ऑपरेशन के लिए ब्लाक न कर दे।
ऐसे में मल्टीप्रोग्रामिंग का सबसे बड़ा लक्ष्य होता है कि CPU को तबतक व्यस्त रखे जब तक प्रोसेस को क्सीक्यूट होने के लिए तैयार है। ये ध्यान देने वाली बात है कि इस सिस्टम को सही ढंग से फंक्शन करने के लिए OS एक से ज्यादा प्रोग्राम को मेन मेमोरी के अलग क्षेत्रों में लोड करने में सक्षम होना चाहिए और जरूरी सुरक्षा भी देना चाहिए ताकि किसी एक प्रोसेस को कोई दूसरा प्रोसेस मॉडिफाई या एडिट नहीं कर सके।
एक और समस्या जिसे मल्टीपल प्रोग्राम्स के समय हैंडल करने की जरूरत पड़ती है वो है फ्रेगमेंटेशन जब प्रोग्राम मेन मेमोरी में घ्स्ता है या बहार जाता है तब।
एक और समस्या जिस से पार पाना जरूरी होता है वो है कि बड़े-बड़े प्रोग्राम एक बार में मेमोरी में हो सकता है कि फिट नहीं हों। इसे हल करने के लिए pagination और वर्चुअल मेमोरी का प्रयोग करते हैं।
अब मान लीजिये कि हमारे पास N संख्या में रेडी प्रोसेसर हैं और सब के सब हाइली CPU bound हैं (वो ज्यादातर CPU टास्क को एक्सीक्यूट करते हैं और I/O ऑपरेशन को बहुत कम या ना के बराबर)। सबसे खराब स्थिति में एक प्रोग्राम N-1 प्रोग्राम के एक्सीक्यूट होने का इन्तजार कर सकता है ताकि वो पूरे हों।
मल्टीप्रोसेसिंग (multiprocessing in hindi)
मल्टीप्रोसेसिंग का अर्थ हुआ एक से ज्यादा प्रोसेस या प्रोग्राम को समान समय पर एक्सीक्यूट करना। आपको मल्टीप्रोग्रामिंग और मल्टीटास्किंग के बीच confusion हो सकता है
असल में देखा जाए तो मल्टीप्रोसेसिंग हार्डवेयर के लिए प्रयोग किया जाता है (जैसे CPU यूनिट्स) बजाय सॉफ्टवेर (रन हो रहे प्रोसेस) के। आगर अंदर रह रहे प्रोसेस एक से ज्यादा हार्डवेयर की सुविधा देता है तो इसे मल्टीप्रोसेसिंग कहते हैं।
इस स्कीम के कई सारे प्रकार मौजूद होते हैं जैसे कि एक दी में करोड़ों डाई और एक डाई में करोड़ों पैकेज और एक सिस्टम में बहुत सारे पैकेज। कोई सिस्टम को दोनों ही मल्टीप्रोग्राम किया जा सकता है और ऐसा एक समय पर एक से ज्यादा प्रोग्राम और एक से ज्यादा फिजिकल प्रोसेसर द्वारा मल्टीप्रोसेसिंग कर के किया जा सकता है।
मल्टीटास्किंग (multitasking in hindi)
मल्टीटास्किंग का अर्थ मल्टीप्रोग्रामिंग के समान ही होता है लेकिन एक मामले में ये उस से अलग होता है क्योंकि इसके पास एक से ज्यादा प्रोग्राम, प्रोसेस, टास्क और थ्रेड समान समय पर रन कर रहे होते हैं।
इस टर्म का प्रयोग मॉडर्न ऑपरेटिंग सिस्टम में तब किया जाता है जब एक से ज्यादा टास्क समान प्रोसेसिंग संसाधन को शेयर करते हैं (जैसे कि CPU या मेमोरी)।
एक समय पर जब CPU एक टास्क को रन कर रहा होता है तब बांकी सारे अपनी बारी का इन्तजार कर रहे होते हैं। परल्लेलिस्म का लक्ष्य तब प्राप्त हो जाता है जब CPU को किसी और टास्क को असाइन कर दिया जाए (प्रोसेस या थ्रेड कॉन्टेक्स्ट स्विचिंग।
मल्टीटास्किंग और मल्टीप्रोग्रामिंग के बीच बहुत ही सूक्ष्म अंतर होता है जिसे समझने के लिए आपको दोनों को ही ध्यान से समझना पड़ेगा।
मल्टीटास्किंग ऑपरेटिंग सिस्टम में कोई टास्क पूरा एप्लीकेशन प्रोग्राम नहीं होता लेकिन ये थ्रेड of execution को रेफेर कर सकता है जब एक प्रोसेस को सब टास्कस में बांटा जाये तब। सभी छोटे टास्क CPU को तबतक हाईजैक नहीं करते जब तक कि वो पूरा न हो जाये जैसा कि मल्टीप्रोग्राम्मिंग में होता था। इसमें वो CPU समय का एक अच्छा शेयर पाते हैं जिसे क्वांटम कहा जाता है।
दोनों ही ऑपरेटिंग सिस्टम यानी मल्टीप्रोग्रामिंग और मल्टीटास्किंग एक CPU टाइम शेयरिंग सिस्टम हैं।
लेकिन मल्टीप्रोग्रामिंग में (पुराने ऑपरेटिंग सिस्टम्स में) एक प्रोग्राम तब तक पूरा रन होते रहता है जब तक वो कम्पलीट न हो जाये। वहीं आजकल के OS में टाइम शेयरिंग का अच्छा उपयोग होता है क्योंकि सभी रन हो रहे प्रोसेस CPU टाइम का एक हिस्सा ही लेते हैं।
मल्टीथ्रेडिंग (multi threading in hindi)
अब तक हमने देखा कि कैसे मल्टीप्रोग्रामिंग इस बात कि अनुमति देता है कि मेन मेमोरी में एक से ज्यादा प्रोग्राम रहें और समान समय पर रन करें।
इसके बाद मल्टीटास्किंग जीमे एक से ज्यादा टास्क CPU टाइम को शेयर करते हुए रन करें। उसके बाद मल्टीप्रोसेसिंग जिसमे सिस्टम के पास एक से ज्यादा CPU होते हैं। अब हम जानेंगे कि मल्टीथ्रेडिंग क्या है और इन सबसे कैसे अलग है।
मल्टीथ्रेडिंग एक execution मॉडल है जो एक प्रोसेस को एक से ज्यादा कोड सेगमेंट (थ्रेड्स) को उन प्रोसेस के साथ रन होने की सुविधा प्रदान करता है।
आप थ्रेड को एक चाइल्ड प्रोसेस की तरह भी देख सकते हैं जो पैरेंट प्रोसेस के संसाधनों का प्रयोग करते हैं और स्वतंत्र रूप से एक्सीक्यूट होते हैं।
एक सिंगल प्रोसेस के एक से ज्यादा थ्रेड एक सिंगल CPU सिस्टम में CPU को शेयर कर सकते हैं या किसी समानांतर मल्टीप्रोसेसर सिस्टम में पूरे के पूरे रन हो सकते हैं।
इस लेख से सम्बंधित यदि आपका कोई भी सवाल या सुझाव है, तो आप उसे नीचे कमेंट में लिख सकते हैं।