आपका स्वागत है unix.stackexchange.com पर!
वहाँ अपने प्रश्न का कोई आसान जवाब है, और अब तक मुझे की तुलना में बेहतर लोगों को सामान्य रूप में लिनक्स कर्नेल के विषय पर पूरी किताबें और ऑपरेटिंग सिस्टम में लिखा है।
परियोजना के दायरे के बारे में: एक ऑपरेटिंग सिस्टम लिखना एक सरल काम नहीं है! यहां तक कि मिनिक्स की तरह एक उद्देश्यपूर्ण न्यूनतम ओएस एक बहुत जटिल चीज है! आपको लिनक्स के बारे में एक विचार देने के लिए, उन सी कार्यक्रमों के बारे में सोचें जो आपने अब तक लिखे हैं। औसत विश्वविद्यालय के पाठ्यक्रम में सी की कुछ हजार लाइनें सबसे अधिक होती हैं। मुझे लगता है कि मेरी अंतिम वर्ष की परियोजना C ++ की 30-35,000 पंक्तियों के आसपास थी। लिनक्स कर्नेल सी कोड की लगभग 13,000,000 लाइनें हैं।
यह सब अलग-अलग फाइलों में क्यों है? बड़े पैमाने पर परियोजनाओं को तार्किक और व्यावहारिक कारणों से अलग-अलग फ़ाइलों में संग्रहीत किया जाता है। बस एक संपादक में एक 13,000,000 लाइन फ़ाइल लोड करने पर विचार करें! लिनक्स जैसी विशाल परियोजना से निपटने से पहले, आपको निश्चित रूप से अपने सी कौशल को उस बिंदु पर ले जाना चाहिए जहां multiple क्यों कई फाइलें ’सवाल का जवाब देती है। आपको सी कोड को पढ़ने में भी सक्षम होना चाहिए , न कि इसे लिखना चाहिए। (पहले लगता है की तुलना में कठिन)
आपको निश्चित रूप से सी में बहुत कुशल होना चाहिए। कर्नेल को हजारों लोगों द्वारा बनाए रखा जाता है, और आपको उनमें से प्रत्येक के व्यक्तिगत सी मुहावरों को समझने के लिए बुलाया जाएगा (दी गई, काफी कठोर कर्नेल कोडिंग मानकों के भीतर, लेकिन फिर भी - सभी के पास है उनकी अपनी समस्या सुलझाने की शैली)।
अपना सी फ़्यू प्राप्त करने के बाद, सुनिश्चित करें कि आप ऑपरेटिंग सिस्टम को समझते हैं। इससे आपको कोड को समझने में मदद मिलेगी। सभी लिनक्स आवश्यक नहीं है। कर्नेल उचित बहुत छोटा है! यह क्या है:
- विभिन्न उपकरणों के लिए हजारों हार्डवेयर ड्राइवर।
- एपीआई और ड्राइवर लेखन को सरल बनाने के लिए विभिन्न डिवाइस वर्गों के लिए अमूर्त परतें। उदाहरण के लिए, हमारे पास फ़ाइल सिस्टम के लिए VFS, इनपुट डिवाइस के लिए इवेंट लेयर, वगैरह है।
- लिनक्स को चलाने वाले विभिन्न आर्किटेक्चर को सशर्त संकलित कोड और फाइलों को पूरा करने की मात्रा चौंकाने वाली है (न कि हर लिनक्स मशीन एक इंटेल पीसी है, और कुछ अविश्वसनीय रूप से आप जो उम्मीद कर सकते हैं उससे अलग हैं )। कर्नेल को इन अंतरों से निपटना पड़ता है, और इसका मतलब है कि अधिक कोड।
एक समस्या आपको तुरंत मिल जाएगी कि इन घटकों को फिर से खोलना, बदलना और फिर से एक साथ प्लग करना इतना आसान नहीं है। कई अंतर्संबंध हैं। संक्षेप में, कर्नेल के बदलते बिट मुश्किल हैं।
जिन लोगों ने आपको मिनिक्स का सुझाव दिया है वह सरल है: यह एक पूर्ण ऑपरेटिंग सिस्टम है, लेकिन यह लिनक्स की तरह एक सिस्टम की जरूरतों पर बोझ नहीं है। कोड छोटा है, लेकिन फिर भी पूर्ण कार्यक्षमता प्रदान करता है। आखिरकार, लिनक्स के पहले संस्करण मिनिक्स से प्रेरित थे।
निश्चित रूप से, मिनिक्स के पास इन दिनों कम हार्डवेयर सपोर्ट है। तो क्या? यह एक वरदान है! आधुनिक कंप्यूटर बहुत अच्छी तरह से वर्चुअलाइज करते हैं। अपने लाभ के लिए इसका उपयोग करें: Minix चलाने के लिए एक VM इतना हल्का है, यह विकास को एक ख़राब कर देगा।
यदि आपकी परियोजना एक ऑपरेटिंग सिस्टम बनाने की है, तो आप मिनिक्स का अध्ययन करके शुरू करने से भी बदतर कर सकते हैं। आप पुस्तक खरीदना और पढ़ना भी चाह सकते हैं, जिस पुस्तक के लिए मिनिक्स को लिखा गया था, वह थी, ' एंड्रयू टेनबाम के मॉडर्न ऑपरेटिंग सिस्टम '।
आपको अपने लक्ष्य भी निर्धारित करने चाहिए और अपनी शर्तों को सटीक रूप से परिभाषित करना चाहिए । यदि आपकी एक OS की परिभाषा Microsoft की (एक GUI और एक पूर्ण सॉफ्टवेयर सूट वाला OS) है, तो आप बहुत लंबे प्रोजेक्ट के लिए हो सकते हैं! 1960 के दशक के बाद से सैकड़ों लोगों ने काम किया है हमें लाने के लिए कि हम अब कहां हैं, आखिरकार।
अंत में, कंप्यूटर साइंटिस्ट की लड़ाई को याद रखें: ' पहिया को कभी भी मजबूत न करें! '(हम सीखने पर अपवाद बनाना पसंद करते हैं, निश्चित रूप से। और मज़े के लिए :))