मल्टीटास्किंग ऑपरेटिंग सिस्टम के दो मुख्य प्रकार हैं, प्रीमेप्टिव और कोऑपरेटिव। दोनों सिस्टम में कई कार्यों को परिभाषित करने की अनुमति देते हैं, अंतर यह है कि कार्य स्विचिंग कैसे काम करता है। बेशक एक ही कोर-प्रोसेसर के साथ केवल एक कार्य वास्तव में एक समय में चल रहा है।
दोनों प्रकार के मल्टीटास्किंग ओएस को प्रत्येक कार्य के लिए एक अलग स्टैक की आवश्यकता होती है। तो यह दो बातों का तात्पर्य करता है: पहला, कि प्रोसेसर रैम में कहीं भी स्टैक्स को रखने की अनुमति देता है और इसलिए स्टैक पॉइंटर (एसपी) को चारों ओर ले जाने के निर्देश हैं - यानी कोई विशेष उद्देश्य हार्डवेयर स्टैक नहीं है जैसे कि लो-एंड पर है पीआईसी की। यह PIC10, 12 और 16 श्रृंखला को छोड़ देता है।
आप लगभग पूरी तरह से सी में एक ओएस लिख सकते हैं, लेकिन टास्क स्विचर, जहां एसपी को घूमना पड़ता है, विधानसभा में होना चाहिए। कई बार मैंने PIC24, PIC32, 8051 और 80x86 के लिए टास्क स्विचर्स लिखे हैं। प्रोसेसर के आर्किटेक्चर के आधार पर हिम्मत बिल्कुल अलग है।
दूसरी आवश्यकता यह है कि कई ढेरों के लिए पर्याप्त रैम है। आमतौर पर एक स्टैक के लिए कम से कम कुछ सौ बाइट्स चाहिए; लेकिन प्रति कार्य सिर्फ 128 बाइट्स पर, आठ स्टैक के लिए 1K बाइट्स RAM की आवश्यकता होती है - आपको प्रत्येक कार्य के लिए समान आकार स्टैक आवंटित करने की आवश्यकता नहीं है। याद रखें कि आपको वर्तमान कार्य को संभालने के लिए पर्याप्त स्टैक की आवश्यकता है, और इसके नेस्टेड सबरूटीन्स के लिए किसी भी कॉल की आवश्यकता है, लेकिन एक बाधा कॉल के लिए भी स्टैक स्पेस है क्योंकि आप कभी नहीं जानते हैं कि कब क्या होने वाला है।
यह निर्धारित करने के लिए काफी सरल तरीके हैं कि आप प्रत्येक कार्य के लिए कितना स्टैक उपयोग कर रहे हैं; उदाहरण के लिए आप किसी विशेष मान के सभी स्टैक को इनिशियलाइज़ कर सकते हैं, 0x55 कह सकते हैं, और थोड़ी देर के लिए सिस्टम को चला सकते हैं और फिर मेमोरी को रोक और जांच सकते हैं।
आप यह नहीं कहते कि आप किस प्रकार के पीआईसी का उपयोग करना चाहते हैं। अधिकांश PIC24 और PIC32 में मल्टीटास्किंग OS चलाने के लिए बहुत जगह होगी; PIC18 (रैम में केवल 8-बिट PIC में स्टैक होने के लिए) की अधिकतम रैम 4K है। इतना सुंदर iffy है।
सहकारी मल्टीटास्किंग (दो का सरल) के साथ, कार्य स्विचिंग केवल तभी किया जाता है जब कार्य ओएस पर अपना नियंत्रण वापस देता है। यह तब होता है जब भी कार्य को कुछ फ़ंक्शन करने के लिए ओएस रूटीन को कॉल करने की आवश्यकता होती है, जिसके लिए वह प्रतीक्षा करेगा, जैसे कि I / O अनुरोध या टाइमर कॉल। यह ओएस को स्टैक स्विच करने के लिए आसान बनाता है, क्योंकि यह सभी रजिस्टरों और राज्य की जानकारी को बचाने के लिए आवश्यक नहीं है, एसपी को केवल किसी अन्य कार्य पर स्विच किया जा सकता है (यदि कोई अन्य कार्य चलाने के लिए तैयार नहीं हैं, तो एक निष्क्रिय स्टैक है) नियंत्रण दिया गया)। यदि वर्तमान कार्य के लिए OS कॉल करने की आवश्यकता नहीं है, लेकिन कुछ समय से चल रहा है, तो सिस्टम को उत्तरदायी बनाए रखने के लिए इसे स्वेच्छा से नियंत्रण छोड़ने की आवश्यकता है।
सहकारी मल्टीटास्किंग के साथ समस्या यह है कि यदि कार्य कभी नियंत्रण नहीं छोड़ता है, तो यह सिस्टम को हॉग कर सकता है। केवल यह और किसी भी रुकावट दिनचर्या जो नियंत्रण दिए जाने के लिए होती है, चल सकती है, इसलिए OS लॉक हो जाएगा। यह इन प्रणालियों का "सहकारी" पहलू है। यदि एक वॉचडॉग टाइमर लागू किया जाता है जो केवल तब होता है जब कोई कार्य स्विच किया जाता है, तो इन गलत कार्यों को पकड़ना संभव है।
विंडोज 3.1 और इससे पहले सहकारी ऑपरेटिव सिस्टम थे, जो आंशिक रूप से यही था कि उनका प्रदर्शन इतना बढ़िया क्यों नहीं था।
प्रीमेप्टिव मल्टीटास्किंग को लागू करना अधिक कठिन है। यहां, मैन्युअल रूप से नियंत्रण छोड़ने के लिए कार्यों की आवश्यकता नहीं होती है, लेकिन इसके बजाय प्रत्येक कार्य को चलाने के लिए अधिकतम समय दिया जा सकता है (जैसे 10 एमएस), और फिर एक होने पर एक कार्य स्विच अगले रन करने योग्य कार्य के लिए किया जाता है। इसके लिए मनमाने ढंग से किसी कार्य को रोकना, राज्य की सभी जानकारियों को सहेजना और फिर एसपी को किसी अन्य कार्य में लगाना और इसे शुरू करना है। यह कार्य स्विचर को अधिक जटिल बनाता है, इसके लिए अधिक स्टैक की आवश्यकता होती है, और सिस्टम को थोड़ा धीमा कर देता है।
सहकारी और प्रीमेप्टिव मल्टीटास्किंग दोनों के लिए, किसी भी समय व्यवधान उत्पन्न हो सकता है जो अस्थायी रूप से चल रहे कार्य को पूर्व निर्धारित करेगा।
जैसा कि सुपरकैट एक टिप्पणी में बताता है, एक लाभ सहकारी मल्टीटास्किंग है जो संसाधनों को साझा करना आसान है (जैसे बहु-चैनल एडीसी जैसे हार्डवेयर या लिंक की गई सूची को संशोधित करने जैसा सॉफ़्टवेयर)। कभी-कभी दो कार्य एक ही समय में एक ही संसाधन तक पहुँच चाहते हैं। प्रीमेप्टिव शेड्यूलिंग के साथ, ओएस के लिए एक संसाधन का उपयोग करके एक कार्य के बीच में कार्यों को स्विच करना संभव होगा। तो दूसरे कार्य को उसी संसाधन में आने और उस तक पहुंचने से रोकने के लिए ताले आवश्यक हैं। सहकारी मल्टीटास्किंग के साथ, यह आवश्यक नहीं है क्योंकि कार्य को नियंत्रित करता है जब यह ओएस पर स्वयं वापस जारी करेगा।