मैं पुराने डेस्कटॉप कंप्यूटर पर एक छोटा सा ऑपरेटिंग सिस्टम कैसे बना सकता हूं? [बन्द है]


111

यह व्यर्थ हो सकता है, क्योंकि मुझे पता है कि एक ऑपरेटिंग सिस्टम लिखना असहनीय रूप से जटिल है (विशेष रूप से स्वयं के द्वारा)।

  • मुझे अगले लिनक्स, या विंडोज़ के निर्माण की उम्मीद नहीं है।

  • मुझे पता है कि यह भयानक और छोटी गाड़ी होगी, और यह काम नहीं करेगा, लेकिन यह ठीक है।

मैं विधानसभा , सी और (कुछ) सी ++ में खुद को सब कुछ लिखना चाहता हूं ।

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

मैं एक मॉनिटर, कीबोर्ड और माउस के साथ अपने पुराने डेस्कटॉप सेट करना चाहता हूं, और एक खाली हार्ड ड्राइव पर काम करना शुरू करता हूं ।

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

  • मैं कंप्यूटर पर कोड कैसे डालूं? क्या फ्लॉपी डिस्क के साथ ऐसा करना सबसे अच्छा है? क्या अधिकांश कंप्यूटर USB स्टिक से कर सकते हैं?

  • मुझे किन ड्राइवरों की आवश्यकता है, और क्या आप उन निर्माण के लिए कोई संदर्भ सुझा सकते हैं?

  • बूटिंग सीक्वेंस के बाद - फिर क्या? मैं संरक्षित मोड में कैसे आऊं आदि।

  • मैं ऑपरेटिंग सिस्टम की मदद के बिना मेमोरी कैसे प्रबंधित करूं? क्या मुझे जो भी पते चाहिए, मैं उनका उपयोग कर सकता हूं? कोई प्रारंभ आवश्यक नहीं है?

  • मैं निस्संदेह उस में भाग जाएगा जो मुझे भ्रमित करेगा?

  • मैं इसे या तो एक कमांड लाइन O / S, और एक चित्रमय कैसे बना सकता हूं?

  • एक ग्राफिकल ओ / एस किस पर बनाया गया है? जैसे, मैं कुछ कैसे करूंगा, कमांड लाइन, फ़ॉन्ट के साथ और शीर्ष पर एक तस्वीर?

  • मैं एक मल्टीटास्किंग वातावरण स्थापित करने के बारे में कहां पढ़ सकता हूं? (यानी; दो ग्राफिकल-जैसी कमांड लाइन जो साथ-साथ चल रही हों)।

  • मैं एक तरह की विंडोिंग प्रणाली कैसे स्थापित करूंगा? एक बार मल्टीटास्किंग सेट करने के बाद मैं स्क्रीन पर ग्राफिक्स कैसे प्रदर्शित करूँ?

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

इसके कई अन्य टुकड़े हैं जिनका मैंने उल्लेख नहीं किया है, यदि आप किसी भी के बारे में सोचते हैं, तो उन्हें भी जोड़ने के लिए स्वतंत्र महसूस करें।

कृपया प्रति उत्तर में एक "विषय" डालें - उदाहरण के लिए, USB ड्राइवर, और फिर शायद संसाधनों की एक सूची, बाहर देखने के लिए चीजें, आदि।

इसके अलावा, कृपया अन्य O / S या पहले से मौजूद कोड के निर्माण का सुझाव न दें। मैं जानता हूँ कि मैं होगा पढ़ा (जैसे लिनक्स कर्नेल, या उदाहरण के संसाधन, मौजूदा ड्राइवरों, आदि) पहले से मौजूद कोड का एक बहुत कुछ है लेकिन अंत में मैं सभी अपने आप को लेखन करना चाहते हैं। मुझे पता है कि मुझे किसी और चीज़ का निर्माण करना चाहिए , और एसओ के बारे में बहुत सारे अन्य प्रश्न हैं जिनके बारे में मैं पढ़ सकता हूं कि क्या मैं अपना मन बदलूं और उस मार्ग पर जाऊं। लेकिन यह एक खरोंच से पूरे काम करने के बारे में है।

इसे कैसे प्राप्त किया जा सकता है, इस बारे में कोई सुझाव? विभिन्न वीडियो मोड और उनके साथ कैसे काम करना है, आदि?


14
यह मेरा सबसे बड़ा लक्ष्य है। मैं एक ऑपरेटिंग सिस्टम को इतनी बुरी तरह से लिखना चाहता हूं, बस इसके मज़े और सीखने के लिए ... मैं अभी पिछले कुछ वर्षों के समय को नहीं छोड़ सका हूं। यदि आप कभी किसी की मदद के लिए देख रहे हैं या सिर्फ आपके साथ चीजों के माध्यम से बात करते हैं, तो आप मुझे gmail.com पर schmeling88 पर ईमेल कर सकते हैं
मैक्स

2
@ मोम और @Tom, मुझे भी बग मिला है। मैं वास्तव में इस समय के आसपास शुरू करने के लिए कमर कस रहा हूँ :)
जियोवानी गैल्बो

2
बस अब ग्राफिक्स के बारे में मत सोचो। यूनिक्स ने कभी भी सीधे ग्राफिक्स का समर्थन नहीं किया, और यह इतना बुरा नहीं है। :-) लेकिन मूल रूप से 800x600 IIRC से आगे निकलने का कोई आसान और पोर्टेबल तरीका नहीं है।
बैस्टियन लेओनार्ड

2
बहुत व्यापक के रूप में बंद करने के लिए मतदान। इसके समान: stackoverflow.com/questions/254149/… || stackoverflow.com/questions/2800741/…
Ciro Santilli 冠状 est est est

1
क्यों? यह प्रश्न प्राचीन है और अब कोई गतिविधि उत्पन्न नहीं कर रहा है। किसे पड़ी है?
कार्सन मायर्स

जवाबों:


51

पहली चीजें पहले। पढ़ना, पढ़ना, पढ़ना, पढ़ना, पढ़ना। आपको यह समझने की आवश्यकता है कि ओएस कैसे काम करता है इससे पहले कि आप अपने स्वयं के कार्यान्वयन की आशा कर सकें।

ऑपरेटिंग सिस्टम पर एंड्रयू Tanenbaum की पुस्तकों में से एक को पकड़ो। यह वह है जिसका उपयोग मैंने कॉलेज में अपने ओएस क्लास में किया था:

आधुनिक ऑपरेटिंग सिस्टम पीडीएफ

अमेज़न पर आधुनिक ऑपरेटिंग सिस्टम

हास्यास्पद कवर के बावजूद, यह एक शानदार रीड है, खासकर एक पाठ्यपुस्तक के लिए। Tanenbaum वास्तव में इस क्षेत्र में एक विशेषज्ञ है और उनके स्पष्टीकरण कैसे OS के नीचे काम करता है हुड स्पष्ट और समझने में आसान हैं। यह पुस्तक ज्यादातर सिद्धांत है, लेकिन मेरा मानना ​​है कि उनके पास एक पुस्तक भी है जो कार्यान्वयन के बारे में अधिक चर्चा करती है। मैंने इसे कभी नहीं पढ़ा है, इसलिए मैं इस पर टिप्पणी नहीं कर सकता।

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

X86 असेंबली पर पढ़ें (मान लें कि आप इसे x86 मशीन के लिए डिज़ाइन कर रहे हैं)। प्रोसेसर ऑपरेटिंग मोड के बीच बढ़ने के संबंध में आपके बहुत से सवालों का जवाब देना चाहिए।

यदि आपको कोई भी इलेक्ट्रॉनिक्स ज्ञान मिला है, तो एक एम्बेडेड डिवाइस के लिए एक ऑपरेटिंग सिस्टम लिखना शुरू करना आसान हो सकता है, जिसमें पर्याप्त दस्तावेज हैं, क्योंकि यह आमतौर पर x86 पीसी की तुलना में सरल होगा। मैं हमेशा से अपना खुद का ओएस लिखना चाहता हूं, और मैं डिजिलेंट से इस विकास बोर्ड के लिए एक माइक्रोकोर्न एम्बेडेड ओएस लिख रहा हूं । यह Xilinx से सॉफ्ट-कोर MicroBlaze प्रोसेसर चला सकता है, जिसमें बहुत गहन प्रलेखन है। इसमें कुछ रैम, फ्लैश डेटा स्टोरेज, एलइडी, स्विच, बटन, वीजीए आउटपुट आदि भी दिए गए हैं।

एक एम्बेडेड डिवाइस का एक फायदा यह भी है कि आप लंबे समय तक वीजीए ड्राइवर लिखने से बच सकते हैं। मेरे मामले में, डिजीलेंट डेवलपमेंट बोर्ड में एक ऑनबोर्ड UART है, इसलिए मैं धारावाहिक आउटपुट को प्रभावी रूप से अपने कंसोल के रूप में उपयोग कर सकता हूं ताकि पूरी बात उठ सके और कम से कम उपद्रव के साथ एक कमांड लाइन को बूट कर सके।

बस यह सुनिश्चित करें कि आप जो भी लक्ष्य चुनना चाहते हैं, उसके लिए आसानी से उपलब्ध और अच्छी तरह से जांचा-परखा संकलक है। आप एक ही समय में एक OS और एक कंपाइलर नहीं लिखना चाहते हैं।


2
+1, लेकिन मैं Tanenbaum Minix पुस्तक पसंद करता हूं (जो कार्यान्वयन के प्रति अधिक लक्षित है), और वास्तव में केवल पहले सिद्धांत पर ध्यान देने की कोई आवश्यकता नहीं है। वह वैसे भी पहली कोशिश में ओएस नहीं लिखेगा। वह पहले एक बूटलोडर लिखेगा, फिर संरक्षित मोड पर स्विच करेगा, फिर I / O को हैंडल करेगा, और इसी तरह।
बास्टियन लेओनार्ड

2
एक एम्बेडेड चिप के लिए एक ओएस लिखने के लिए +1। दिन के अंत में आप महसूस करेंगे कि आपने कुछ अनोखा बनाया है, और यह एक ही मुख्य अवधारणाओं को बनाए रखते हुए x86 के लिए (लिखने) की तुलना में बड़े पैमाने पर सरल है। TinyOS को देखें, उदाहरण के लिए (जबकि तकनीकी रूप से OS नहीं, इसके लिए शेड्यूलर और कार्य मॉड्यूल जैसी चीजें हैं ..)
क्रिस्टोफर मिन्स्की

29

http://www.osdev.org/ और http://www.osdever.net/

ओएस विकास दुनिया में आपका स्वागत है।

एसओ में अन्य x86 प्रलेखन लिंक भी देखें टैग विकी : इंटेल और एएमडी मैनुअल, कंपाइलर / असेंबलर डॉक्स और विभिन्न गाइड।

यह डिबगिंग के लिए BOCHS या अन्य आभासी वातावरण का उपयोग करने का भी सुझाव देता है, क्योंकि आप अपने बूटलोडर को सिंगल-स्टेप कर सकते हैं और रजिस्टरों की जांच कर सकते हैं।


1
और विशेष रूप से wiki.osdev.org !
मैथ्यू इसेलिन


6
मुझे पता है कि ये उपयोगी संसाधन हैं, लेकिन मुझे लगता है कि यह भविष्य के पाठकों के लिए अधिक उपयोगी हो सकता है यदि आपने स्पष्टीकरण के बिना लिंक के एक सेट के बजाय कुछ संदर्भ प्रदान किया हो।
icktoofay

@icktoofay प्रश्न का उत्तर ठीक से दिया जाना व्यापक है, मुझे लगता है।
user253751

15

मैं काम करने का सुझाव दूंगा , कम से कम पहली बार, Bochs या किसी अन्य वर्चुअल मशीन पर, इसका कारण यह है कि आप इसे अपने साथ कहीं भी ले जा सकते हैं, यह डिबग करना आसान है (आप हार्डवेयर की सटीक स्थिति देख सकते हैं), और यदि आप जरूरत के बाहर मदद डिबगिंग वे आप के रूप में सटीक 'हार्डवेयर' का उपयोग कर सकते हैं।

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


मैं अब के लिए चारों ओर खेलने के लिए Bochs में देखूंगा, लेकिन मैं आखिरकार इसे कुछ पीसी पर बनाना चाहता हूं
कार्सन मायर्स

यदि यह BOCHS में काम करता है, तो यह आमतौर पर एक वास्तविक पीसी पर काम करता है, उनके BIOS में मॉडुलो अंतर। आपके अधिकांश कीड़े संभवतः BOCHS और वास्तविक हार्डवेयर को प्रभावित करने वाली चीजें होंगे, लेकिन अंतर यह है कि जब आपका कोड BOCHS में एक अनंत लूप में फंस जाता है, तो आप यह जानने के लिए BOCHS के अंतर्निहित डीबगर का उपयोग कर सकते हैं कि कहां, और एकल चरण खोजने के लिए कैसे / क्यों असली हार्डवेयर पर, आप सभी डिबग-प्रिंट जोड़ सकते हैं। डीबगर का उपयोग करने से सिर खुजलाने के घंटे और दिन बचे रहेंगे।
पीटर कॉर्ड्स

14

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

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

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

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

वहां से आपको अधिक परिष्कृत विशेषताओं पर काम करने में सक्षम होना चाहिए। इस आधार से आप एक नया "कर्नेल" लिख सकते हैं और संकलित कर सकते हैं ... अपने परीक्षण को रिबूट करें, और उसमें नया कर्नेल तैनात करें।

(आपके बूटलोडर को कुछ संकेत लेने चाहिए, जैसे धारावाहिक पर एक हाथ मिलाना लाइनों को डाउनलोड को छोड़ने के लिए एक कमांड के रूप में और मौजूदा छवि को बूट करने के लिए; और इसे इस तरह से कुछ समय समाप्त करना चाहिए)।

वहाँ से एक बहुत ही सरल टर्मिनल लेयर और कमांड शेल लिखें? एक फाइलसिस्टम? कर्नेल (फ़ाइलों या कुछ प्रकार की वस्तुओं) के अलावा अन्य नई निष्पादन योग्य सामग्री को डाउनलोड करने के लिए आदेशों को लागू करें। और इसी तरह।

स्वाभाविक रूप से आप पीसी कीबोर्ड और वीडियो (BIOS INT 0x16h और INT 0x10H सामान, क्रमशः का उपयोग करके कंसोल ड्राइवर के साथ शुरू कर सकते थे, अगर मुझे सही याद है)। हालाँकि, मैं आपको एक सीरियल ड्राइवर से शुरू करने का सुझाव दूंगा क्योंकि आप किसी अन्य मौजूदा (कार्यात्मक) प्रणाली से अपने निर्माण / तैनाती / परीक्षण चक्र को स्वचालित कर सकते हैं। चूंकि आपका नया ओएस एक क्रॉस-संकलित परियोजना के रूप में शुरू होगा, इसलिए आपके लिए यह आवश्यक है कि आप इसे संभालने का एक सुव्यवस्थित तरीका अपना सकें।

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


आधुनिक हार्डवेयर पर कंसोल (वीडियो / कीबोर्ड) ड्राइवरों को लिखने की तुलना में एक धारावाहिक चालक का काम करना अधिक कठिन हो सकता है। जब से मैंने यह लिखा है, कई सालों में, सादे पुराने सीरियल कनेक्टर आधुनिक डेस्कटॉप और लैपटॉप पर व्यावहारिक रूप से अस्तित्वहीन हो गए हैं। कुछ एंबेडेड और "हॉबीस्ट" हार्डवेयर में अभी भी पुराने जमाने वाले RS-232C इंटरफेस हैं जो बिना USB एमुलेशन के गुजरने की जरूरत है। परीक्षा के लिए: mpl.ch/t2600.html ऐसा लगता है।
जिम डेनिस

12

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

मुझे लगता है कि यह एक महान विचार है और मैं पूरी तरह से जल्द ही फंस जाने का इरादा रखता हूं। पुस्तक आश्चर्यजनक रूप से सस्ती है और मेरा मानना ​​है कि पाठ्यक्रम एमआईटी में पढ़ाया जाता है। मैं इस बात की कल्पना नहीं कर सकता कि संपूर्ण प्रणाली के पूर्ण, पूर्ण ज्ञान से आप स्वयं को जमीन से ऊपर उठा सकते हैं।

लिंक: http://www1.idc.ac.il/tecs/


मुझे लगता है कि यह लिंक मर चुका है। किसी को भी इस तक पहुँचने का कोई अन्य तरीका पता है?
कोरे तुगे

1
@KorayTugay nand2tetris.org
user253751

10

मैं छोटा शुरू करूँगा और 8086 एम्बेडेड विकास किट खरीदूंगा, और उस पर एक मल्टीटास्किंग ओएस विकसित करूंगा। एक बार जब आप कर्नेल कर लेते हैं और हार्डवेयर स्तर पर काम करने से परिचित हो जाते हैं, तो आप कुछ अधिक चुनौतीपूर्ण काम करने के लिए तैयार होंगे।

यहां तक ​​कि VGA डिस्प्ले DOS क्लोन का निर्माण एक काफी चुनौतीपूर्ण चीज है। विवरण विशाल हैं। :-)

विशिष्ट विषय।

मैं कंप्यूटर पर कोड कैसे डालूं? क्या फ्लॉपी डिस्क के साथ ऐसा करना सबसे अच्छा है? क्या अधिकांश कंप्यूटर USB स्टिक से कर सकते हैं?

BIOS प्राथमिक बूटस्ट्रैपिंग करेगा।


मुझे किन ड्राइवरों की आवश्यकता है, और क्या आप उन निर्माण के लिए कोई संदर्भ सुझा सकते हैं?

कुछ भी जो प्रत्यक्ष सीपीयू / मेमोरी ऑपरेशन नहीं है। कुछ भी जो सीधे सीपीयू संदर्भ मैनुअल में नहीं है।


बूटिंग सीक्वेंस के बाद - फिर क्या? मैं संरक्षित मोड में कैसे आऊं आदि।

संरक्षित मोड बूट अनुक्रम का हिस्सा होगा।

फिर आप मल्टीटास्किंग शुरू करते हैं और पता लगाते हैं कि प्रक्रिया कैसे शुरू करें।


मैं ऑपरेटिंग सिस्टम की मदद के बिना मेमोरी कैसे प्रबंधित करूं? क्या मुझे जो भी पते चाहिए, मैं उनका उपयोग कर सकता हूं? कोई प्रारंभ आवश्यक नहीं है?

सही बात। आप शायद एक आभासी मेमोरी सिस्टम को अंततः सुलझाना चाहेंगे।


मैं निस्संदेह उस में भाग जाएगा जो मुझे भ्रमित करेगा?

डिबगिंग टूल नहीं होना, IO नहीं होना


मैं इसे या तो एक कमांड लाइन O / S, और एक चित्रमय कैसे बना सकता हूं?

दुःख के साथ। विशेष रूप से X विंडो में, Windows 3.1 और Linux को देखें।


एक ग्राफिकल ओ / एस किस पर बनाया गया है? जैसे, मैं कुछ कैसे करूंगा, कमांड लाइन, फ़ॉन्ट के साथ और शीर्ष पर एक तस्वीर?

एक्स विंडो देखें।


अंतिम सलाह: अध्ययन लिनक्स / एक्स विंडोज़। यह सही नहीं है, लेकिन यह एक दृष्टिकोण की समझ प्रदान करता है । इसके अलावा एम्बेडेड सिस्टम का अध्ययन करें।


महान जवाब, मेरे पास पहले से ही लिनक्स कर्नेल काम है और मैं निश्चित रूप से विंडोज़ 3.1 में देखूंगा।
कार्सन मायर्स

8

मैं ओएस विकास साइटों के लिए बहुत सारे अच्छे संदर्भ देखता हूं, इसलिए मैं एक अलग दृष्टिकोण का वर्णन करूंगा:

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

उदाहरण के लिए, आपको अपने कर्नेल को डिस्क और / या नेटवर्क से पढ़ने के लिए ड्राइवरों के एक सेट की आवश्यकता होगी। फिर आपको संरक्षित मोड में जाने के लिए कोड की आवश्यकता होगी। उस बिंदु पर, आपको ड्राइवरों का एक और सेट चाहिए! बहुत कम काम जो आप चिप को संरक्षित मोड में लाने के लिए करते हैं, उस बिंदु के बाद हस्तांतरणीय होगा। आप इसे एक अलग पीसी + - 4 साल पर चलाना चाहते हैं और आपको ड्राइवरों के एक और सेट की आवश्यकता होगी।

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


नहीं बिल्कुल क्या मैं के लिए कहा, लेकिन पढ़ने के स्पर्श पर मुझे भेजने के लिए +1
कार्सन मायर्स

मार्श आपको अच्छी सलाह दे रहा है। X86 / BIOS आर्किटेक्चर का निम्न-स्तरीय विवरण जटिल है। आपको संभवतः इन विवरणों पर ध्यान देना होगा, जिससे आप स्मृति प्रबंधन और प्रक्रिया निर्धारण जैसे बड़े मुद्दों पर ध्यान केंद्रित नहीं कर पाएंगे। एक सीरियल पोर्ट के साथ "क्लीनर" वास्तुकला के लिए जाएं। आप लंबे समय में खुश रहेंगे।
बैरी ब्राउन

8

कुछ और से अधिक, यदि आप चाहते हैं कि यह वास्तविक हार्डवेयर पर चले, तो आपको अपने प्रोसेसर के मैनुअल की एक प्रति की आवश्यकता है। इंटेल मैनुअल ( http://www.intel.com/products/processor/manuals/ ) अमूल्य हैं। वे स्विचिंग मोड्स (वास्तविक / संरक्षित) से लेकर वर्चुअल मेमोरी मैनेजमेंट (अगर आप उस तक जाना चुनते हैं) से लेकर सिसकल्स बनाने तक सब कुछ खत्म हो जाता है (यदि आप कभी भी यूजर मोड में आते हैं)। सबसे महत्वपूर्ण बात यह है कि वे बहुत सी चीजों के बारे में विस्तार से बताते हैं, जो कि TSS और खंड रजिस्टरों की तरह काम करने के लिए होनी चाहिए, कि ज्यादातर OS ग्रंथों पर चर्चा नहीं होती क्योंकि वे प्रोसेसर की तुलना में उच्च-स्तरीय अवधारणाओं से अधिक चिंतित होते हैं। विशिष्ट विवरण।


और आप इंटेल के माध्यम से मुफ्त में कागज प्रतियां प्राप्त कर सकते हैं।
मैथ्यू इसेलिन


8

एक छोटे, बुनियादी ओपन-सोर्स ओएस के कोड को पढ़ने की कोशिश करें, जैसे कि मिकोस।

वैकल्पिक रूप से, मैं निम्नलिखित चरणों का सुझाव देता हूं (मजेदार होना चाहिए!):

  1. वर्चुअल मशीन लिखें। अपने सभी प्रोसेसर निर्देशों को परिभाषित करें ताकि आप अपने सिस्टम को अंदर और बाहर जानें। इसे कीबोर्ड, माउस, स्क्रीन, ऑडियो एक्सेस के लिए एसडीएल के साथ इंटरफेस करें। इसे सरल रखें ताकि आप एक ही बार में अपने सिर में सब कुछ फिट कर सकें। यह एक अत्याधुनिक वर्चुअल मशीन होने की जरूरत नहीं है, सिर्फ एक है कि एक 'असली' कंप्यूटर के समारोह का अनुकरण कर सकते हैं।
  2. अपने वर्चुअल मशीन के प्रोसेसर के लिए एक कोडांतरक लिखें। याद रखें कि इस कोडर को वर्चुअल मशीन की भाषा में लिखा गया प्रोग्राम नहीं होना चाहिए, लेकिन ऐसा कुछ भी जो आपकी असेंबली भाषा को मशीन कोड में बदल सकता है।
  3. एक निष्पादन योग्य प्रारूप को परिभाषित करें, और एक सरल लिंकर लिखें।
  4. अब आपको अपने ऑपरेटिंग सिस्टम को लिखने के लिए सभी भाग मिल गए हैं! इसे असेंबली लैंग्वेज में लिखें, इसे असेंबल करें ... आदि .. आपको ऐसी जटिल बूटलोडिंग प्रक्रिया की आवश्यकता नहीं है, बस अपने ओएस को चलाने के लिए अपनी मशीन प्राप्त करें।

उपरोक्त कदम एक साधारण ओएस लिखने के लिए थोड़े बेवकूफ लग सकते हैं, लेकिन हे, यह बहुत मजेदार है।


6

बाहर की जाँच MikeOS । इसकी लिखी गई एक साधारण ओएस OS पठनीय (जैसा कि टिप्पणी की गई है) असेंबली में है। हालांकि यह काफी सरल है, इसमें GUI है और यह कुछ नेटवर्किंग और मल्टीमीडिया का समर्थन करता है।

संपादित करें : MenuetOS चित्रमय है। यह भी लिखा गया है कि यह सीधा है, लेकिन यह माइकोस की तुलना में अधिक परिष्कृत है


6

आपका एक महत्वाकांक्षी लक्ष्य है। लेकिन अमल अहम है।

अधिकांश संरचित दृष्टिकोण (पाठ्यपुस्तक या महाविद्यालय वर्ग) आपको इस प्रक्रिया से गुजरेंगे, लेकिन वे बहुत सारे किटी-ग्रिट कोड की आपूर्ति करते हैं जो आपके चुने हुए प्लेटफ़ॉर्म के रहस्यमय विवरण पर चमकते हैं और आपको बड़े-चित्र विचारों पर ध्यान केंद्रित करने की अनुमति देते हैं: प्रक्रिया समयबद्धन, स्मृति प्रबंधन, गतिरोध निवारण, I / O, और इसके बाद।

मेरी सलाह यह है: अपनी उम्मीदों पर वापस रास्ता काटें और एक मूल प्रश्न के साथ शुरू करें।

एक ऑपरेटिंग सिस्टम क्या है?

एक कंप्यूटर वैज्ञानिक (उम्मीद है) यह कभी नहीं कहेगा कि एक OS एक ग्राफिकल यूजर इंटरफेस, या एक वेब ब्राउज़र, या USB उपकरणों को हुक करने का एक तरीका है, या ऐसा कुछ भी जो उपयोगकर्ता वास्तव में देख या छू सकता है। इसके बजाय, अपने सबसे मौलिक स्तर पर एक ओएस वे चीजें हैं जो मैंने ऊपर बताई हैं। वे सभी एक बड़ी छतरी के नीचे आते हैं: संसाधन प्रबंधन।

एक ऑपरेटिंग सिस्टम एक प्रोग्राम से अधिक कुछ नहीं है जो कंप्यूटर के हार्डवेयर संसाधनों का प्रबंधन करता है: मेमोरी, सीपीयू, और बाह्य उपकरणों।

यहां एक सरल ऑपरेटिंग सिस्टम है: एक प्रोग्राम धारावाहिक कनेक्शन का उपयोग करके उपयोगकर्ता को एक प्रोग्राम में (हेक्साडेसिमल या बाइनरी में) टाइप करने देता है। एक बार प्रोग्राम टाइप हो जाने के बाद, यह प्रोग्राम रन करता है। जब प्रोग्राम समाप्त हो जाता है, तो उपयोगकर्ता को नियंत्रण वापस कर दिया जाता है जहां वे या तो प्रोग्राम को फिर से चला सकते हैं या एक नए में टाइप कर सकते हैं।

एक "साफ" वास्तुकला पर ऐसा करें जैसे कि 64K मेमोरी या इसके साथ एम्बेडेड एआरएम प्रोसेसर। एआरएम के इनस और आउटस्टेज सीखने के कुछ दिनों के बाद आप इसे असेंबली में कोड कर सकते हैं। और वोइला! , आप अपने आप को एक ऑपरेटिंग सिस्टम मिल गया है।

यह वह सब कुछ करता है जो एक OS करने वाला है:

  • यह उपयोगकर्ता को स्वयं ओएस को अधिलेखित नहीं करने देकर स्मृति का प्रबंधन करता है।
  • यह चलाने के लिए एकल प्रक्रिया को शेड्यूल करता है।
  • यह I / O एकल धारावाहिक परिधीय को संभालता है।

यह आपको शुरू करने के लिए बिल्डिंग ब्लॉक देता है। अब आपके पास कई विकल्प हैं। शायद उनमें से एक को दो कार्यक्रमों को मेमोरी में लोड करने की अनुमति देना होगा और उपयोगकर्ता को यह तय करने देना होगा कि आगे कौन सा चलना है।

या आप उपयोगकर्ता को एक कार्यक्रम के निष्पादन को निलंबित करने, दूसरे पर स्विच करने, निलंबित करने और वापस स्विच करने दे सकते हैं। यह अल्पविकसित मल्टीटास्किंग है, भले ही यह पूरी तरह से मैनुअल है।

आपकी पसंद असीमित है, लेकिन हर एक बच्चे का एक कदम है जो आपने पहले किया था।

यदि आप अपने स्थलों को बहुत ऊंचा नहीं रखते हैं तो यह मजेदार है!


5

मैं StackOverflow पर संसाधनों की एक सूची बनाए रखता हूं: ऑपरेटिंग सिस्टम के विकास में कैसे शुरू किया जाए । कृपया अपने एडवेंचर शुरू करने के बाद इसमें नए संसाधन जोड़ें (मैं शुरू करने वाला हूँ :))


4

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

दुर्भाग्य से, मैं वेब पर इस पाठ्यक्रम (15-412) के लिए कोई निश्चित संसाधन नहीं खोज पाया, और यह समय के साथ विकसित हुआ। लेकिन शायद लोग उन स्रोतों के लिंक और पोस्ट कर सकते हैं जो स्कूलों के लिए असाइनमेंट हैं जिनके पास वेब पर अच्छे संसाधन हैं।


3

आप "अपने खुद के खिलौने UNIX- क्लोन ओएस रोल" नाम के इस ट्यूटोरियल का आनंद ले सकते हैं , यह बहुत ही सुखद है और आपको अपने रास्ते में मदद करनी चाहिए।

सौभाग्य।


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

3

आप चोरी कर सकते हैं विचारों के लिए A2 सिस्टम (पहले ओबेरॉन सिस्टम कहा जाता है ) का अध्ययन करें । यह एक ग्राफिकल ओएस है जो सिर्फ दो लोगों द्वारा बनाया गया है, हालांकि माना जाता है कि एक निकलस विर्थ है। पहली बार 1990 के आसपास रिलीज़ हुई और गति आश्चर्यजनक रूप से अच्छी है। गुटनेचाट की एक किताब है।


3

: निम्न स्तर के ग्राफिक्स प्रोग्रामिंग के बारे में, यह आप जानकारी का एक बहुत कुछ दे देंगे http://www.osdever.net/FreeVGA/home.htm । (यह पाठ मोड के लिए भी बहुत दिलचस्प है।)

मैं निस्संदेह उस में भाग जाएगा जो मुझे भ्रमित करेगा?

आपको पता चल जाएगा कि पीसी पर एक बहुत बड़ा सामान है जो अस्पष्ट है: x86 इंस्ट्रक्शन सेट अपने आप में जटिल है, और जब आपको हार्डवेयर की सीधी पहुँच मिलती है, तो स्क्रीन पर किसी एकल वर्ण को लिखने से पहले समझने में आपको काफी समय लग सकता है। ।

फ़्लॉपी डिस्क के बारे में चिंता न करें और इस तरह, अधिकांश समय आप किसी एमुलेटर जैसे Bochs या QEmu का उपयोग करेंगे।


3

आप अब्राहम सिलबर्सचैट द्वारा ऑपरेटिंग सिस्टम कॉन्सेप्ट पर एक नज़र डालने पर विचार करना चाह सकते हैं - अंडरस्टैंडिंग सिस्टम प्रोग्रामिंग कॉन्सेप्ट्स एक मूलभूत आवश्यकता है, OSes linux * BSD और GNU / Linux के F / OSS कर्नेल इंटर्ल्स पर एक नज़र डालें , खासकर पहले के वर्जन, जो शायद थोड़ा अधिक प्रलेखित हैं।वैकल्पिक शब्द वैकल्पिक शब्द


1
सिल्हर्सटज़ वास्तव में काफी अच्छा है, लेकिन बहुत उच्च स्तर का है।
पॉल नाथन

माना; हालाँकि, मैं इसके मूलभूत रूप से आवश्यक कहूँगा।
टैनबैनम

2

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


1

यह इस तथ्य के लिए बहुत आसान है कि BIOS में स्क्रीन मोड बदलने, पिक्सेल रंग बदलने, स्क्रीन पर टेक्स्ट लिखने और कई अन्य चीजों के लिए पहले से ही कई इनपुट / आउटपुट फ़ंक्शन हैं। हालाँकि, इसमें फ़ाइल सिस्टम के लिए समर्थन शामिल नहीं है, यह बहुत ही कम चीजों में से एक है जिसे आपको अपने ओएस में शामिल करना चाहिए।

BIOS हार्ड ड्राइव पर पहले सेक्टर को लोड करता है और वहां से कोड निष्पादित करना शुरू करता है, इसलिए आपके ओएस को हार्ड ड्राइव पर पहले सेक्टर में पहले निर्देश के साथ रखा जाना चाहिए।

यह विकिपीडिया लेख आपको स्क्रीन पर पाठ लिखने, कीबोर्ड और अन्य सामान से कुंजी प्राप्त करने के लिए BIOS इंटरप्ट पर शुरू करना चाहिए। https://en.wikipedia.org/wiki/BIOS_interrupt_call

यहां तक ​​कि अगर आप सी ++ का उपयोग करने की योजना बनाते हैं, तो मैं विधानसभा प्रोग्रामिंग पर पढ़ने की जोरदार सिफारिश करूंगा, क्योंकि यह समझना महत्वपूर्ण है कि हार्डवेयर कैसे काम करता है।

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