2012-01-25 6 views
5

क्या एक सिस्टम में एक संदर्भ स्विच होता है जिसके तैयार कतार में केवल एक प्रक्रिया होती है और जो राउंड-रॉबिन शेड्यूलिंग का उपयोग करती है?क्या एक सिस्टम में एक संदर्भ स्विच होता है जिसके तैयार कतार में केवल एक प्रक्रिया होती है और जो राउंड-रॉबिन शेड्यूलिंग का उपयोग करती है?

मान लें कि अकेला प्रक्रिया का वर्तमान सीपीयू विस्फोट राउंड-रॉबिन एल्गोरिदम के एक से अधिक बार-टुकड़ा फैलाता है।

मेरे तर्क है नीचे

के रूप में चरणों में जगह ले सकता है जब एक टाइमर व्यवधान एक विशिष्ट मामले में होता है

  1. इंटरप्ट होता है। कर्नेल मोड
  2. ओएस के लिए स्विच पीसीबी में वर्तमान संदर्भ (बचाने के लिए रजिस्टर, प्रक्रिया राज्य और मौजूदा प्रक्रिया की स्मृति प्रबंधन की जानकारी)
  3. कई वास्तुकला विशेष डेटा और शिक्षा कैश और TLB के निस्तब्धता सहित संचालन, प्रदर्शन बचाता है।
  4. तैयार कतार
  5. में वर्तमान प्रक्रिया रखो उपयोगकर्ता मोड पर है कि इस प्रक्रिया
  6. स्विच की पीसीबी से
  7. लोड संदर्भ निष्पादित करने के लिए नई प्रक्रिया का चयन करें। नई प्रक्रिया

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

क्या यह होता है? या अकेले प्रक्रिया की वर्तमान स्थिति की अनावश्यक बचत को शामिल करने का उचित संदर्भ स्विच करता है और उसी स्थान को बहाल करता है?

यदि बाद में होता है, तो क्या कोई विशेष कारण है?

इस तरह की स्थिति में संदर्भ-स्विचिंग में बिताए गए समय की गणना से संबंधित एक परीक्षा पत्र में एक प्रश्न के कारण यह भ्रम उत्पन्न हुआ। दिए गए उत्तर का तात्पर्य है कि संदर्भ स्विच होते हैं।

मुझे आशा है कि जो लोग कर्नेल कोड में देख चुके हैं, वे इस पर प्रकाश डाल सकेंगे। इस प्रकार stackoverflow पर यह सवाल।

उत्तर

7

लिनक्स कर्नेल से निम्नलिखित कोड आपके संदेह को स्पष्ट करेगा। अलग-अलग समय पर, कर्नेल शेड्यूलर को चलाने के लिए एक नई प्रक्रिया का चयन करने के लिए कॉल करेगा। लेकिन यह पता चला है कि शेड्यूलर को कोई अन्य कार्य नहीं मिला है लेकिन वर्तमान में चल रहा कार्य है। उस स्थिति में शेड्यूलर "संदर्भ स्विच" नहीं करेगा बल्कि कुछ भी नहीं कर सकता है।

उदाहरण के लिए, मैं तुम्हें लिनक्स कर्नेल

......... 
    if (likely(prev != next)) {<-- if next and current are same, then no context switch 
      sched_info_switch(prev, next); 
      perf_event_task_sched_out(prev, next); 

      rq->nr_switches++; 
      rq->curr = next; 
      ++*switch_count; 

      context_switch(rq, prev, next); /* unlocks the rq */ 
      /* 
      * The context switch have flipped the stack from under us 
      * and restored the local variables which were saved when 
      * this task called schedule() in the past. prev == current 
      * is still correct, but it can be moved to another cpu/rq. 
      */ 
      cpu = smp_processor_id(); 
      rq = cpu_rq(cpu); 
    } else { 
    ............ 
+0

से कोड मैं कहना है कि उन सटीक कदम और इसी क्रम में थे मतलब नहीं था दे। मेरा कहना था कि वे संभव कदम थे और यदि तैयार क्यू में कोई अन्य प्रक्रिया नहीं थी तो उन्हें शायद आवश्यकता नहीं होगी। मैं अपने प्रश्न में यह स्पष्ट करने की कोशिश करूंगा। और हाँ, वे एक पाठ्यपुस्तक से हैं। मैं अब ऑपरेटिंग सिस्टम के बारे में सीख रहा हूँ। –

+0

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

+0

मैं आपके उत्तर को इस कारण के लिए स्वीकार करना चाहता हूं कि आपके द्वारा दिखाए गए लिनक्स कोड से स्पष्ट रूप से पता चलता है कि केवल एक प्रक्रिया होने पर एक संदर्भ स्विच नहीं होता है। हालांकि मुझे लगता है कि कोड के ऊपर स्पष्टीकरण कोड द्वारा व्यक्त बिंदु पर स्वाभाविक रूप से नेतृत्व नहीं करता है। यह सवाल के बारे में मेरी स्पष्टीकरण से पहले हुआ था। क्या आप अपना उत्तर (गैर लिनक्स कोड भाग) संपादित कर सकते हैं ताकि मैं आपका उत्तर स्वीकार कर सकूं। मेरे प्रश्न को संपादित करने के लिए कोई सुझाव स्वागत होगा। –

संबंधित मुद्दे