2012-10-17 46 views
6

जब मैं प्रक्रिया शेड्यूलिंग का अध्ययन कर रहा था तो यह प्रश्न मेरे सिर पर आए।ओएस कैसे संकलित बाइनरी फाइल निष्पादित करता है?

ओएस बाइनरी और संकलित फ़ाइलों के निष्पादन को निष्पादित और नियंत्रित कैसे करता है? मैंने सोचा कि शायद ओएस कुछ स्मृति स्थान पर बाइनरी का एक हिस्सा कॉपी करता है, वहां कूदता है, उस ब्लॉक को निष्पादित करने के बाद वापस आता है और अगले को निष्पादित करता है। लेकिन फिर इसका कोई नियंत्रण नहीं होगा (उदाहरण के लिए कार्यक्रम कहीं भी कूद सकता है और वापस नहीं आ सकता)।

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

+0

क्या आप जानते हैं कि सीपीयू सीपीयू निर्देश कैसे निष्पादित करता है? – sll

+0

हां, मैंने पिछले साल एक सुपर सरल सीपीयू (एक सामान्य प्रयोजन रजिस्ट्री, निर्देश और पीसी और शायद 5 निर्देशों को स्टोर करने के लिए रजिस्ट्री) डिजाइन किया है और वेरिलोग का उपयोग कर विश्वविद्यालय में थोड़ा अधिक जटिल आरआईएससी डिजाइन कर रहा है। – Gediminas

उत्तर

4

यह ठीक है। ऑपरेटिंग सिस्टम, कुछ क्रम में,

  • प्रक्रिया तालिका में एक प्रविष्टि बनाता
  • प्रक्रिया स्मृति
  • अंक प्रक्रिया अनुदेश में
  • भार प्रोग्राम कोड प्रक्रिया के लिए एक आभासी स्मृति अंतरिक्ष बनाता है प्रक्रिया प्रविष्टि बिंदु के लिए सूचक
  • शेड्यूलर में एक प्रविष्टि बनाता है और प्रक्रिया थ्रेड निष्पादन के लिए तैयार करता है।

कार्यक्रम को ब्लॉकों में विभाजित करके समेकन को नियंत्रित नहीं किया जाता है। कार्यों के बीच स्विचिंग इंटरप्ट्स के माध्यम से किया जाता है: एक प्रक्रिया सीपीयू देने से पहले, एक टाइमर स्थापित किया जाता है। जब टाइमर खत्म हो जाता है, तो CPU एक बाधा को पंजीकृत करता है, निर्देश सूचक को स्टैक पर धक्का देता है और ऑपरेटिंग सिस्टम द्वारा परिभाषित इंटरप्ट हैंडलर पर कूदता है। यह हैंडलर CPU स्थिति को स्मृति में संग्रहीत करता है, वर्चुअल मेमोरी टेबल को स्वैप करता है और निष्पादन के लिए तैयार कुछ अन्य थ्रेड को पुनर्स्थापित करता है। वही स्वैप तब होता है जब थ्रेड को किसी अन्य कारण (उपयोगकर्ता/डिस्क/नेटवर्क ...) के लिए प्रतीक्षा करना चाहिए या उपज चाहिए।
http://en.wikipedia.org/wiki/Multitasking#Preemptive_multitasking.2Ftime-sharing

ध्यान दें कि उपज सीपीयू संभव है, लेकिन अविश्वसनीय है प्रक्रिया पर निर्भर (प्रक्रिया उपज नहीं हो सकता है, चल रहा से अन्य प्रक्रियाओं को रोकने)
http://en.wikipedia.org/wiki/Multitasking#Cooperative_multitasking.2Ftime-sharing

सुरक्षा सुरक्षित मोड में सीपीयू स्विचन द्वारा नियंत्रित किया जाता है जहां एप्लिकेशन कोड कुछ निर्देश नहीं चला सकता है (इसलिए यादृच्छिक रूप से कूदना ज्यादातर हानिरहित है)। the link provided by @SkPhilipp

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