मल्टीटास्किंग कैसे काम करता है


15

मैं एक ऑपरेटिंग सिस्टम के आंतरिक कामकाज के बारे में पूरी तरह से परिचित हूं, लेकिन मैं कई कार्यों के अनुमानित व्यवहार को कम या ज्यादा कर सकता हूं। एक बात जो मैं समझ नहीं पा रहा हूं, हालांकि, मल्टीटास्किंग है।

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

कहो कि ऑपरेटिंग सिस्टम मेरा प्रोग्राम शुरू करना चाहता है। मशीन कोड रैम में कहीं लोड होता है, एक निश्चित पते पर शुरू होता है। मुझे लगता है कि उस पते पर एक छलांग लगाई जानी चाहिए, जिससे मेरा कोड निष्पादित हो सके। लेकिन इस तरह से, जब तक मैं वापस कूद नहीं जाता, ओएस नियंत्रण हासिल नहीं कर सकता।

मूल रूप से, मैं इस काम को बनाने के सिर्फ दो तरीकों की कल्पना कर सकता हूं, लेकिन न तो वास्तव में उपयुक्त लगता है:

  • ऑपरेटिंग सिस्टम उन मशीन निर्देशों को पढ़ सकता है जिन्हें मैं सीधे निष्पादित करने के बजाय उन्हें प्रदर्शन और अनुकरण करना चाहता हूं। मैं जानबूझकर अस्पष्ट हूं, क्योंकि मुझे नहीं पता कि यह कैसे काम करेगा, लेकिन ऐसा लगता है कि यह कार्यक्रम को काफी धीमा कर देगा।

  • वैकल्पिक रूप से, ऑपरेटिंग सिस्टम तब तक इंतजार कर सकता है जब तक मैं सिस्टम कॉल नहीं करता। उस क्षण में यह नियंत्रण हासिल कर लेता है और जांच कर सकता है कि मैं कितने समय से चल रहा हूं और इसकी टाइमिंग सामान कर रहा हूं। यह काम कर सकता है, लेकिन यह अविश्वसनीय लगता है, क्योंकि मैं एक लंबी गणना कर सकता था जिसमें सिस्टम कॉल शामिल नहीं है और थोड़ी देर के लिए सब कुछ लटका हुआ है।

इसलिए, ऐसा लगता है कि न तो तंत्र बहुत अच्छा काम करेगा। मल्टीटास्किंग वास्तव में कैसा प्रदर्शन किया जाता है?


हालांकि आपका अनुमान बिल्कुल सही नहीं है, आप जिस समस्या को इंगित करते हैं, ठीक है, हाँ: "मैं एक लंबी गणना कर सकता था जिसमें सिस्टम कॉल शामिल नहीं है और थोड़ी देर के लिए सब कुछ लटका देता है।"
झकझोर

देखने के लिए एक कीवर्ड:interrupt
लॉजिक

हां, लेकिन बाधा कौन शुरू कर रहा है? यदि मेरा कोड निष्पादित हो रहा है, तो OS के पास एक INTनिर्देश निष्पादित करने का कोई तरीका नहीं है । मेरे लिए अभी भी कुछ रहस्यमय है
एंड्रिया

@ और, हार्पर घड़ी एक बाधा को ट्रिगर कर रही है। बस के रूप में सरल है। en.wikipedia.org/wiki/Scheduling_%28computing%29
तर्क

ठीक है, अब मैं देख रहा हूं। इसलिए, अगर मैं सही तरीके से समझूं, तो यह एक हार्डवेयर-आधारित विशेषता है, न कि कुछ जो कि ओएस में लागू हो सकता है।
एंड्रिया

जवाबों:


21

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

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

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


5

यह सिस्टम से सिस्टम में भिन्न होता है।

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

हार्डवेयर व्यवधान (डिस्क ड्राइव डीएमए पूर्णता, सीरियल पोर्ट बाधित होता है, आपके पास क्या है) के कारण रुकावट दिनचर्या चलती है। ये रुकावट रूटीन कार्य के अधिसूचित कार्यों को बदले में कर सकते हैं जब कार्य अगले रन करता है।

नॉनपेरिमेंटिव मल्टीटास्किंग सिस्टम में, एक रुकावट की घटना या गैर-घटना का प्रभाव नहीं पड़ता है कि रुकावट के रूटीन खत्म होने के बाद कौन सा कार्य चल रहा है।

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

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


अगर चेतावनी के बिना प्रोसेसर को आपसे दूर ले जाया जाए तो क्या बुरा हो सकता है? मुझे लगता है कि आपको रजिस्टरों में समान मूल्यों के साथ प्रोसेसर का फिर से नियंत्रण मिलेगा। यह कैसे सिर्फ अपनी गणना रखने से अलग है?
एंड्रिया

@Andrea: म्यूचुअल एक्सक्लूजन और क्रिटिकल सेक्शन सभी महत्वपूर्ण समय पर प्रोसेसर को नहीं खोते हैं। यदि आपकी प्रक्रिया में कुछ लॉक है, और आप प्रोसेसर को खो देते हैं, तो कुछ तब तक लॉक रहता है जब तक आपको प्रोसेसर दोबारा नहीं मिलता। इसके कारण समस्या हो सकती है।
जॉन आर। स्ट्रॉहम

@ और फिर आपको प्रोसेसर पर फिर से नियंत्रण मिलेगा, और कुछ अन्य प्रक्रिया आपके द्वारा उपयोग की जाने वाली मेमोरी से फ़िड हो सकती है।
user253751

4

CPU को बाधित करने के लिए कंप्यूटर हार्डवेयर द्वारा टाइमर इंटरप्ट उत्पन्न किया जा सकता है। इस तरह, ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाने वाले शेड्यूलिंग एल्गोरिदम के आधार पर, ओएस यह तय कर सकता है कि अपने वर्तमान कार्यक्रम या संदर्भ स्विच को जारी रखने के लिए किसी अन्य को निष्पादित करना जारी रखना है या नहीं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.