2011-01-24 11 views
15

मैंने हाल ही में अपना ओएस कोर्स शुरू किया है। जहां तक ​​मुझे पता है कि प्रेषक का काम वर्तमान प्रक्रिया के संदर्भ को सहेजना है और आगे चलने के लिए प्रक्रिया के संदर्भ को लोड करना है। लेकिन यह कैसे करता है? जब एक प्रक्रिया को छूट दी जाती है तो जैसे ही प्रेषक लोड किया जाएगा और निष्पादित किया जाएगा (क्योंकि यह एक कार्यक्रम भी है) रजिस्टरों में पिछली प्रक्रिया का संदर्भ, पीएसडब्लू आदि खो जाएगा। खुद को लोड करने से पहले संदर्भ को कैसे सहेजने जा रहा है?प्रेषक कैसे काम करता है?

+0

इसे superuser.com में स्थानांतरित नहीं किया जाना चाहिए? –

+6

djechelon: नहीं, मुझे ऐसा नहीं लगता है। यह ओएस शेड्यूलर की आंतरिक कार्यप्रणाली के बारे में है, वास्तव में ओएस के उपयोग के बारे में नहीं। –

उत्तर

19

सरल उत्तर यह है कि आधुनिक प्रोसेसर रजिस्ट्रार के कई बैंकों के लिए आर्किटेक्चरल एक्सटेंशन प्रदान करते हैं जिन्हें हार्डवेयर में बदला जा सकता है, इसलिए एक्स कार्यों तक रजिस्टरों का पूरा सेट बनाए रखना पड़ता है।

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

  1. कार्यक्रम वर्तमान संदर्भ प्रोसेसर पर चल रहा है है कि:

    यहाँ डिस्पैचर कॉल के दौरान पर चला जाता है की एक सरल विवरण पर एक प्रयास है। रजिस्टरों, कार्यक्रम काउंटर, झंडे, ढेर आधार, आदि इस कार्यक्रम के लिए सभी उपयुक्त हैं; एक ऑपरेटिंग सिस्टम-मूल "आरक्षित रजिस्टर" या कुछ ऐसे के संभावित अपवाद के साथ, कार्यक्रम के बारे में कुछ भी प्रेषक के बारे में कुछ भी नहीं जानता है।

  2. प्रेषक फ़ंक्शन के लिए समयबद्ध बाधा ट्रिगर की गई है। इस बिंदु पर (केवल वेनिला आर्किटेक्चर केस) में होने वाली एकमात्र चीज यह है कि प्रोग्राम काउंटर बीओओएस इंटरप्ट में जो भी पीसी पता है, उसे तुरंत कूदता है। यह प्रेषक के "प्रेषण" subroutine निष्पादन शुरू होता है; बाकी सब कुछ छूटा नहीं गया है, इसलिए प्रेषक पहले से निष्पादित कार्यक्रम के रजिस्टरों, ढेर, आदि को देखता है।
  3. प्रेषक (सभी कार्यक्रमों की तरह) में वर्तमान रजिस्टर सेट पर संचालित निर्देशों का एक सेट है। ये निर्देश इस तरह से लिखे गए हैं कि वे जानते हैं कि पहले निष्पादित आवेदन ने अपने सभी राज्यों को पीछे छोड़ दिया है। प्रेषक में पहले कुछ निर्देश इस स्थिति को स्मृति में कहीं भी संग्रहीत करेंगे।
  4. प्रेषक निर्धारित करता है कि अगला प्रोग्राम सीपीयू होना चाहिए, इसके पहले से संग्रहीत राज्य लेता है और इसके साथ रजिस्टरों को भरता है।
  5. प्रेषक उस कार्य में सूचीबद्ध अनुसार उचित पीसी काउंटर पर कूदता है जिसका अब सीपीयू पर स्थापित पूर्ण संदर्भ है।

सारांश में सरलीकृत करने के लिए (ओवर); प्रेषक को रजिस्टरों की आवश्यकता नहीं होती है, यह सब मौजूदा सीपीयू स्थिति को पूर्व निर्धारित स्मृति स्थान पर लिखता है, एक पूर्व निर्धारित स्मृति स्थान से दूसरी प्रक्रियाओं 'cpu स्थिति को लोड करता है, और जहां उस प्रक्रिया को छोड़ दिया जाता है वहां कूदता है।

क्या इससे कोई स्पष्ट हो जाता है?

+0

"जब किसी इंटरप्ट द्वारा ट्रिगर किया जाता है, तो उस प्रोग्राम का पूरा रजिस्टर सेट प्राप्त होता है जो बाधा के समय चल रहा था" ... क्या आपका मतलब है कि कुछ प्रकार के हार्डवेयर समर्थन हैं जो इस जानकारी को भेजते हैं और प्रेषक के पास कोड नहीं है स्थानांतरण रजिस्टर मूल्य (जैसे mov निर्देश ... आदि)? – Terminal

+0

नहीं। मुझे अतिरिक्त विवरण और स्पष्टता के लिए अपना उत्तर संपादित करने दें। –

+0

हाँ निश्चित रूप से !!! वह एक अच्छा स्पष्टीकरण था। अब मैं यह भी प्राप्त कर रहा हूं कि कौन सा पक्सडीब्लो व्यक्त करना चाहता है .. :) – Terminal

1

यह आमतौर पर इस तरह से लोड नहीं होता है कि आप वर्तमान प्रक्रिया पर जानकारी खो देते हैं।

अक्सर, यह एक प्रक्रिया है जो वर्तमान प्रक्रिया के संदर्भ में होती है।

तो प्रेषक (या शेड्यूलर) अगली प्रक्रिया के लिए उस जानकारी को लोड करने से पहले किसी भी प्रकार के कार्य नियंत्रण ब्लॉक में सभी प्रासंगिक जानकारी को सहेज सकता है।

इसमें पंजीकरण सामग्री, स्टैक पॉइंटर और अन्य शामिल हैं।

यह ध्यान देने योग्य है कि अगली प्रक्रिया के संदर्भ में प्रेषक में होने की स्थिति स्वयं को बाधित करती है ताकि जब यह बाधा से वापस आती है, तो यह पूरी तरह से अलग प्रक्रिया है।

+0

"तो प्रेषक (या शेड्यूलर) अगली प्रक्रिया के लिए उस जानकारी को लोड करने से पहले किसी भी प्रकार के कार्य नियंत्रण ब्लॉक में सभी प्रासंगिक जानकारी को सहेज सकता है ..." जो मुझे संदेह है .... सभी जानकारी को सहेजने के लिए, इसके पीसी आदि मूल्यों को लोड किया जाना है। फिर पिछले मूल्यों को कौन स्टोर करता है? – Terminal

+0

@ नीओ, लिनक्स को एक उदाहरण के रूप में लें। हमेशा कम से कम एक प्रक्रिया चल रही है जो दूसरों को प्रत्यक्ष या अप्रत्यक्ष रूप से फंसाएगी। ओएस शुरुआत में चीजों को सेट करता है ताकि स्विचिंग काम करे। जैसे-जैसे प्रक्रियाएं शुरू हो जाती हैं और रुक जाती हैं, उन्हें यह सुनिश्चित करने के लिए श्रृंखला में जोड़ा जाता है कि शेड्यूलर उनके लिए ठीक काम करेगा। – paxdiablo

+0

धन्यवाद..यह करो। मार्क की व्याख्या मुझे इसके बारे में जानकारी देती है। – Terminal

0

डिस्पैचर मॉड्यूल शॉर्ट टर्म शेड्यूलर द्वारा चुने गए प्रक्रिया में सीपीयू का नियंत्रण देता है; इस शामिल है: स्विचिंग संदर्भ, स्विचिंग उपयोगकर्ता मोड पर, उपयोगकर्ता कार्यक्रम में उचित स्थान पर कूद कि कार्यक्रम

0

ऑपरेटिंग सिस्टम के प्रमुख जिम्मेदारी प्रक्रियाओं के निष्पादन नियंत्रित कर रहा है पुनः आरंभ करने की। इसमें निष्पादन के लिए पैटर्न निर्धारित करना और प्रक्रियाओं को संसाधन आवंटित करना शामिल है।

एक प्रक्रिया दो राज्यों में से एक में हो सकता है:

  1. चल रहा है या
  2. ओएस एक नई प्रक्रिया बनाता है

नहीं चल रहा है, इसके लिए एक प्रक्रिया नियंत्रण ब्लॉक बनाता है संसाधित करता है और उस प्रणाली को सिस्टम में नहीं चल रहा है जो चल रहा है। प्रक्रिया मौजूद है ओएस को ज्ञात है और निष्पादित करने का अवसर इंतजार कर रहा है।

समय-समय पर, वर्तमान में चल रही प्रक्रियाओं में बाधा डाली जाएगी और ओएस का प्रेषक भाग चलाने के लिए कुछ अन्य प्रक्रियाओं का चयन करेगा।

प्रक्रिया के दौरान संसाधनों से रहित होने पर निष्पादन के दौरान, यह अवरुद्ध हो जाता है। उन संसाधनों को प्रदान किया गया है, यह तैयार राज्य में और फिर चलने वाले राज्य में प्रवेश करता है। तैयार करने के लिए तैयार राज्य से यह संक्रमण प्रेषक द्वारा किया जाता है। प्रेषक प्रक्रिया भेजता है।

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