2011-08-29 10 views
6

उम्मीद है कि यह उत्तर देने के लिए एक अच्छा त्वरित सवाल है।शौक ऑपरेटिंग सिस्टम बनाने के लिए सबसे सम्मानित भाषा और मुफ्त कंपाइलर?

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

और, आपके उत्तर से निम्नलिखित, क्या आप मुफ्त कोड (और शायद यहां तक ​​कि ओपन सोर्स) कंपाइलर को स्रोत कोड को बाइनरी में संकलित करने की सलाह देंगे?

पीएस: मुझे पूरी तरह से पता है कि ओएस लिखना एक बहुत चुनौतीपूर्ण काम है और मुझे यकीन है कि मैं कभी खत्म नहीं करूंगा। मैं व्यक्तिगत रुचि वाले शोध कार्य का संचालन कर रहा हूं और कम से कम एमबीआर और सरल कंसोल आईओ के साथ बहुत ही बुनियादी कर्नेल बनाना चाहता हूं।

+1

[मानक संदर्भ] (http://wiki.osdev.org/C%2B%2B_Bare_Bones) ... बूट लोडिंग के लिए आपको थोड़ा असेंबलर की आवश्यकता होगी, और आपको कस्टम लिंकर स्क्रिप्ट चाहिए सब कुछ जगह में है, लेकिन सिद्धांत रूप में सी ++ का उपयोग मुख्य विकास भाषा के रूप में करने से आपको रोक नहीं रहा है। आपके पास पुस्तकालय में से कोई भी नहीं होगा, हालांकि, बस इसे ध्यान में रखें। –

+1

प्रयास इस नए ऑपरेटिंग सिस्टम पर काम करने के लिए कंपाइलर के रनटाइम समर्थन पुस्तकालयों (उदाहरण के लिए सीआरटी) को पोर्ट करने में है। पहले सी संस्करण को पोर्ट करना बुद्धिमान होगा। यह बहुत छोटा है। और हाँ, यह चिकन-एंड-अंडे की समस्या आमतौर पर ऐसी परियोजना को समाप्त करती है। –

+0

यदि आप मास्टर बूट रिकॉर्ड की सामग्री बनाने के लिए सी (केवल एक * shudder * C++) कंपाइलर का उपयोग कर सकते हैं तो मुझे आश्चर्य होगा। अंतरिक्ष की मात्रा छोटी है और आपको इसके हर इंच की आवश्यकता होगी। यही कारण है कि भगवान ने असेंबलरों को बनाया। यदि एमबीआर डिस्क से सामान के मनमाने ढंग से बड़े हिस्से को पढ़ सकता है, तो आप उस चीज़ को उस सुंदर चीज़ में बना सकते हैं जो आपको पसंद है: इसे पढ़ें, इसके प्रारंभिक बिंदु पर जाएं। –

उत्तर

3

सी और असेंबली।

सी कंपाइलर के लिए मैं जीसीसी कंपाइलर की अनुशंसा करता हूं। X86 असेंबली के लिए मैं नासम assmebler की सलाह देते हैं। यदि आप इंटेल सिंटैक्स परटी सिंटैक्स पसंद करते हैं, तो आप जीसीसी के साथ आने वाली गैस का भी उपयोग कर सकते हैं।

बूट क्षेत्र को असेंबली में लिखा जाना है।

कर्नेल किसी भी भाषा में लिखा जा सकता है। आपको शायद वहां असेंबली की आवश्यकता है, लेकिन यदि आप चाहें तो उच्च स्तर की भाषाओं (जैसे सी) का भी उपयोग कर सकते हैं।

यदि आप कुछ बहुत आसान चाहते हैं तो आप इसे सभी असेंबली में लिख सकते हैं।

अधिक जानकारी के लिए: http://wiki.osdev.org/Main_Page

+1

गैस इंटेल सिंटैक्स को भी समझती है (.intel_syntax निर्देश के साथ) – dimitri

+0

ओएसडीईवी और अन्य पुरानी साइट (मैं भूल जाता हूं) पर ट्यूटोरियल्स के रूप में सब कुछ बहुत ही सरल पोस्ट किया गया है। मुझे संक्षेप में काम करने के कुछ ही समय बाद ये सूख जाता है लेकिन इन्हें जीसीएलआईबी या न्यूलिब जैसे मानक पुस्तकालयों के कार्यान्वयन में माइग्रेट करने से पहले। – John

4

मैं सी (और जीसीसी विशेष रूप से) कहेंगे सबसे अधिक इस्तेमाल किया इस उद्देश्य के लिए संकलक है।

अधिकांश आधुनिक कंपाइलर अब "सेगमेंट 16-बिट" का समर्थन नहीं करते हैं, और "इस कोड को 512 बाइट्स में फिट होना चाहिए" या सीपीयू मोड स्विच और असामान्य स्थितियों जैसी चीजों को संभालने के लिए कोई भी वास्तव में अच्छा नहीं है। इन कारणों से लोग जो "पीसी BIOS" (जीआरयूबी जैसे कुछ का उपयोग करने के विरोध में) के लिए अपने स्वयं के बूट लोडर लिखते हैं, वे असेंबली (NASM, FASM, GAS) की बोली का उपयोग करते हैं।

इसका मतलब यह नहीं है कि अन्य भाषाओं (और अन्य कंपाइलर्स) का उपयोग नहीं किया जा सकता है; और मैंने लोगों को विभिन्न प्रकार की भाषाओं (पास्कल, सी ++, सी #, आदि) में कर्नल लिखते देखा है। यह निम्न-स्तर कोड तक सीमित है (उदा। बूट कोड और कर्नेल)। एक बार जब आप इससे आगे निकल जाएंगे, तो आप उच्च टुकड़ों (ड्राइवर, फाइल सिस्टम, जीयूआई, अनुप्रयोगों) के लिए लगभग कुछ भी उपयोग कर सकते हैं। कुछ ऐसे लोग भी हैं जो ओएस के कर्नेल और/या उच्च टुकड़ों के लिए उपयोग करने के लिए अपनी भाषा का आविष्कार करते हैं।

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

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

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

1

मैं लिनक्स से शुरू करूंगा क्योंकि बुनियादी कार्यक्षमता के लिए आपको खुली स्रोत सामग्री के लिए पोर्ट की आवश्यकता होगी, उस प्लेटफॉर्म के लिए लिखा जाएगा।

मैं जहाँ तक newlib हो रही है, क्योंकि यह http://sources.redhat.com/newlib/ gclib से लागू करने के लिए आसान है लेकिन के रूप में अच्छा नहीं है और फिर सोचा, मैं बजे इमारत लिनक्स फिर से और अन्य लोगों का उपयोग कर 'करने लगे।

मुफ्त कंपाइलर के रूप में, वे लिनक्स पर बहुत अधिक मुफ्त हैं। जैसा कि अन्य लोगों ने यहां गैस का उल्लेख किया है या असेंबलर हैं, लेकिन क्रॉस संकलन की स्थापना और आपके निष्पादन योग्य प्रारूप को चुनने के लिए अंतिम टूल सेट पर बसने से पहले पूरा करने की आवश्यकता हो सकती है। विश्वसनीयता, गति, और तीसरे पक्ष के ऐप्स को पोर्ट करने के कारणों के लिए, मैं अपने कस्टम ओएस पर एक बिल्ड वातावरण को कार्यान्वित करना चाहता हूं और इससे उच्च स्तर के कोडिंग टूल्स सामने आ सकते हैं। इसलिए आपको वास्तव में उन टूल को देखने की आवश्यकता है जिन्हें आप स्वयं स्रोत कोड से बना सकते हैं। स्क्रैच से लिनक्स (http://www.linuxfromscratch.org/lfs/) पार संकलन के लिए एक महान परिचय है- एक ही वास्तुकला, अलग (पार) वातावरण।

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

+0

असल में, आपको lib (newlib या gclib) के बारे में सोचने की आवश्यकता है क्योंकि वे आपके शौक ओएस पर निर्माण वातावरण स्थापित करने के लिए न्यूनतम आवश्यक हैं और इसलिए इसे उपयोगी बनाते हैं। – John

संबंधित मुद्दे