32-बिट कर्नेल पर 64-बिट यूजरलैंड सॉफ़्टवेयर को चलाने में क्या लगता है?


10

लिनक्स और विंडोज पर, मुझे इस स्थिति के लिए उपयोग किया जाता है कि मुझे 64-बिट कर्नेल की आवश्यकता होती है जिसमें मल्टीकोर / WoW के साथ एक सिस्टम है जहां मैं 32-बिट और 64-बिट सॉफ़्टवेयर साइड-बाय-साइड चला सकता हूं।

और फिर, वर्षों पहले इसने मेरे दिमाग को उड़ा दिया जब किसी ने मुझे दिखाया कि मैकओएस 10.6 स्नो लेपर्ड कर्नेल के साथ 64-बिट अनुप्रयोगों को 32-बिट मोड में चला सकता है। यह अब काफी हद तक भुलाया जा सकता है क्योंकि यह एक बार का प्रौद्योगिकी संक्रमण था। मोबाइल स्पेस में वक्र के आगे हार्डवेयर के साथ, जहां तक ​​मुझे पता है कि आईओएस और एंड्रॉइड के लिए 64-बिट में जाने की आवश्यकता नहीं थी।

मेरा प्रश्न: 32-बिट लिनक्स कर्नेल (i386 या armhf) में समान क्षमता प्राप्त करने में क्या लगेगा?

मैं समझता हूं कि यह संभवतः तुच्छ नहीं है। यदि ऐसा होता, तो Microsoft फीचर को Windows XP 32-बिट में डाल सकता था। हालांकि सामान्य आवश्यकताएं क्या हैं? क्या कोई प्रस्तावित पैच या प्रूफ-ऑफ-कॉन्सेप्ट है?

एम्बेडेड दुनिया में मुझे लगता है कि यह विशेष रूप से सहायक होगा, क्योंकि 64-बिट समर्थन लंबे समय तक डिवाइस ड्राइवरों में पिछड़ सकता है।


क्या आप सुनिश्चित हैं कि स्नो लेपर्ड 32-बिट कर्नेल के साथ 64-बिट ऐप्स चला सकता है? IIRC कर्नेल भी सक्षम हार्डवेयर पर 64-बिट में अपडेट किया गया था।
मुरु

5
कोई बात नहीं, आप सही थे: superuser.com/a/340591/334516
muru

जवाबों:


16

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

हालाँकि कर्नेल स्थान में एक कर्नेल 32-बिट कोड चला सकता है, जबकि उपयोगकर्ता अंतरिक्ष में 64-बिट कोड का समर्थन करता है। जिसमें 64-बिट कर्नेल के साथ 32-बिट अनुप्रयोगों को चलाने के लिए आवश्यक समर्थन के समान हैंडलिंग शामिल है: मूल रूप से, कर्नेल को उन 64-बिट इंटरफेस का समर्थन करना होता है जो अपेक्षा करते हैं। उदाहरण के लिए, कर्नेल में कॉल करने के लिए 64-बिट कोड के लिए कुछ तंत्र प्रदान करना होगा, और मापदंडों के अर्थ (दोनों दिशाओं में) को संरक्षित करना होगा।

सवाल तो यह है कि क्या यह इसके लायक है। मैक, और कुछ अन्य प्रणालियों पर, 32-बिट कर्नेल कोड का समर्थन करने के बाद से एक मामला बनाया जा सकता है, इसका मतलब है कि ड्राइवरों को एक साथ स्विच बनाने की ज़रूरत नहीं है। लिनक्स पर विकास मॉडल अलग है: कर्नेल में कुछ भी आवश्यक रूप से माइग्रेट किया जाता है जब बड़े परिवर्तन किए जाते हैं, और कर्नेल के बाहर कुछ भी वास्तव में कर्नेल डेवलपर्स द्वारा समर्थित नहीं है। 64-बिट कर्नेल के साथ 32-बिट यूजरलैंड का समर्थन करना निश्चित रूप से उपयोगी है और प्रयास के लायक है (कम से कम, यह तब था जब x86-64 समर्थन जोड़ा गया था), मुझे यकीन नहीं है कि 32 पर 64-बिट के लिए बनाया जाने वाला मामला है -बिट ...


धन्यवाद यह मददगार है, हालांकि अब जब गाइल्स ने अपने संबंधित उत्तर को unix.stackexchange पर इंगित किया है, तो मुझे लगता है कि पूर्णता के लिए अधिक वांछित है। मैं जो कुछ वहाँ टिप्पणी धारा में दफनाया, उससे स्पष्ट रूप से यह वास्तुशिल्प सीमाओं के कारण armhf पर अभी भी असंभव है जबकि सैद्धांतिक रूप से i386 के लिए संभव है? बनाया जाने वाला मामला: प्रारंभिक प्रेरणा रास्पियन थी, जहां पाई के शून्य के साथ संगतता बनाए रखते हुए नींव का रोडमैप वर्षों तक एक ही कर्नेल को बनाए रखने के लिए है।
21

3

हिम तेंदुआ एक इंटेल 64 बिट सीपीयू में 64 बिट्स बायनेरी चलाने में सक्षम था।

यह तब भी 64 बिट कर्नेल के साथ बूट करने में सक्षम था जब आपका एफ़ी पहले से 64 बिट्स था (मैकबुक "ट्रांज़िशन-मॉडल" का मेरा प्रोडक्शन बैच पहले से ही ऐसी मशीन था)।

इसमें कोई एमुलेशन शामिल नहीं था, आपने 32 बिट्स मोड में बूटिंग के दौरान छोटे प्रदर्शन लागत का भुगतान किया।

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

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