ऑपरेटिंग सिस्टम उपयोगकर्ता को कंप्यूटर हार्डवेयर के साथ बातचीत करने की अनुमति देता है। सिस्टम कोड की सैकड़ों हजारों लाइनों से बना है। आमतौर पर ऑपरेटिंग सिस्टम C#, C, C++ और असेंबली प्रोग्रामिंग भाषाओं का उपयोग करके बनाया जाता है। ऑपरेटिंग सिस्टम आपको आदेशों को सहेजते और निष्पादित करते समय अपने कंप्यूटर को ब्राउज़ करने की अनुमति देता है। ऐसा मत सोचो कि एक ऑपरेटिंग सिस्टम बनाना आसान है। इसे बनाने के लिए बहुत ज्ञान की आवश्यकता होती है।
कदम
Step 1. सबसे पहले प्रोग्रामिंग के बारे में जानें।
विधानसभा भाषा बहुत महत्वपूर्ण है; यह अत्यधिक अनुशंसा की जाती है कि आप एक अन्य पूरक उच्च-स्तरीय भाषा जैसे सी भाषा सीखें।
चरण 2. तय करें कि ओएस लोड करने के लिए आप किस मीडिया का उपयोग करना चाहते हैं।
यह मीडिया सीडी ड्राइव, डीवीडी ड्राइव, फ्लैश ड्राइव, हार्ड ड्राइव, फ्लॉपी डिस्क या अन्य पीसी हो सकता है।
चरण 3. SO के मूल विचार को परिभाषित करें।
उदाहरण के लिए, विंडोज़ पर, मुख्य विचार उपयोग में आसान जीयूआई और बहुत सारी सुरक्षा है।
चरण 4. निर्धारित करें कि आपका ऑपरेटिंग सिस्टम किस प्रोसेसर प्लेटफॉर्म का समर्थन करेगा।
IA-32, ARM और x86_64 पर्सनल कंप्यूटर के लिए सबसे आम प्लेटफॉर्म हैं। तो, वे सभी आपकी सबसे अच्छी पसंद हैं।
चरण 5. तय करें कि क्या आप सब कुछ खरोंच से करना पसंद करते हैं, या क्या कोई कर्नेल पहले से उपलब्ध है जिसे आप बनाना चाहते हैं।
उदाहरण के लिए, स्क्रैच से लिनक्स उन लोगों के लिए एक प्रोजेक्ट है जो अपना खुद का लिनक्स डिस्ट्रो बनाना चाहते हैं।
चरण 6. तय करें कि आप अपने स्वयं के बूट-लोडर का उपयोग करेंगे या ग्रैंड यूनिफाइड बूटलोडर (GRUB) जैसे पूर्व-निर्मित बूट-लोडर का उपयोग करेंगे।
बूटलोडर को स्वयं एन्कोड करने के लिए हार्डवेयर और BIOS के व्यापक ज्ञान की आवश्यकता होगी। परिणामस्वरूप, यह चरण वास्तविक कर्नेल प्रोग्रामिंग शेड्यूल में बाधा डाल सकता है।
चरण 7. तय करें कि किस प्रोग्रामिंग भाषा का उपयोग करना है।
पास्कल या बेसिक जैसी भाषा में ऑपरेटिंग सिस्टम होना ठीक है, लेकिन आपको सी या असेंबली का उपयोग करना चाहिए। असेंबली बहुत जरूरी है, क्योंकि ऑपरेटिंग सिस्टम के कुछ महत्वपूर्ण हिस्सों को इसकी आवश्यकता होती है। दूसरी ओर, सी ++ भाषा में ऐसे कीवर्ड होते हैं जिन्हें चलाने के लिए अन्य पूर्ण SO की आवश्यकता होती है।
सी या सी ++ कोड से एक ऑपरेटिंग सिस्टम को संकलित करने के लिए, निश्चित रूप से आप एक कंपाइलर या दूसरे का उपयोग करेंगे। इसलिए, अपनी पसंद के सी/सी++ कंपाइलर के लिए यूजर गाइड/मैनुअल/डॉक्यूमेंटेशन से परामर्श करना एक अच्छा विचार है, चाहे वह सॉफ्टवेयर में शामिल हो या वितरक की वेबसाइट पर उपलब्ध हो। आपको कंपाइलर के बारे में बहुत सी जटिल चीजें जानने की जरूरत है और, C++ डेवलपमेंट के लिए, आपको कंपाइलर की मैंगलिंग स्कीम और इसकी ABI के बारे में जानना होगा। आपसे विभिन्न निष्पादन योग्य प्रारूपों (ईएलएफ, पीई, सीओएफएफ, मूल बाइनरी, आदि) को समझने की उम्मीद की जाती है, और यह समझते हैं कि विशेष विंडोज प्रारूप, पीई (.exe), कॉपीराइट संरक्षित है।
चरण 8. अपने एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) को परिभाषित करें।
चुनने के लिए एक अच्छा एपीआई POSIX है क्योंकि यह अच्छी तरह से प्रलेखित है। सभी यूनिक्स प्रणालियों में POSIX के लिए कम से कम आंशिक समर्थन है। इसलिए यूनिक्स प्रोग्राम को अपने ओएस से कनेक्ट करना आसान होना चाहिए।
चरण 9. अपने डिजाइन पर निर्णय लें।
मोनोलिथिक कर्नेल और माइक्रो कर्नेल जैसी कोई चीज होती है। मोनोलिथिक कर्नेल कर्नेल में सभी सेवाओं को लागू करते हैं, जबकि माइक्रो कर्नेल में उपयोगकर्ता डेमॉन परिनियोजन सेवाओं के साथ बंडल किए गए छोटे कर्नेल होते हैं। सामान्य तौर पर, अखंड गुठली तेज होती है, लेकिन माइक्रोकर्नेल में बेहतर दोष अलगाव और विश्वसनीयता होती है।
चरण 10. एक टीम में विकास और काम करने पर विचार करें।
इस तरह, अधिक समस्याओं को हल करने में कम समय लगता है, जो संभवतः एक बेहतर OS के निर्माण में तेजी लाएगा।
चरण 11. अपनी हार्ड ड्राइव को पूरी तरह से न पोंछें।
याद रखें, किसी ड्राइव को हटाने से उसका सारा डेटा अपरिवर्तनीय रूप से मिट जाएगा! अपने सिस्टम को दूसरे OS के साथ डबल बूट करने के लिए GRUB या किसी अन्य बूट मैनेजर का उपयोग करें जब तक कि आपका OS पूरी तरह कार्यात्मक न हो जाए।
चरण 12. छोटी शुरुआत करें।
मेमोरी मैनेजमेंट और कंपाउंड वर्क जैसी चीजों पर आगे बढ़ने से पहले टेक्स्ट प्रदर्शित करने और रुकने जैसी छोटी चीजों से शुरुआत करें। यह भी सुनिश्चित करें कि आप 32 बिट और 64 बिट संस्करण बनाते हैं।
चरण 13. अंतिम कार्य स्रोत कोड का बैकअप रखें।
SO या विकास के वर्तमान संस्करण में कुछ गलत होने की स्थिति में यह कदम एक सुरक्षा उपाय के रूप में उपयोगी है। यदि आपका कंप्यूटर क्रैश हो जाता है और बूट नहीं होता है, तो काम करने के लिए दूसरी प्रति रखना एक अच्छा विचार है ताकि आप समस्या को ठीक कर सकें।
चरण 14. वर्चुअल मशीन के साथ अपने नए ऑपरेटिंग सिस्टम का परीक्षण करने पर विचार करें।
हर बार जब आप परिवर्तन करते हैं या अपने परीक्षण मशीन पर अपने विकास कंप्यूटर से फ़ाइलें भेजने के बाद अपने कंप्यूटर को रीबूट करने के बजाय, आप अपने ओएस को चलाने के लिए वर्चुअल मशीन एप्लिकेशन का उपयोग कर सकते हैं, जबकि आपका वर्तमान ओएस चल रहा है। वर्तमान वीएम अनुप्रयोगों में शामिल हैं: वीएमवेयर (जिसमें मुफ्त में एक सर्वर उत्पाद भी उपलब्ध है), ओपन सोर्स विकल्प, बोच, माइक्रोसॉफ्ट वर्चुअल पीसी (लिनक्स के साथ संगत नहीं), और ओरेकल वर्चुअलबॉक्स।
चरण 15. "रिलीज़ उम्मीदवार" या बीटा संस्करण लॉन्च करें।
यह चरण उपयोगकर्ता को आपके ऑपरेटिंग सिस्टम के साथ संभावित समस्याओं के बारे में आपको सूचित करने की अनुमति देगा।
चरण 16. ऑपरेटिंग सिस्टम भी उपयोगकर्ता के अनुकूल होना चाहिए।
सुनिश्चित करें कि आप उपयोगकर्ता के अनुकूल सुविधाओं को जोड़ते हैं, इन्हें अपने डिजाइन का एक अभिन्न अंग बनाएं।
टिप्स
- संभावित गतिरोध और अन्य बग के लिए जाँच करें। बग, गतिरोध और अन्य समस्याएं आपके ऑपरेटिंग सिस्टम बिल्ड प्रोजेक्ट को प्रभावित करेंगी।
- सुनिश्चित करें कि आप सुरक्षा सुविधाओं को सर्वोच्च प्राथमिकता के रूप में लागू करते हैं यदि आप चाहते हैं कि सिस्टम ठीक से चले।
- अपने स्वयं के ऑपरेटिंग सिस्टम को विकसित करने में सहायता के लिए OSDev और OSDever जैसी वेबसाइटों का उपयोग करें। कृपया ध्यान दें कि अधिकांश उद्देश्यों के लिए, यदि आप उनके विकी का उपयोग करते हैं, और मंच में शामिल नहीं होते हैं, तो OSDev.org समुदाय अधिक खुश होगा। यदि आप किसी फ़ोरम में शामिल होने का निर्णय लेते हैं, तो एक पूर्व शर्त है: आपको वास्तव में C या C++ और x86 असेंबली भाषा के बारे में जानने की आवश्यकता है। आपको सामान्य और जटिल प्रोग्रामिंग अवधारणाओं जैसे लिंक्ड लिस्ट, क्यू आदि को भी समझना चाहिए। OSDev समुदाय, अपने विनियमों में, स्पष्ट रूप से कहता है कि उसका समुदाय नए प्रोग्रामर को पोषित करने के लिए नहीं बनाया गया है।
- शामिल न हों OSDev.org फोरम के साथ और फिर स्पष्ट प्रश्न पूछें। आपको केवल गाइड पढ़ने के लिए कहा जाएगा। आप जिस भी उपकरण का उपयोग करना चाहते हैं उसके लिए विकिपीडिया और निर्देश पढ़ें।
- यदि आप एक ऑपरेटिंग सिस्टम विकसित करने की कोशिश कर रहे हैं, तो आपको निश्चित रूप से प्रोग्रामिंग का "भगवान" माना जाता है।
- आपके द्वारा चुने गए प्रोसेसर आर्किटेक्चर के लिए आपको प्रोसेसर मैनुअल भी पढ़ना चाहिए था; क्या x86 (इंटेल), एआरएम, एमआईपीएस, पीपीसी, आदि। Google खोज ("इंटेल मैनुअल", "एआरएम मैनुअल", आदि) का उपयोग करके प्रोसेसर आर्किटेक्चर के लिए मैनुअल ढूंढना आसान है।
- एक बार सभी विकास कार्य पूर्ण हो जाने के बाद, तय करें कि आप कोड को ओपन कोड के रूप में जारी करना चाहते हैं, या कॉपीराइट द्वारा।
- शुरू मत करो प्रोग्रामिंग सीखना शुरू करने के लिए एक ऑपरेटिंग सिस्टम प्रोजेक्ट। यदि आप सी, सी++, पास्कल, या किसी अन्य उपयुक्त भाषा के बारे में नहीं जानते हैं, जिसमें पॉइंटर मैनिपुलेशन, लो-लेवल बिट मैनिपुलेशन, बिट शिफ्टिंग, इनलाइन असेंबली लैंग्वेज आदि शामिल हैं, तो आप ऑपरेटिंग सिस्टम के लिए तैयार नहीं हैं। विकास।
- SO को 'विस्तार' करने के लिए एक पूरी तरह से नया विभाजन बनाना एक अच्छा विकल्प हो सकता है।
- यदि आप एक आसान तरीका चाहते हैं, तो फेडोरा रिविजर, कस्टम निंबले एक्स, पप्पी रेमास्टर, पीसीलिनक्सओएस एमके लाइवसीडी, या एसयूएसई स्टूडियो और एसयूएसई कीवी जैसे लिनक्स डिस्ट्रोस पर विचार करें। हालाँकि, आपके द्वारा बनाया गया ऑपरेटिंग सिस्टम उस कंपनी का है जिसने पहले सेवा शुरू की थी (हालाँकि आपके पास इसे स्वतंत्र रूप से वितरित करने, इसे संशोधित करने और इसे GPL के तहत अपनी इच्छानुसार चलाने का अधिकार है)।
चेतावनी
- आपको दो सप्ताह के भीतर पूर्ण ऑपरेटिंग सिस्टम नहीं मिलेगा। बूट करने योग्य SO से प्रारंभ करें, फिर कूलर सामग्री पर जाएं।
- अपने ऑपरेटिंग सिस्टम को हार्ड ड्राइव पर लापरवाही से लिखने से यह पूरी तरह से क्षतिग्रस्त हो सकता है। सावधान रहे।
- यदि आप कुछ ऐसा करते हैं जिसकी अनुशंसा नहीं की जाती है, जैसे यादृच्छिक I/O बंदरगाहों पर यादृच्छिक बाइट्स लिखना, तो आप अपने ओएस को क्रैश कर देंगे, और (सिद्धांत रूप में) आपके हार्डवेयर को खराब कर सकते हैं।
- यह अपेक्षा न करें कि ऑपरेटिंग सिस्टम बनाना आसान है। बहुत सारी जटिल अन्योन्याश्रयताएँ हैं। उदाहरण के लिए, एक से अधिक प्रोसेसर को संभालने में सक्षम ऑपरेटिंग सिस्टम बनाने के लिए, आपके मेमोरी मैनेजर के पास एक ही समय में एक ही संसाधन तक पहुँचने से कई प्रोसेसर को रोकने के लिए एक "लॉकिंग" तंत्र होना चाहिए। इसके लिए उपयोग किए जाने वाले "लॉक" को यह सुनिश्चित करने के लिए एक शेड्यूलर की आवश्यकता होगी कि किसी भी समय केवल एक प्रोसेसर महत्वपूर्ण संसाधनों तक पहुंच बनाए और अन्य सभी को प्रतीक्षा करनी पड़े। वास्तव में, अनुसूचक स्मृति प्रबंधक की उपस्थिति पर निर्भर करता है। यह एक मृत अंत निर्भरता का एक उदाहरण है। इस तरह की समस्या को हल करने का कोई मानक तरीका नहीं है; प्रत्येक ऑपरेटिंग सिस्टम प्रोग्रामर से यह अपेक्षा की जाती है कि वह इससे निपटने के अपने तरीके को जानने के लिए पर्याप्त कुशल हो।
अतिरिक्त संसाधन
- दिशानिर्देश: स्क्रैच से लिनक्स
- बूटलोडर: GRUB
- वर्चुअल मशीन अनुप्रयोग: बोच, वीएम वेयर, एक्सएम वर्चुअल बॉक्स।
- प्रोसेसर मैनुअल: इंटेल मैनुअल
- SO विकास स्थल: OSDev, OSDever