2012-06-18 13 views
8

मैं लिनक्स कर्नेल को बदलना चाहता हूं ताकि प्रत्येक बार वर्तमान पीआईडी ​​बदल जाए - यानी, एक नई प्रक्रिया में स्विच किया जाता है - कुछ डायग्नोस्टिक कोड निष्पादित होते हैं (नीचे वर्णित विस्तृत स्पष्टीकरण, यदि उत्सुकता है)। मैंने कुछ खोदने लगा, और ऐसा लगता है कि प्रत्येक बार जब शेड्यूलर एक नई प्रक्रिया चुनता है, तो फ़ंक्शन context_switch() कहा जाता है, जो समझ में आता है (यह केवल sched.c/schedule() के एक सरसरी विश्लेषण से है)।क्या कर्नेल/sched.c/context_switch() प्रत्येक प्रक्रिया में स्विच होने पर हर बार लागू होने की गारंटी है?

समस्या है, लिनक्स अनुसूचक अभी मेरे लिए मूल रूप से काला जादू है, इसलिए मैं अगर है कि इस धारणा सही है जानना चाहते हैं। क्या यह गारंटी है कि, प्रत्येक बार जब CPU पर कुछ समय प्राप्त करने के लिए एक नई प्रक्रिया का चयन किया जाता है, तो context_switch() फ़ंक्शन को कॉल किया जाता है? या कर्नेल स्रोत में अन्य स्थान हैं जहां शेड्यूलिंग को अन्य परिस्थितियों में संभाला जा सकता है? (या क्या मैं पूरी तरह से यह सब गलत समझ रहा हूं?)

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

उत्तर

4

हाँ, आप सही हैं।

schedule()context_switch() पर कॉल करेगा जो एक कार्य से दूसरे में स्विच करने के लिए ज़िम्मेदार है जब नई प्रक्रिया schedule() द्वारा चुनी गई है।

context_switch() मूल रूप से दो काम करता है। यह switch_mm() और switch_to() पर कॉल करता है।

switch_mm() - नई प्रक्रिया के लिए आभासी स्मृति मानचित्रण के लिए स्विच

switch_to() - पिछले प्रक्रिया से नई प्रक्रिया के लिए प्रोसेसर राज्य स्विच (बचाने के लिए/रजिस्टर बहाल, ढेर जानकारी और अन्य वास्तुकला विशिष्ट बातें)

आपके दृष्टिकोण के लिए, मुझे लगता है कि यह ठीक है। कर्नेल के साथ काम करते समय चीजों को अच्छी और साफ रखना महत्वपूर्ण है, और जब तक आप अधिक ज्ञान प्राप्त नहीं करते हैं, इसे अपेक्षाकृत आसान रखने की कोशिश करें।

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