अपनी खुद की गिरी के निर्माण पर एक महत्वाकांक्षी छात्र के लिए सलाह [बंद]


18

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

मुझे कुछ बुनियादी जानकारी मिली है और मैंने इकट्ठा किया है कि मुझे वास्तव में यह काम करने के लिए असेंबली और C / C ++ को मास्टर करने की आवश्यकता है। जब मैं उन पर काम कर रहा होता हूं, तो मैं सीखना चाहता हूं कि एक कर्नेल वास्तव में प्रोग्रामिंग दृष्टिकोण से कैसे काम करता है। मैंने लाइनक्स कर्नेल का कोड ब्राउज़ करने में घंटों बिताए हैं, लेकिन यह केवल आपको अभी तक ले सकता है।

कर्नेल बनाने में मूल चरण क्या हैं? जिन चीजों को आपको संबोधित करने की आवश्यकता है? आदेश या बातें कर रहे हैं? मुझे पता है कि मैं बहुत कुछ काट रहा हूं लेकिन मैं इसे संभालने के लिए काफी दृढ़ हूं।


12
सब कुछ सीखने की इच्छा के लिए आपको कोसने की जरूरत नहीं है। लेकिन अगर आप वास्तव में कोशिश कर रहे हैं, तो आपने बेहतर जीवनकाल, एक अतिमानवीय मस्तिष्क और आपके जीवन के लिए कोई अन्य योजना नहीं बनाई है;)

2
मैं उन सभी के लिए उम्मीद है! हालांकि वास्तव में नहीं, मेरे पास सीखने की ललक है।
n0pe

@delnan संभव पैरानॉयड सिज़ोफ्रेनिया एक प्लस भी है: temos.org
DanteTheEgregore

@ डेंटइंजेलियोर क्या है?
पैनजैक्रिसिस

जवाबों:


34

ऑपरेटिंग सिस्टम को डिजाइन करने के लिए आपको क्या करना चाहिए। यहां तक ​​कि अगर, उदाहरण के लिए, आप तय करते हैं कि यह एक यूनिक्स-जैसी प्रणाली होनी चाहिए, अभी भी बहुत सारे निर्णय लेने हैं। UNIX आपको कितना पसंद है? UNIX के कौन से भाग आपको पसंद हैं और आपको क्या लगता है कि सुधार की आवश्यकता है?

यदि आप इसके UNIX- जैसे होने पर सेट नहीं हैं, तो आप जवाब देने के लिए और भी अधिक प्रश्नों के साथ समाप्त होते हैं : क्या प्रक्रियाओं को एक पेड़ बनाना चाहिए, या वे "फ्लैट" हैं? आप किस प्रकार की अंतर-प्रक्रिया संचार का समर्थन करना चाहते हैं? क्या आप चाहते हैं कि यह मल्टी-यूजर हो, या सिर्फ मल्टी-टास्किंग (या संभवतः सिंगल-टास्किंग) हो? क्या आप चाहते हैं कि यह एक वास्तविक समय प्रणाली हो? कार्यों के बीच आप किस हद तक अलगाव प्रदान करना चाहते हैं? आप यह कहां चाहते हैं कि यह अखंड बनाम सूक्ष्म-कर्नेल पैमाने पर आए? किस हद तक (यदि कोई है) क्या आप इसे वितरित ऑपरेशन का समर्थन करना चाहते हैं?

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

यदि आप इसे पा सकते हैं, तो शेर की किताब ( लायंस कमेंटरी ऑन यूनिक्स 6 वें संस्करण की एक प्रति , सोर्स कोड के साथ , जॉन लायंस द्वारा) एक बहुत आसान शुरुआती बिंदु है। 6th संस्करण UNIX अभी भी काफी छोटा और सरल था, जिसे ओवरसिप्लाइफाइड टॉय सिस्टम होने के बिना पढ़ने और समझने में काफी जल्दी थी।

यदि आप x86 (कम से कम प्राथमिक रूप से) को लक्षित करने की योजना बना रहे हैं, तो आप रिचर्ड बर्गेस द्वारा MMURTL V 1.0 को देखना चाह सकते हैं । यह x86 के लिए एक प्रणाली प्रस्तुत करता है जो मूल रूप से इच्छित सीपीयू डिजाइनरों के रूप में x86 हार्डवेयर का उपयोग करता है - कुछ अन्य वास्तविक सिस्टम अन्य सीपीयू के लिए पोर्टेबिलिटी के पक्ष में आगे बढ़ते हैं। जैसा कि आप अनुमान लगा सकते हैं, यह चीजों के हार्डवेयर अंत की ओर बहुत अधिक उन्मुख हो जाता है। मुद्रित प्रतियां महंगी और खोजने में कठिन लगती हैं, लेकिन आप मुफ्त में पाठ और कोड डाउनलोड कर सकते हैं।

सौभाग्य से, उदाहरण के लिए एंड्रयू टेनबाम और अल्बर्ट वुडहुल द्वारा और भी बहुत कुछ संभावनाएं हैं - ऑपरेटिंग सिस्टम डिज़ाइन और कार्यान्वयन


अच्छी प्रतिक्रिया के लिए वाह धन्यवाद। मैं उन सभी किताबों पर गौर करूंगा।
n0pe

7
मैंने पुस्तक और स्रोत के PDF में लिंक जोड़े। V6 UNIX के लिए स्रोत के बारे में आश्चर्यजनक बात यह है कि यह प्रति पृष्ठ 100 लाइनों के साथ 100 पृष्ठों लंबा है। और कोड की 10,000 लाइनों में आपके पास एक पूर्ण, मल्टीटास्किंग ऑपरेटिंग सिस्टम है । यदि आप वास्तव में प्रसिद्ध टिप्पणी के आसपास के कोड को 2238 लाइन पर समझ सकते हैं, "आपको यह समझने की उम्मीद नहीं है," आप अपने आप को एक गोल्ड स्टार और मानद मास्टर्स दे सकते हैं। का आनंद लें!
17:30 पर पीटर रोवेल

लिंक के लिए धन्यवाद! अब मुझे यह पता लगाना है कि इसे कहां प्रिंट करना है ....
n0pe

1
Minix (Tannenbaum book) शिक्षा के लिए डिज़ाइन किया गया है और यहाँ वही हो सकता है जिसकी आवश्यकता है।

@PeterRowell, dmr ने कहा कि यह cm.bell-labs.com/who/dmr/odd.html

12

मेरा सुझाव है कि एक छोटे, अत्यधिक केंद्रित कार्य के साथ शुरुआत करें: असेंबली का उपयोग करते हुए, एक खिलौना बूटस्ट्रैप प्रोग्राम लिखें। यह बहुत कुछ करने की जरूरत नहीं है। आप बस चाहते हैं कि कंप्यूटर प्रोग्राम शुरू होने पर स्वचालित रूप से लोड हो जाए, एक संदेश प्रिंट करें जो यह पुष्टि करता है कि यह चल रहा है, कीबोर्ड पर कुछ इनपुट फॉर्म पढ़ें, दूसरा संदेश प्रिंट करें, और फिर कंप्यूटर बंद करें।

इसके कई लाभ होंगे:

  1. आपको अंततः अपने कर्नेल के लिए बूटस्ट्रैप प्रक्रिया की आवश्यकता है, इसलिए यह एक व्यर्थ अभ्यास नहीं है।
  2. यह आपको विधानसभा में लिखित रूप में अभ्यास देगा।
  3. यह निम्न-स्तरीय IO दिनचर्या लिखने में आपका अभ्यास देगा। जब आप कॉल करने के लिए कोई ओएस नहीं है, तो आप स्क्रीन पर एक संदेश कैसे लिखते हैं, या एक कीस्ट्रोक पढ़ते हैं?
  4. यह आपको सीपीयू और मदर बोर्ड के तकनीकी मिंट्टी पर शोध करने का अनुभव देगा। (पहला प्रश्न: आपके मदरबोर्ड / सीपीयू को शुरू होने पर एक बूट करने योग्य कार्यक्रम कैसे मिलता है?)
  5. एक टन सूक्ष्मता के साथ, गुठली लिखना बहुत ही परिष्कृत कार्य बन गया है। यह कार्य आपको शुरू करने के लिए कुछ देगा और हो सकता है कि आपको शुरू करने से पहले ही मातम में खो जाने से बचाए।

एक बार जब आप ऐसा कर सकते हैं, तो आपके पास बेहतर विचार होगा कि आप क्या कर रहे हैं।


इसके लिए धन्यवाद, मुझे लगता है कि यह वही है जो मैं करने की कोशिश कर रहा हूं। मेरे भविष्य में और अधिक पढ़ना।
n0pe

7

असेंबलर में प्रोग्राम करना सीखना एक अच्छी पहली शुरुआत है और इसे MSDOS 6.0 से करना मददगार होने के साथ-साथ फीचर्स में कमी के कारण मददगार हो सकता है।

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

C / C ++ केवल तभी काम करने वाला है जब आपकी कर्नेल इन भाषाओं के लिए मानक पुस्तकालयों के साथ संगत है, वरना आपको इन पुस्तकालयों की एक प्रति भी लिखनी होगी।

यह भी मल्टीथ्रेडिंग, सिस्टम सुरक्षा, नेटवर्किंग के बारे में सोचना शुरू नहीं कर रहा है।


7

मिनिक्स एक अच्छा यूनिक्स क्लोन (जो प्रेरित लिनक्स) है जो शिक्षण के लिए लिखा गया था।

एंड्रयू एस। टैनैनबाम एक उत्कृष्ट लेखक और शिक्षक हैं और उन्होंने उदाहरण के रूप में मिनिक्स का उपयोग करके ऑपरेटिंग सिस्टम के बारे में एक पूरी किताब लिखी है (और इसके साथ पालन करने के लिए स्रोत कोड भी शामिल है): http://en.wikipedia.org/wiki/Operating_Systemings._Design_and_Im कार्यान्वयन

व्यक्तिगत रूप से मुझे लगता है कि वह प्रोग्रामर की तुलना में कुछ हद तक बेहतर लेखक है, इसलिए कुछ चीजें उतनी स्पष्ट नहीं हैं जितनी मैं व्यक्तिगत रूप से चाहूंगा, लेकिन - हे - काम करता है!

मैं दृढ़ता से इसे सीखने के संसाधन के रूप में देखने की सिफारिश कर सकता हूं। यह आपको वास्तव में किसी ऐसी चीज का उत्पादन करने के लिए आवश्यक कार्य का एक विचार देगा जो वास्तव में उपयोगी हो सकती है।


मैं भौतिक पुस्तक प्राप्त करने की सलाह दूंगा। नोट लेने में आसान।

वास्तव में यह सोचने के लिए आया था, मुझे लगता है कि मैंने सस्ते के लिए अमेज़ॅन पर किताब देखी। मैं वहाँ पहुँच सकता हूँ। धन्यवाद
n0pe

यह भी ध्यान दें कि यह तीसरा संस्करण है। मेरा मानना ​​है कि जब मैंने कोर्स किया था तो हमने पहले संस्करण का उपयोग किया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.