मैं सी (और जीसीसी विशेष रूप से) कहेंगे सबसे अधिक इस्तेमाल किया इस उद्देश्य के लिए संकलक है।
अधिकांश आधुनिक कंपाइलर अब "सेगमेंट 16-बिट" का समर्थन नहीं करते हैं, और "इस कोड को 512 बाइट्स में फिट होना चाहिए" या सीपीयू मोड स्विच और असामान्य स्थितियों जैसी चीजों को संभालने के लिए कोई भी वास्तव में अच्छा नहीं है। इन कारणों से लोग जो "पीसी BIOS" (जीआरयूबी जैसे कुछ का उपयोग करने के विरोध में) के लिए अपने स्वयं के बूट लोडर लिखते हैं, वे असेंबली (NASM, FASM, GAS) की बोली का उपयोग करते हैं।
इसका मतलब यह नहीं है कि अन्य भाषाओं (और अन्य कंपाइलर्स) का उपयोग नहीं किया जा सकता है; और मैंने लोगों को विभिन्न प्रकार की भाषाओं (पास्कल, सी ++, सी #, आदि) में कर्नल लिखते देखा है। यह निम्न-स्तर कोड तक सीमित है (उदा। बूट कोड और कर्नेल)। एक बार जब आप इससे आगे निकल जाएंगे, तो आप उच्च टुकड़ों (ड्राइवर, फाइल सिस्टम, जीयूआई, अनुप्रयोगों) के लिए लगभग कुछ भी उपयोग कर सकते हैं। कुछ ऐसे लोग भी हैं जो ओएस के कर्नेल और/या उच्च टुकड़ों के लिए उपयोग करने के लिए अपनी भाषा का आविष्कार करते हैं।
मेरे पास वैकल्पिक लेकिन संभावित रूप से बेहतर भाषाओं के बारे में कोई राय है। मेरी राय यह है कि "संभावित रूप से बेहतर" उच्च "टॉवर ऑफ़ बेबेल" लागत को उचित नहीं ठहराता है (जहां अधिकांश प्रोग्रामर भाषा मतभेदों के कारण अधिकांश स्रोत कोड नहीं पढ़ सकते हैं) कि आईटी उद्योग पर कई अलग-अलग भाषाओं का अस्तित्व है पूरा। एक ओएस प्रोजेक्ट के लिए, एक वैकल्पिक भाषा में सैद्धांतिक फायदे हो सकते हैं, लेकिन व्यावहारिक रूप से उन फायदों को भाषा से परिचित लोगों की संख्या को कम करने के नुकसान से अधिक हो जाता है और मदद करने के लिए स्वयंसेवक हो सकता है (या तो जब आप अटक जाते हैं और मदद की ज़रूरत होती है बग, आदि; या बाद में जब आपको हजारों ड्राइवरों का योगदान करने के लिए स्वयंसेवकों की आवश्यकता होती है)।
मैं सादे पुराने असेंबलर (बूट कोड, कर्नेल कोड, ड्राइवर आदि के लिए) का उपयोग करता हूं। मैं इसकी अनुशंसा नहीं करता हूं; जब तक कि आप किसी अन्य भाषा की तुलना में असेंबली के साथ अधिक अनुभवी नहीं होते हैं और आपके पास उच्च स्तर की भाषा का उपयोग न करने के अन्य कारण हैं और पोर्टेबिलिटी कोई समस्या नहीं बन जाएगी।
मैं शायद जीसीसी की सिफारिश करता हूं (ओएस प्रोजेक्ट बनाने वाली विभिन्न/अलग-अलग बाइनरी को संकलित करने के लिए उपयोग करने के लिए एक मुक्त और मुक्त स्रोत कंपाइलर के रूप में)। हालांकि, मैं गैर मानक भाषा एक्सटेंशन और किसी भी "कार्यान्वयन परिभाषित" व्यवहार (चाहे आप कौन सी भाषा और आप किस कंपाइलर का उपयोग करते हैं) के उपयोग से बचने की सलाह भी देंगे, ताकि आप किसी भी समय किसी भी अन्य कंपाइलर पर स्विच कर सकें (किसी के लिए कारण) अधिक आसानी से।
[मानक संदर्भ] (http://wiki.osdev.org/C%2B%2B_Bare_Bones) ... बूट लोडिंग के लिए आपको थोड़ा असेंबलर की आवश्यकता होगी, और आपको कस्टम लिंकर स्क्रिप्ट चाहिए सब कुछ जगह में है, लेकिन सिद्धांत रूप में सी ++ का उपयोग मुख्य विकास भाषा के रूप में करने से आपको रोक नहीं रहा है। आपके पास पुस्तकालय में से कोई भी नहीं होगा, हालांकि, बस इसे ध्यान में रखें। –
प्रयास इस नए ऑपरेटिंग सिस्टम पर काम करने के लिए कंपाइलर के रनटाइम समर्थन पुस्तकालयों (उदाहरण के लिए सीआरटी) को पोर्ट करने में है। पहले सी संस्करण को पोर्ट करना बुद्धिमान होगा। यह बहुत छोटा है। और हाँ, यह चिकन-एंड-अंडे की समस्या आमतौर पर ऐसी परियोजना को समाप्त करती है। –
यदि आप मास्टर बूट रिकॉर्ड की सामग्री बनाने के लिए सी (केवल एक * shudder * C++) कंपाइलर का उपयोग कर सकते हैं तो मुझे आश्चर्य होगा। अंतरिक्ष की मात्रा छोटी है और आपको इसके हर इंच की आवश्यकता होगी। यही कारण है कि भगवान ने असेंबलरों को बनाया। यदि एमबीआर डिस्क से सामान के मनमाने ढंग से बड़े हिस्से को पढ़ सकता है, तो आप उस चीज़ को उस सुंदर चीज़ में बना सकते हैं जो आपको पसंद है: इसे पढ़ें, इसके प्रारंभिक बिंदु पर जाएं। –