मैं लिनक्स कर्नेल के बारे में सीख रहा हूं लेकिन मुझे समझ में नहीं आता कि उपयोगकर्ता मोड से लिनक्स में कर्नेल मोड में कैसे स्विच करें। यह कैसे कार्य करता है? क्या आप मुझे कुछ सलाह दे सकते हैं या मुझे इसके बारे में कुछ किताब या इसके बारे में कुछ किताब देने के लिए कुछ लिंक दे सकते हैं? बहुत बहुत धन्यवाद!उपयोगकर्ता मोड से कर्नेल मोड में कैसे स्विच करें?
उत्तर
एकमात्र तरीका एक उपयोगकर्ता अंतरिक्ष अनुप्रयोग स्पष्ट रूप से एक स्विच सामान्य ऑपरेशन के दौरान मोड कर्नेल आरंभ कर सकते हैं एक सिस्टम कॉल जैसे open, read, write आदि
जब भी कोई उपयोगकर्ता आवेदन इन सिस्टम कॉल एपीआई कॉल करके है उपयुक्त पैरामीटर के साथ, एक सॉफ्टवेयर इंटरप्ट/अपवाद (एसडब्ल्यूआई) ट्रिगर किया जाता है।
इस एसडब्ल्यूआई के परिणामस्वरूप, कोड निष्पादन का नियंत्रण उपयोगकर्ता अनुप्रयोग से ओएस द्वारा प्रदान की गई इंटरप्ट वेक्टर टेबल [आईवीटी] में एक पूर्वनिर्धारित स्थान पर कूदता है।
इस आईवीटी में एसडब्ल्यूआई अपवाद हैंडलर रूटीन के लिए एक एड्रेस है, जो उपयोगकर्ता अनुप्रयोग को कर्नेल मोड में स्विच करने के लिए आवश्यक सभी आवश्यक चरणों को निष्पादित करता है और उपयोगकर्ता प्रक्रिया की ओर से कर्नेल निर्देशों को निष्पादित करना प्रारंभ करता है।
काफी नहीं। X86 पर उपयोगकर्ता मोड में उत्पन्न कोई अपवाद कर्नेल मोड में ओएस में उपयुक्त अपवाद हैंडलर पर नियंत्रण स्थानांतरित करेगा। –
सच है। जैसे ही मैंने अपना जवाब पोस्ट किया, मैं इसे संपादित करना चाहता था कि यह उस मामले में है जब उपयोगकर्ता ऐप स्पष्ट रूप से कर्नेल मोड पर स्विच करना चाहता है। हालांकि, मैं नेटवर्क मुद्दों के कारण ऐसा करने के लिए संघर्ष किया। इसे प्रतिबिंबित करने के लिए इसे अभी संपादित करें। –
@ अमरनाथरवन्ना एसएसआई की सेवा करते समय ओएस को पता है कि यह वास्तव में कर्नेल मोड में स्विच हो गया है? क्या कोई विशिष्ट हार्डवेयर रजिस्टर/बिट है जो पर्यवेक्षक (रिंग 0)/उपयोगकर्ता (रिंग 3) होने के लिए मोड का ट्रैक रखता है और एसडब्ल्यूआई पर अपडेट किया जाता है? मूल रूप से हार्डवेयर स्तर पर उपयोगकर्ता को कर्नेल मोड में स्विच करने का दावा करता है। – Shyam
मैं बस इसके माध्यम से पढ़ता हूं, और यह एक बहुत अच्छा संसाधन है। यह उपयोगकर्ता मोड और कर्नेल मोड बताता है, परिवर्तन क्यों होते हैं, वे कितने महंगे होते हैं, और कुछ रोचक संबंधित पढ़ने देते हैं।
http://www.codinghorror.com/blog/2008/01/understanding-user-and-kernel-mode.html
यहाँ एक छोटी अंश है:
कर्नेल मोड
कर्नेल मोड में, क्रियान्वित कोड अंतर्निहित हार्डवेयर में पूर्ण और अप्रतिबंधित पहुँच नहीं है। यह किसी भी CPU निर्देश निष्पादित कर सकता है और किसी भी स्मृति पते का संदर्भ दे सकता है। कर्नेल मोड आमतौर पर ऑपरेटिंग सिस्टम के निम्नतम स्तर, सबसे विश्वसनीय कार्यों के लिए आरक्षित है। कर्नेल मोड में क्रैश आपदाजनक हैं; वे पूरे पीसी को रोक देंगे।
उपयोगकर्ता मोड
उपयोगकर्ता मोड में, क्रियान्वित कोड सीधे हार्डवेयर या संदर्भ स्मृति का उपयोग करने के लिए कोई क्षमता है। उपयोगकर्ता मोड में चल रहे कोड को हार्डवेयर या मेमोरी तक पहुंचने के लिए सिस्टम एपीआई में प्रतिनिधि होना चाहिए। इस तरह के अलगाव द्वारा प्रदान की गई सुरक्षा के कारण, उपयोगकर्ता मोड में दुर्घटनाएं हमेशा वसूली योग्य होती हैं। आपके कंप्यूटर पर चल रहे अधिकांश कोड उपयोगकर्ता मोड में निष्पादित होंगे।
उपयोगकर्ता मोड से कर्नेल मोड में स्विच करने के लिए आपको सिस्टम कॉल करने की आवश्यकता है।
यदि आप सिर्फ देखना चाहते हैं कि हुड के नीचे क्या सामान चल रहा है, तो TLDP is your new friend पर जाएं और कोड देखें (यह अच्छी तरह से प्रलेखित है, असेंबली कोड को समझने के लिए अतिरिक्त ज्ञान की आवश्यकता नहीं है)।
आप में रुचि रखते हैं:
movl $len,%edx # third argument: message length
movl $msg,%ecx # second argument: pointer to message to write
movl $1,%ebx # first argument: file handle (stdout)
movl $4,%eax # system call number (sys_write)
int $0x80 # call kernel
आप देख सकते हैं, एक सिस्टम कॉल सिर्फ एक इस प्रणाली कॉल के लिए विधानसभा कोड, कि एक रुकावट (0x80) करता है के आसपास आवरण और हैंडलर एक परिणाम के रूप है बुलाया जाएगा।
चलिए थोड़ा धोखा देते हैं और निष्पादन योग्य बनाने के लिए यहां एक सी प्रीप्रोसेसर का उपयोग करते हैं (foo।सुनिश्चित करने के लिए है कि हम मिल जाएगा कि हम क्या बारे में strace के माध्यम से
gcc -o foo -nostdlib foo.S
भागो यह:
$ strace -t ./foo
09:38:28 execve("./foo", ["./foo"], 0x7ffeb5b771d8 /* 57 vars */) = 0
09:38:28 stat(NULL, Hello, world!
NULL) = 14
09:38:28 write(0, NULL, 14)
अपने प्रश्न के संदर्भ क्या है जहाँ आप नीचे दिए गए लिंक) से एक कोड डाल एस एक फाइल है? क्या आप एक विशिष्ट सीपीयू या सामान्य रूप से विशिष्ट सीपीयू तंत्र के बारे में पूछ रहे हैं? क्या कोई समस्या है जिसे आप हल करने की कोशिश कर रहे हैं? –