2008-10-10 15 views
13

यह एक बहुत-बहुत सैद्धांतिक सवाल है, लेकिन ..पाइथन कहने में कितना ऑपरेटिंग सिस्टम लिखा जा सकता है?

एक ऑपरेटिंग सिस्टम का कितना अजगर, रूबी, पर्ल, या लिस्प, हास्केल आदि की तरह एक भाषा में लिखा जा सकता है?

ऐसा लगता है कि init.d जैसी कई चीजें एक स्क्रिप्टिंग भाषा में छोटी हो सकती हैं। फ़ायरवॉल-डिवाइस-ओएस (m0n0wall) में से एक PHP को सिस्टम-कॉन्फ़िगरेशन (बूट सहित) के लिए उपयोग करता है। और कोई तर्क दे सकता है कि "emacs एक ओएस है, जो ज्यादातर लिस्प में लिखा जाता है" ..

बेशक ऐसे बिट्स हैं जो असेंबली/सी होना चाहिए, लेकिन नियमित रूप से कितना नियमित हो सकता है .py/rb/.pl/.el/.hk फ़ाइलें ..? यह सबसे अच्छा प्रदर्शन नहीं हो सकता है, लेकिन अब तक, सबसे आसान-से-संशोधित ओएस कभी भी होगा ...

+1

आपके द्वारा उल्लिखित फ़ायरवॉल डिवाइस ओएस मोनोवल (http://m0n0.ch/wall/) है जिसमें से pfSense एक वंशज होता है। – SingleNegationElimination

+4

रचनात्मक क्यों नहीं? प्रश्न अच्छी तरह से परिभाषित है और निश्चित रूप से उत्तर दिया जा सकता है। –

+0

@Mechanicalsnail मैंने इसे फिर से खोलने के लिए एक कस्टम मॉडरेटर ध्वज उठाया। – cybermonkey

उत्तर

21

तकनीकी रूप से, यदि आप ऐसा करने के लिए एक कंपाइलर लिखते हैं, तो यह कोई भी हो सकता है। ओएसई जावा (जेएनओडी), .NET (एमओएसए, सिंगुल्युलिटी, शार्पोस, कॉसमॉस), हास्केल (हाउस), पायथन (यूनुन्यूनियम), आदि

संपादित करें: मैं बहुत से लोगों के बारे में बात कर रहा हूं निम्नतम स्तर एक ऐसा क्षेत्र है जहां यह नहीं किया जा सका; यह सच नहीं है।

कोई कारण नहीं है कि एक्स भाषा के लिए कंपाइलर को निम्न स्तर के संचालन को संभालने और भाषा को बेनकाब करने के लिए विस्तारित नहीं किया जा सकता है। सभी कार्यक्षमता किसी भी भाषा से प्राप्त की जा सकती है, यह केवल नौकरी के लिए सही उपकरण चुनने का मामला है। कभी-कभी यह पायथन होता है, कभी-कभी यह सी होता है, कभी-कभी यह असेंबली होती है।

शुद्ध उच्च स्तरीय ओएस डोन राइट (टीएम) देखने के लिए कॉसमॉस और शार्पोस जैसी परियोजनाओं को देखें।

+0

हाहा, पकड़ के लिए धन्यवाद। यह मेरे सोने के समय से पहले है;) –

+0

जेएनओड का माइक्रोक्रोनल असेंबलर में लिखा गया है, मुझे विश्वास है - क्या ऐसी भाषा के लिए आवश्यक नहीं है जिसके लिए वीएम की आवश्यकता हो? सबसे निचले स्तर पर किसी भी प्रयोग योग्य ओएस में कम से कम एक छोटे से असेंबलर होते हैं। सी असेंबलर को कम करता है क्योंकि यह कम स्तर के संचालन को मूल रूप से अनुमति देता है। – tloach

+0

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

2

पायथन मूल रूप से हार्डवेयर से बात करने के लिए संरचनाएं प्रदान नहीं करता है, जैसे स्मृति-मैप किए गए I/O के लिए कच्चे पॉइंटर्स और सी/एएसएम द्वारा प्रदान की जाने वाली कई अन्य संरचनाएं। हालांकि, इस बात का सबूत है कि ओएस में अधिकांश चीजें एक और अधिक सारणीबद्ध भाषा में लिखी जा सकती हैं; माइक्रोसॉफ्ट से Singularity OS लगभग विशेष रूप से सी # के रूपों में लिखा गया है। हस्तक्षेप करने वाले हैंडलर और ऐसे में करने के लिए सी/एएसएम की एक बहुत छोटी राशि है, लेकिन बाकी सब कुछ, जिसमें हम में से अधिकांश "कर्नेल" मानते हैं, अनिवार्य रूप से किसी भी ट्यूरिंग-पूर्ण भाषा में किया जा सकता है।

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

+0

कोई कारण नहीं है कि इंटरप्ट हैंडलर और ऐसे में सी/एएसएम होना चाहिए। उदाहरण के लिए, कॉसमॉस और शार्पोस दोनों सी # के माध्यम से इसके प्रत्येक बिट को संभालते हैं (और इनलाइन एएसएम, एक्स # (कॉसमॉस) को उत्सर्जित करने का उनका कस्टम तरीका)। संकलक को इस कोड को उत्सर्जित करने की आवश्यकता है। –

+1

मैं तर्क दूंगा कि कॉसमॉस और शार्पोस एएसएम को अधिक पोर्टेबल, वर्बोज़ (लेकिन टाइप-सेफ) सिंटैक्स में लपेटने से ज्यादा कुछ नहीं करते हैं। यहां कोड (http://www.gocosmos.org/Blog/20080428.en.aspx) असेंबली की तरह दिखता है। यहां तक ​​कि यदि आप इसे पायथन में लिख सकते हैं, तो वह उस बिंदु पर सभी पायथनिक नहीं होगा। –

+0

मुझे लगता है कि कॉसमॉस अमूर्तता के साथ काफी दूर नहीं चला है। कंपाइलर वास्तव में इन निम्न-स्तर के विवरणों को संभालना चाहिए और इसे उच्च स्तर पर तार्किक तरीके से उजागर करना चाहिए। उस ने कहा, प्रबंधित कर्नेल के लिए जाने का एक लंबा रास्ता है। –

2

गिरी के अलावा (और इस से, मेरा मतलब गिरी, microkernel शैली), और कुछ runtimes कहा गतिशील भाषाओं से प्रत्येक के लिए संकलित करने के लिए, बस कुछ के बारे में और सब कुछ जा सकता है अगर आप अपने खुद के ऑपरेटिंग सिस्टम बना रहे थे । यह सिर्फ व्यावहारिक नहीं है। हेक, init.d मुख्य रूप से sh में लिखा गया है जहां तक ​​मुझे पता है। लेकिन sh, शक्तिशाली नहीं होने पर, बहुत हल्का है और जहां तक ​​मुझे पता है, यह क्या करता है में कुशल है। पाइथन, पर्ल, इत्यादि जैसी उच्च स्तरीय भाषाएं इसे ठीक से संभाल सकती हैं, लेकिन यह बहुत धीमी होगी, और दुभाषियों के उदाहरणों के लिए बहुत अधिक स्मृति लेगी।

यह संभव है, यह व्यावहारिक नहीं है।

1

(जैसे पायथन) में लिखे गए कर्नेल/डिवाइस ड्राइवर आदि की कल्पना करना मुश्किल है - स्मृति प्रबंधन सिरदर्द का थोड़ा सा होगा।

दूसरी ओर, लगभग सभी उपयोगकर्ता स्थान कोड हो सकता है। लिनक्स के तहत, "init" मूल मशीन-कोड बाइनरी होने की कोई आवश्यकता नहीं है - यह एक अजगर लिपि या कुछ हो सकती है, कोई समस्या नहीं है।

3

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

3

लिस्प में लिखे गए ओएस के उदाहरण के लिए Genera/OpenGenera देखें जो वास्तव में LispMachines पर थोड़ी देर के लिए उपयोग में था।
हास्केल में House है।

1

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

1

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

मूल प्रश्न का अंतिम जवाब लगभग सभी है, लेकिन सभी नहीं। एकमात्र स्वीकृति ऐसी भाषाएं हैं जो सीपीयू स्तर के निर्देशों तक पहुंच सकती हैं।

+1

आपको एहसास है कि हर भाषा का अनुवाद दूसरे में किया जाता है, है ना? सी को असेंबली में संकलित किया जाता है, जिसे तब मशीन कोड में इकट्ठा किया जाता है। यह कहने जैसा है कि सी में एक कर्नेल लिखना वास्तव में इसे असेंबली में लिख रहा है ... –

+0

हाँ, लेकिन सी # को आईएल में संकलित किया गया है, मूल कोड नहीं (जब तक कि आप मोनो की स्थिर संकलन सुविधा का उपयोग नहीं करते)। तो कड़ाई से बोलना, ओएस बनाने के लिए सी # का उपयोग करना संभव नहीं है। सी # कंपाइलर के एक संशोधित संस्करण का उपयोग करना जो एएसएम उत्पन्न करता है। यह बहस योग्य है कि क्या वह अभी भी सी # होगा। – gbjbaanb

1

"cleese" - एक ऑपरेटिंग सिस्टम लगभग पूरी तरह से लिखा अजगर

+1

मुझे लिंक पर 404 मिलते हैं –

+0

ओह, निश्चित - धन्यवाद! – dbr

7

में मैं हैरान कोई भी जावा हार्डवेयर उल्लेख किया गया है। एक उच्च स्तरीय प्रोसेसर बनाकर हार्डवेयर के विकास को आगे बढ़ाने के लिए यह एक प्रेरणा होनी चाहिए।

एक और प्रोजेक्ट है जिसे मैंने अभी "Pycorn" कहा है।

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

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

एक पीपीजीए here पर पायथन को लागू करने के बारे में एक दिलचस्प चर्चा है।

लोगों को यह दावा करने के लिए कि आप इनलाइन असेंबली पायथनिक नहीं बना सकते हैं, एक अन्य नोट पर (एक पायथन ओ/एस को एक पायथन प्रोसेसर पर प्राप्त करने के लिए), यह एक सरलता से असेंबली उत्सर्जित करना बहुत आसान है, पूर्व:

asm = MetaASM() 
asm.r1 = 1234 
asm.r2 = r1 + 5 
asm.io.out(r1) 

आप प्रदर्शन की जरूरत है या वास्तुकला विशिष्ट कार्यों/रजिस्टरों के लिए वास्तुकला विशिष्ट विधानसभा के लिए स्विच कर सकता है जब आवश्यक:

asm = ASM("IA-32") 
asm.xor(asm.eax, asm.eax) 
asm.cr0 = asm.eax 
asm.invtlb 
asm.fs.0x0= asm.eax 
asm.al = 123 
asm.dword.ptr.eax = 1234 # mov dword ptr [eax], 1234 
asm.push(asm.eax) 

CorePy इस विषय पर ब्याज की बात आती है।

+1

दूसरे विचार पर, हमें शायद जावा प्रोसेसर से चिपकना चाहिए, क्योंकि जावा कोड पायथन की तुलना में अधिक निर्धारक है, और इसलिए तेज़ गति के लिए हमेशा अधिक सस्ता होगा। किसी भी मामले में, असुरक्षित चीजें जो सीमाओं से बाहर स्मृति तक पहुंचने से होती हैं, उन्हें जाना पड़ता है। –

+0

@Quonux सवाल यह पूछता है कि क्या एक ओएस उच्च स्तर की भाषा में लिखा जा सकता है, आपकी टिप्पणी वास्तव में यहां रचनात्मक नहीं है। – cybermonkey

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