2012-11-01 9 views
11

मैंने इसे सिल्बर्सचैट्स से "ऑपरेटिंग सिस्टम अवधारणाओं" में पढ़ा है, पी। 18:मोड बिट कहां है?

थोड़ा, कहा जाता मोड बिट, कंप्यूटर के हार्डवेयर में जोड़ा जाता है वर्तमान मोड से संकेत मिलता है: कर्नेल (0) या उपयोगकर्ता (1)। मोड बिट के साथ, हम ऑपरेटिंग सिस्टम की ओर से पर निष्पादित किए गए कार्य और उपयोगकर्ता की ओर से निष्पादित किए गए कार्य के बीच अंतर करने में सक्षम हैं।

मोड बिट कहाँ संग्रहीत किया जाता है?

(क्या यह सीपीयू में एक रजिस्टर है? क्या आप मोड बिट पढ़ सकते हैं? जहां तक ​​मैं इसे समझता हूं, सीपीयू को मोड बिट को पढ़ने में सक्षम होना चाहिए। यह कैसे पता चलता है कि कौन सा प्रोग्राम मोड बिट हो जाता है 0 ? विशेष एड्रेस वाले प्रोग्राम मोड बिट 0 प्राप्त करते हैं? मोड बिट सेट/यह कैसे सेट किया जाता है?)

+1

ऑपरेटिंग सिस्टम इसे सेट करता है जब यह संदर्भ-स्विचिंग –

उत्तर

5

यह एक सीपीयू रजिस्टर है। यह केवल तभी सुलभ है जब आप पहले से ही कर्नेल मोड में हैं।

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

3

इन दिनों इसे पर्यवेक्षक मोड या सुरक्षा ring जैसे अन्य नाम दिए गए हैं।

13

कृपया ध्यान दें कि आपका प्रश्न सीपीयू के इष्टतम पर निर्भर करता है; हालांकि यह असामान्य है कि आप कुछ प्रोसेसर में आ सकते हैं जहां उपयोगकर्ता-स्तर/कर्नेल-स्तर की यह अवधारणा भी मौजूद नहीं है।

सीएस रजिस्टर एक और महत्वपूर्ण कार्य है: यह एक 2-बिट क्षेत्र है कि CPU के वर्तमान विशेषाधिकार स्तर (सीपीएल) निर्दिष्ट भी शामिल है। मान 0 उच्चतम विशेषाधिकार स्तर को दर्शाता है, जबकि मान 3 को निम्नतम दर्शाता है। लिनक्स केवल स्तर 0 और 3 का उपयोग करता है, जो क्रमश: कर्नेल मोड और उपयोगकर्ता मोड कहा जाता है।

(से "लिनक्स कर्नेल 3E को समझना" लिया, खंड 2.2.1)
यह भी ध्यान रखें, इस सीपीयू पर निर्भर करता है के रूप में आप स्पष्ट रूप से देख सकते हैं और यह लेकिन अवधारणा एक से दूसरे बदल देंगे, आमतौर पर, रखता है।


इसे कौन सेट करता है? आम तौर पर, कर्नेल/सीपीयू और उपयोगकर्ता-प्रक्रिया इसे बदल नहीं सकती है लेकिन मुझे यहां कुछ समझाएं।

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

इस संदर्भ में शेल इस संदर्भ में अपने सभी निर्देशों को निष्पादित करना जारी रखेगा, अगर प्रक्रिया में कुछ विशेषाधिकार प्राप्त निर्देश हैं, तो cpu इसे लाएगा और इसे निष्पादित नहीं करेगा; यह एक अपवाद (हार्डवेयर अपवाद) देगा जो कर्नेल को किसी विशेषाधिकार प्राप्त निर्देश को निष्पादित करने का प्रयास करता है और यहां कर्नेल कोड नौकरी को संभालता है (सीपीयू सीएस को कर्नेल मोड में सेट करता है और इस प्रकार की त्रुटियों को संभालने के लिए कुछ ज्ञात स्थान पर कूदता है ।? (शायद प्रक्रिया है, शायद कुछ और ही समाप्त)

तो एक प्रक्रिया कुछ विशेषाधिकार प्राप्त उदाहरण के लिए एक निश्चित डिवाइस से बात कर सकते हैं यहाँ प्रणाली आता कॉल; गिरी आप के लिए यह काम करेगा

निम्नलिखित क्या होता है:
आप कुछ रजिस्टरों में वही सेट करते हैं जो आप किसी निश्चित स्थान पर चाहते हैं (उदाहरण के लिए आप सेट करते हैं कि आप फ़ाइल तक पहुंचना चाहते हैं, फ़ाइल स्थान x है, आप पढ़ने के लिए एक्सेस कर रहे हैं आदि) ई कर्नेल दस्तावेज आपको इसके बारे में बताने देगा) और फिर (x86 पर) आप int0x80 निर्देश पर कॉल करेंगे।

यह सीपीयू में बाधा डालता है, आपके काम को रोकता है, मोड को कर्नेल मोड में सेट करता है, आईपी रजिस्टर को कुछ ज्ञात स्थान पर कूदता है जिसमें कोड होता है जो फ़ाइल-आईओ अनुरोधों को प्रस्तुत करता है और वहां से चलता है।
एक बार आपका डेटा तैयार हो जाने पर, कर्नेल इस डेटा को उस स्थान पर सेट करेगा जहां आप एक्सेस कर सकते हैं (मेमोरी लोकेशन, रजिस्टर; यह सीपीयू/कर्नेल/जो आपने अनुरोध किया है) पर निर्भर करता है, सीएस फ्लैग को उपयोगकर्ता-मोड और कूदता है int 0x80 निर्देश के बगल में अपने निर्देश पर वापस जाएं।

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

+0

करता है क्योंकि आप कह रहे हैं कि यह एक ओवरम्प्लिफिकेशन है, क्या आप मुझे विषय को गहराई से समझने के लिए कुछ ट्यूटोरियल, पुस्तक या सामग्री पर रीडायरेक्ट कर सकते हैं? धन्यवाद! –

+2

@ सैमब्रन्स: एक पुस्तक के लिए, मैं दृढ़ता से अनुशंसा करता हूं: "कंप्यूटर सिस्टम: एक प्रोग्रामर का परिप्रेक्ष्य" और मैं इसे और अधिक ओएस जानकारी (और अधिक गहराई) के लिए भी जांचने की सिफारिश करता हूं: http: //wiki.osdev। संगठन/मुख्य पृष्ठ। – Fingolfin

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