जब भी बूटलोडर ऑपरेटिंग सिस्टम लोड करता है तो संभवतः केवल एक प्रोग्राम प्रवाह सक्रिय होता है, है ना? इसका मतलब यह होगा कि, एक प्रोसेसर में निर्देश सूचक होता है और ईआईपी रजिस्टर पॉइंट्स की स्थिति में पाए गए आदेशों को निष्पादित करता है। किस बिंदु पर और सिस्टम अधिक प्रक्रियाओं और/या धागे का उपयोग कैसे शुरू करता है (कोई उपयोगकर्तालैंड धागे, लेकिन सीपीयू धागे)?निम्न स्तर प्रोग्रामिंग: ओएस कैसे एक नया धागा/प्रक्रिया शुरू करता है?
उत्तर
ओएस बूट करेगा (बीआईओएस और बूटलोडर के बाद) एक विशेष भूमिका में - जैसा कि इसे चलाने के लिए पहला प्रोग्राम सीधे होगा सभी सीपीयू कमांड तक पहुंच।
तो यह सिस्टम के विभिन्न हिस्सों को स्थापित करेगा - जैसे Interrupt Handlers (या इंटरप्ट सेवा रूटीन) स्थापित करना। ऐसा करने के बाद इसमें "शेड्यूलर" बनाने की क्षमता है।
वास्तविक "प्रक्रिया/धागा" हैंडलिंग इस शेड्यूलर द्वारा की जाएगी। यह तय करता है, कौन सा धागा चलाया जाएगा। इसके अलावा यह सभी सक्रिय धागे का प्रबंधन करता है। सीपीयू इन सभी चीजों से अनजान है।
शेड्यूलर का मुख्य-कार्यकारी थ्रेड (या "प्रक्रिया") ए निष्पादित करने का निर्णय लेने के बाद, यह प्रक्रिया डेटा को रजिस्टरों में कॉपी करता है (और रजिस्टरों को हाल ही में चल रहे थ्रेड के इन्फोब्लॉक में संग्रहीत करता है)। यह सीपीयू/टाइमर को एन माइक्रोसेकंड (या अन्य टाइम्यूनिट) में बाधा उत्पन्न करने के लिए बताएगा। फिर यह सीपीयू को गैर-ओएस मोड में "प्रोग्राम" (केवल सीपीयू के बारे में जानता है) चलाने के लिए बताएगा (ताकि यह महत्वपूर्ण डेटा संशोधित न हो या अनुमति के बिना अपने इंटरप्ट हैंडलर पंजीकृत न करे)।
जबकि थ्रेड ए अब निष्पादित कर रहा है, हार्डवेयर टाइमर चलाएगा। एक बार यह वांछित समय-ऑफसेट हिट करने के बाद, यह एक इंटरप्ट का कारण बन जाएगा। हार्डवेयर तब वर्तमान प्रोग्राम के निष्पादन को रोक देगा, और इसके बदले पंजीकृत Interrupt Handler
का आह्वान करेगा। यह हैंडलर शेड्यूलर का एक तरीका होगा (फिर से मुख्य कार्यकारी, सटीक होना)।
यह विधि फिर से पुनर्मूल्यांकन करेगी कि थ्रेड निर्धारित किया जाना चाहिए और इसलिए शेड्यूलिंग जारी है।
पहली चीजों में से एक (मल्टीथ्रेडेड) ओएस शुरू करना है शेड्यूलर जो कई प्रक्रियाओं के प्रबंधन के लिए ज़िम्मेदार है (और इसलिए मल्टीकोर मशीनों पर कई सीपीयू थ्रेड जैसे प्रबंधन भी करता है)।
इस शेड्यूलर द्वारा शुरू की गई पहली प्रक्रिया आमतौर पर "इनिट" प्रक्रिया का कुछ प्रकार है जो बदले में अन्य कार्यक्रमों/प्रक्रियाओं को लोड करने के लिए ज़िम्मेदार है।
सही, बूट प्रक्रिया के दौरान केवल एक निष्पादन धागा है। आम तौर पर यह तब तक होता है जब तक ओएस उस बिंदु पर प्रारंभ नहीं होता है जहां निम्न-स्तरीय मेमोरी प्रबंधन, शेड्यूलर इत्यादि कार्यात्मक होते हैं।
यह बहु-सीपीयू सिस्टम में भी मामला है - एक कोर प्रारंभिक स्टार्टअप को संभालने वाला "मास्टर प्रोसेसर" है जब तक कि अन्य कोर किकस्टार्ट करने के लिए आधारभूत संरचना न हो।
अंत में यह अत्यधिक ओएस-विशिष्ट है; Intel Architecture Software Developer's Manuals में हार्डवेयर चश्मे का विवरण है। (मान लीजिए कि आप इंटेल आर्किटेक्चर के बारे में बात कर रहे हैं; अन्य आर्किटेक्चर जंगली रूप से भिन्न हो सकते हैं।)
आपके स्पष्टीकरण के लिए धन्यवाद। क्या आप मुझे बता सकते हैं कि जब कई स्वतंत्र प्रोसेसर/कोर शामिल होते हैं तो यह तस्वीर कैसे बदलती है? – prinzdezibel
अधिकांश मल्टीकोरों में कम से कम कुछ "मास्टर" प्रोसेसर होते हैं (अन्य उत्तरों देखें) - एल 1 + कैश कुछ केंद्रीय प्रबंधन के बिना काम नहीं करेंगे। शेड्यूलर को प्रत्येक रजिस्टर ऑपरेशन के लिए वांछित प्रोसेसर को संबोधित करना होगा। बाकी सब कुछ वही रहता है (निश्चित अंतराल टाइमर)। –
@prinzdezible: ओएस शेड्यूलर आम तौर पर प्रत्येक सीपीयू कोर पर चलता है जब वर्तमान थ्रेड को बाधित या सिस्टम कॉल करके रोक दिया जाता है। कई कोरों के लिए स्केलेबल होने के लिए यह सभी धागे को नहीं देखेगा, लेकिन केवल उस सीपीयू को दिए गए धागे। यदि यह बहुत व्यस्त है तो यह थ्रेड को अन्य CPUs पर धक्का देगा। यदि यह व्यस्त नहीं है तो यह अन्य CPUs से धागे खींच देगा। प्रत्येक बार समय या कुछ काउंटर द्वारा, शेड्यूलर सभी CPUs पर शेष कार्यों को लोड करेगा (यह धीमा है, इसलिए अक्सर नहीं) –