प्रीपेप्टिव मल्टी-टास्किंग के सरल दृश्य की कल्पना करें। हमारे पास दो उपयोगकर्ता कार्य हैं, जिनमें से दोनों किसी भी I/O या कर्नेल कॉल करने के बिना हर समय चल रहे हैं। उन दो कार्यों को बहु-कार्यशील ऑपरेटिंग सिस्टम पर चलाने में सक्षम होने के लिए कुछ भी विशेष करने की ज़रूरत नहीं है। कर्नेल, आमतौर पर टाइमर इंटरप्ट पर आधारित होता है, बस यह तय करता है कि यह एक कार्य के लिए एक और रन चलाने के लिए रुकने का समय है। प्रश्न में कार्य पूरी तरह से अनजान है कि कुछ भी हुआ।
हालांकि, अधिकांश कार्य कर्नेल के सिस्को के माध्यम से कभी-कभी अनुरोध करते हैं। जब ऐसा होता है, वही उपयोगकर्ता संदर्भ मौजूद है, लेकिन सीपीयू उस कार्य की ओर से कर्नेल कोड चला रहा है।
पुराना लिनक्स कर्नेल कभी भी कर्नेल कोड चलाने में व्यस्त होने पर किसी कार्य की छूट की अनुमति नहीं देगा। (ध्यान दें कि I/O संचालन हमेशा स्वेच्छा से पुनः शेड्यूल करते हैं। मैं ऐसे मामले के बारे में बात कर रहा हूं जहां कर्नेल कोड में कुछ सीपीयू-गहन ऑपरेशन है जैसे सूची को सॉर्ट करना।)
यदि सिस्टम उस कार्य को को पूर्ववत करने की अनुमति देता है जबकि यह कर्नेल कोड चला रहा है, तब हमारे पास "प्रीपेप्टिव कर्नेल" कहा जाता है। ऐसी प्रणाली अप्रत्याशित देरी से प्रतिरक्षा है जिसे सिस्कोल के दौरान सामना किया जा सकता है, इसलिए यह एम्बेडेड या रीयल-टाइम कार्यों के लिए बेहतर अनुकूल हो सकता है।
उदाहरण के लिए, यदि किसी विशेष सीपीयू पर दो कार्य उपलब्ध हैं, और कोई एक सिस्कोल लेता है जो पूरा करने के लिए 5ms लेता है, और दूसरा एमपी 3 प्लेयर एप्लिकेशन है जिसे प्रत्येक 2ms ऑडियो पाइप को खिलाने की आवश्यकता होती है, तो आप सुन सकते हैं ऑडियो stuttering।
प्रमोशन के खिलाफ तर्क यह है कि कार्य कर्नेल में जो कर्नेल कोड कहा जा सकता है, वह प्रीमिशन से बचने में सक्षम होना चाहिए - उदाहरण के लिए बहुत खराब डिवाइस ड्राइवर कोड है, अगर यह हमेशा सक्षम हो तो बेहतर हो सकता है उस प्रोसेसर पर कुछ अन्य कार्य चलाने की अनुमति देने से पहले एक ऑपरेशन पूरा करें। (बहु-प्रोसेसर सिस्टम इन दिनों अपवाद के बजाय नियम के साथ, सभी कर्नेल कोड पुनः प्रवेशकर्ता होना चाहिए, ताकि तर्क आज के रूप में प्रासंगिक न हो।) इसके अतिरिक्त, यदि एक ही लक्ष्य को खराब के साथ सिस्कोल में सुधार करके पूरा किया जा सकता है विलंबता, शायद छूट अनावश्यक है।
एक समझौता CONFIG_PREEMPT_VOLUNTARY है, जो कर्नेल के अंदर कुछ बिंदुओं पर कार्य-स्विच की अनुमति देता है, लेकिन हर जगह नहीं। यदि वहां केवल कुछ ही जगहें हैं जहां कर्नेल कोड कम हो सकता है, जटिलता को प्रबंधित करने के दौरान यह विलंबता को कम करने का एक सस्ता तरीका है।
लॉकिंग के विवरण का स्तर है कि क्या गिरी रिक्तिपूर्व है के साथ कोई संबंध नहीं है। जबकि लिनक्स लगातार बेहतर स्केलेबिलिटी और फाइनर-ग्रेनेड लॉकिंग की ओर बढ़ रहा है, जिस स्थिति के बारे में आप बात कर रहे हैं वह दस साल तक अस्तित्व में नहीं है। –