एक 286 पर लिनक्स?


15

मेरे पास 286 नहीं है और न ही मैं एक पर लिनक्स चलाने का इरादा रखता हूं। हालाँकि 286 से संरक्षित मोड है, क्यों अक्सर यह कहा जाता है कि लिनक्स को 386 सीपीयू या उच्चतर की आवश्यकता होती है?

से http://tuxmobil.org/286_mobile.html यह कि लिनक्स की ELKS संस्करण एक 286 पर चला सकते हैं लगता है, यह सही है? 286 सीपीयू पर कर्नेल को चलने देने के लिए क्या (यदि कोई है) संशोधन किए गए हैं?

अब स्पष्ट रूप से मैं समझता हूं कि 386 के लिए संकलित एक कर्नेल 286 सीपीयू पर निष्पादित नहीं कर सकता है, जो कि 16-बिट है। तो मेरा सवाल है, क्यों मानक लिनक्स कर्नेल को 286 के लिए संकलित नहीं किया जा सकता है, और फिर 286 पर निष्पादित किया जा सकता है? क्या Linux को हार्डवेयर VM86 समर्थन की आवश्यकता है?


6
16-बिट ओवरकिल है। लिनक्स को चलाने के लिए 8-बिट पर्याप्त हैं। दिमित्री ग्रिनबर्ग की परियोजना
मार्को


मिनिक्स 8086 (8 बिट, 128KiB रैम IIRC) पर चला। माइक्रोसॉफ्ट का क्सिक्स 80286 पर चला। कुछ अशिक्षित आत्मा ने लिनक्स को 8086 में भी चमकाने की कोशिश की (कुछ सफलता के साथ)। लेकिन नहीं, इस तरह की सीमित मशीन पर "पूर्ण लिनक्स अनुभव" संभव नहीं होगा।
वॉनब्रांड 15'13

आप बहुत सीमित उपकरणों पर चलने के लिए लिनक्स को जूते कर सकते हैं। लेकिन यह उदाहरण के लिए डेस्कटॉप मशीन के रूप में बहुत उपयोगी नहीं है। जब तक आप अपने लक्ष्यों को नहीं बता देते, तब तक यह बताना मुश्किल है कि 'लिनक्स ऑन 286' आपके लिए व्यवहार्य है।
9000

जवाबों:


4

286 संरक्षित मोड (पीएम) 386 की पेशकश के लिए मौलिक रूप से अलग है। 286 पीएम को एक प्रोटोटाइप के रूप में सोचें, जिसमें इतनी कमियां थीं कि लगभग किसी ने भी इसका उपयोग नहीं किया था, और 386 के लिए जमीन से पूरी तरह से पूरी तरह से बदल दिया गया था।

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

यह उस समय उपलब्ध सभी (MS-DOS) कार्यक्रमों के साथ पूरी तरह से असंगत था, इसलिए एक बार जब आप पीएम थे तो आप उन कार्यक्रमों में से किसी का भी उपयोग नहीं कर सकते थे, जिनका आप उपयोग करते थे।

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

इसका मतलब यह था कि 286 पीएम का उपयोग करने से आपको बड़ी संख्या में ट्रिक्स के बिना सामान्य डॉस प्रोग्राम चलाने से रोका जा सकता है। ऐसे समय में जब केवल डीओएस कार्यक्रम थे, यह पीएम का उपयोग करने के प्रयास के लायक नहीं था।

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

इंटेल ने इन कमियों को पहचाना और 386 में एक बिल्कुल नए पीएम का निर्माण किया। फ्लैट मेमोरी मॉडल 4 जीबी तक की मेमोरी को सरलता से एक्सेस करता है। सीपीयू एक-दो निर्देशों के साथ पीएम के अंदर और बाहर जा सकता है, ताकि किसी अनाड़ी रिबूट प्रोटोकॉल की जरूरत न पड़े। VM86 का अर्थ है कि अधिकांश समय आपको PM से बाहर निकलने की आवश्यकता नहीं है, आप PM में रहते हुए भी DOS प्रोग्राम चला सकते हैं।

इन सभी सुधारों का मतलब था कि 386 PM न केवल अधिक कार्यात्मक था, बल्कि साथ ही काफी अधिक संगत था।

दूसरे शब्दों में, 286 और 386 संरक्षित मोड के बीच आम तौर पर एकमात्र चीज नाम है। यही कारण है कि पीएम ऑपरेटिंग सिस्टम आमतौर पर 386 या नए हैं। 286 PM के लिए समर्थन जोड़ना एक पूरी तरह से स्वतंत्र प्रयास होगा, जिसमें कम या कोई कोड पूरी तरह से अलग 386 PM के साथ साझा नहीं किया जा सकेगा।

इसके विपरीत, ३ contrast६ पीएम ३२-बिट सीपीयू के अंतिम समय तक ठीक उसी तरह से काम करता है, और भले ही आप ६४-बिट सीपीयू पर ३२-बिट सॉफ़्टवेयर चलाते हों।


3

असेंबली में लिखे गए कर्नेल में कुछ भाग होते हैं और उन्हें 286 का समर्थन करने के लिए फिर से लिखना होगा।

ईएलकेएस के बारे में, उनके अक्सर पूछे जाने वाले प्रश्नों में, यह इंगित करता है कि यह लिनक्स कर्नेल का सबसेट है, इसलिए शायद उन्होंने केवल पूर्ण आवश्यकताओं को चित्रित किया।


1
286, 80287 के लिए एक गणित सहसंसाधक था।
रेना

3

मुझे लगता है कि मेरे सवाल का असली जवाब यह है:

प्रत्येक प्रमुख सीपीयू वास्तुकला (या प्रमुख संशोधन) को सी कोड के अलावा कुछ विधानसभा समर्थन कोड की आवश्यकता होती है।

यहां तक ​​कि अगर आपको लिनक्स कर्नेल को 16-बिट 286 मशीन कोड में संकलित करने के लिए जीसीसी मिला है, तब भी आवश्यक 16-बिट 286 संगत विधानसभा कोड गायब होगा।

दूसरे शब्दों में, कर्नेल सबसे अच्छा केवल आंशिक रूप से बनाया जाएगा। कोई भी आर्किटेक्चर विशिष्ट असेंबली कोड असेंबल करने में विफल होगा क्योंकि यह केवल उस आर्किटेक्चर के लिए नहीं लिखा गया है।

इसके आधार पर मैं यह मान रहा हूं कि यह वही है जैसे कि ELKS और इसी तरह की परियोजनाएं जब 286 या अन्य आर्किटेक्चर पर लिनक्स को लागू करती हैं - तो वे उस अनुपलब्ध विधानसभा समर्थन कोड को लागू करते हैं।


3

80386 मेमोरी सेगमेंट के अलावा पेजिंग का समर्थन करता है जबकि 286 केवल मेमोरी सेगमेंटेशन का समर्थन करता है। लिनक्स भारी रूप से पेजिंग सपोर्ट पर निर्भर करता है, एक फ्लैट मेमोरी स्कीम का उपयोग करता है जो मूल रूप से सभी सेगमेंट रजिस्टर को 0 पर सेट करता है और एप्लिकेशन को प्रबंधित करने के लिए पेजिंग का उपयोग करता है। लिनक्स को 286 में पोर्ट करने के लिए, मौलिक मेमोरी मैनेजर को बिना पेजिंग के खंडित मोड में काम करने के लिए एक पूर्ण रीडिज़ाइन की आवश्यकता होती है जो संभवतः बहुत काम है।


2

क्या Linux को हार्डवेयर VM86 समर्थन की आवश्यकता है?

मैं एक विधानसभा आदमी नहीं हूँ, लेकिन इस के अनुसार :

8086 आर्किटेक्चर के 32-बिट एक्सटेंशन के मूल कार्यान्वयन के रूप में, 80386 इंस्ट्रक्शन सेट, प्रोग्रामिंग मॉडल और बाइनरी एन्कोडिंग अभी भी सभी 32-बिट x86 प्रोसेसर के लिए आम भाजक हैं, इसे x86, IA-32, या i386 कहा जाता है। संदर्भ के आधार पर -आर्किटेक्चर।

386 286 से विस्तारित अनुदेश सेट का प्रतिनिधित्व करता है , इसलिए कौन जानता है कि बंदरगाह कितना कठिन होगा। पर्याप्त रूप से पर्याप्त है कि लगभग किसी ने भी इसे आज़माने की जहमत नहीं उठाई है ... मुझे लगता है कि आप इस बारे में ELKS के लोगों से पूछ सकते हैं।


2

सबसे बड़ा कारण यह है कि मूल GNU परियोजना ने 32-बिट मशीनों (जैसे कि 1980 के दशक के यूनिक्स वर्कस्टैटन जैसे) को किसी भी छोटे का समर्थन करने के लिए परेशान करने के बजाय लक्ष्य किया, इसलिए 16-बिट कोड पीढ़ी के लिए पूरे GNU टूलचैन अनुपयुक्त था। शुरुआती, असेंबली-हेवी, सेगमेंट्स का उपयोग करके लिनक्स कर्नेल को 286 में पोर्ट करना किसी भी अन्य पोर्टिंग लक्ष्य की तुलना में आसान होगा - यदि जीसीसी में 286 संरक्षित-मोड कोड का उत्पादन करने की क्षमता थी। लेकिन 286 संरक्षित मोड पर जीसीसी को लक्षित करना एक अप्रचलित प्रोसेसर का समर्थन करने के लिए एक बड़ी परियोजना होगी।


1

हाल ही में लिनक्स कर्नेल एक समर्थित मंच के रूप में 386 को त्याग दिया है और लिनक्स कर्नेल करता नहीं समर्थन इंटेल 286 processors..80286 एक 32bit सीपीयू, जो बूट के लिए आवश्यक है नहीं है।


5
लिनक्स मूल रूप से 1991 में 386 पर लिखा गया था। तब तक 286 पहले ही पुराने हो चुके थे, और मुख्य गिरी के पेड़ के पास 286 का समर्थन करने के लिए कभी भी कोई
बैककोड

यह हो सकता है, लेकिन सवाल यह था कि यह मामला क्यों है? इसलिए नहीं कि निर्णय 286/386 (जो स्पष्ट है) के लिए समर्थन छोड़ने के लिए किया गया था, लेकिन ऐसे तकनीकी कारण क्या हैं जो इतने पुराने प्रोसेसर का समर्थन आसानी से नहीं कर सकते हैं। यानी कर्नेल एक 32-बिट CPU की आवश्यकता क्यों है? 286 के लिए कर्नेल को संकलित क्यों नहीं किया जा सकता है?
ioctlvoid

क्या कर्नेल में भी अंकगणित सह-प्रोसेसर नहीं था क्योंकि यह आवश्यकताएं हैं?
बोन्सी स्कॉट

नहीं, कर्नेल गणित के अनुकरण का समर्थन करता है, कम से कम उसने पहले ऐसा किया था। इसलिए आप टूटे हुए एफपीयू के साथ सीपीयू पर लिनक्स कर्नेल भी चला सकते हैं। हालाँकि, 286 ने अभी भी एक गणित सह-प्रोसेसर, 80287 का समर्थन किया।
ioctlvoid

मेरे जवाब के एक संपादित आउट भाग में मैंने संकेत दिया कि लिनक्स कर्नेल में अनुकरण कार्यान्वित किया जाता है। इसका उपयोग लिनक्स को S / 390 (उर्फ IBM मेनफ्रेम) में पोर्ट करने के लिए भी किया जाता था क्योंकि इसमें पोर्ट किए जाने के समय इसकी फ्लोटिंग पॉइंट यूनिट नहीं थी।
दीदी कोहेन

1

लिनक्स x86 को आसानी से 80286 पर वापस पोर्ट नहीं किया जा सकता क्योंकि यह 16-बिट प्रोसेसर है और लिनक्स x86 में 32-बिट प्रोसेसर की आवश्यकता होती है।

विशेष रूप से, 286 पर रजिस्टर अभी भी केवल 16-बिट्स चौड़े थे। EX रजिस्टर में से कोई भी उपलब्ध नहीं थे। इसके अलावा, मेमोरी सेगमेंट और ऑफसेट अभी भी केवल 16-बिट लंबे थे। कार्यक्रमों को अभी भी निकट / दूर कोड और डेटा से निपटना था।

इसका मतलब यह है कि लिनक्स / 286 को लिनक्स / 386 की तुलना में मौलिक रूप से अलग कर्नेल और उपयोगकर्ता एपीआई की आवश्यकता होगी। हर विधानसभा स्रोत फ़ाइल और कई सी स्रोत फ़ाइलों को फिर से लिखना होगा। यह Win16 बनाम Win32 के लिए प्रोग्रामिंग के बीच अंतर की तरह होगा।

संक्षेप में, आप किसी भिन्न CPU के संकलन के लिए GCC को नहीं बता सकते। 16-बिट वातावरण के लिए हर बिट कोड को फिर से लिखना होगा।


1
कृपया बढ़ी हुई सुगमता के लिए मार्कडाउन के उपयोग पर विचार करें ।
lord.garbage

0

80286 पर चलने के लिए लिनक्स को प्राप्त करने के लिए मैंने जो विहित तरीका पढ़ा है, उसे वर्चुअल मशीन के अंदर चलाना होगा। यही Fabrice Bellard ने यहां किया । आपको वर्चुअल मशीन को स्वयं लागू करना होगा, या पोर्ट एक करना होगा।

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